Skip to content

Instantly share code, notes, and snippets.

@Philogy
Last active October 22, 2022 20:00
Show Gist options
  • Save Philogy/1303805cc7b27e467bf162bce7f39ad4 to your computer and use it in GitHub Desktop.
Save Philogy/1303805cc7b27e467bf162bce7f39ad4 to your computer and use it in GitHub Desktop.
Efficiently reverse and return arbitrary calldata
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity 0.8.15;
import {Test} from "forge-std/Test.sol";
import {HuffDeployer} from "foundry-huff/HuffDeployer.sol";
/// @author Philippe Dumonet <philippe@dumo.net>
contract ReverseTest is Test {
address reversooor;
function setUp() public {
reversooor = HuffDeployer.config().deploy("Reverse");
}
function testReverseDeterministic() public {
_reverseCase("", "");
_reverseCase("a", "a");
_reverseCase("abc", "cba");
_reverseCase("ab", "ba");
_reverseCase(
hex"676f6f206361746368203b29",
hex"293b206863746163206f6f67"
);
_reverseCase(
hex"fbcb8250b48f787d1e7adeb533eab384da4c05d3a4312cffc8a7439f0a6042136baf57a49b1c5ef4ef9cfb4ecac6483a54526901cd1b23d9c744a0aaba30974aa38fa405f21487336b4d9dc7a8775a517f378890b6f8165c50bd95744498f0e1b3312008770eccfe0fe5dabbfb7d14724929d45efa5aa310dec3431cbcd7b2e51375e73c4935d9aad4f8356894310c696410c060630a9438875d0446284ee11f59a73d92ad53b5344e863c3719ef54a6f98ec97150179d1a979e958c0105e82587ff04743df1610eb7b1c9a5ff6b38a26caf369a11b780f4462767a712243f093ce52c3811442e6d9f4283fb4621b1dc594f5fd345a638fcc30d37b7a057b054cf51d39de6f7cc6d0e2ee81ab97261343a809e2dddad29d61cd1e984c64e5c61598efba989842e3d572fb6aad238c2c0cc783defe3be4154ef9725362c6253520645714869d8cf96d4aff451d4b89bf0d348db591edb704cebc2005bc65b04bb2761ff5ec24750ddbf5423c002b74126d3580d25d8f27420ed88bf6cf9c7a46fe38bf99b192a0608ac77a90e9753853a5068e91ec504ab3c2b4fb1be705e41159c01b4a1546b3a15ff83820c6e14f827cfe8313eab949e7f32992b9da0e29a77e6259c3f016588c2203992b1dea60daade4b89ed9683bfa7327c73acb263146b7ff8126a45540a4a552faf3c4025c35947e9e385ae9c79f784d7fb8cf2a2edf13fe1de0b6703acdcd41fbf7ac8d2259243544d39a7c8c4733399ad2d92219925166c7f8297a02abc3caf6abc86ab18bf990686bcd246d725b03778190882f7f1bdc34667388844fe6d5fce0747d6f8df2075d72f911bb31bbc97f4cd5478deb712563a23d5e3b52034c697d346363136ecccbff42c6e3243381fa52d0bc2325be115a3cc877b8be944b8f2d1c6bc164c5251bdae2cd2a4843d6f022f8bb46fcdf3c8b2e978d48635ce2f02332391e4d22b1b4f6f853e51556c4bc12898d6deb4e955eb0018249472827dbae2a9d590a68218ebb4658fd15e554c8cf828b58a313f9ea11ffc3960040f063ed73d39589f024feeaa0e8cfc4f05df22a63ba5532c425f31f00ff58f66f1c70f411df6917d2210f7f953dcadd6ed9b3c978fef33559d1450a607416ab3b1e18e46a4ba4e5e15e096379017d2787ffd5f7f02b5135438c10712ef0e006f70a8dc3a63a86081956919c11ee42b4bb1bf8b38696121108e818e04959f48bf5f99bb59e2ae4fb30b68c11197199f546343777bc3194dc4b24dd177b7578c6a0a11d1709edc290ec7d61158ae25e71dd97caaa739e81c3bd7786107af822eed538a69d1afada7b6277b69c252d48498727945909459ac2d8345bf8e0bf129865d18e20c7127eb22acffca916fbb5fb6913e9642bd3ef4ad77e31a9d453201d71c2f132e32f034626b0d93d0e44e14497a49439b9871ec80242e9458a2a9e8cfb13fe459244698e72785ea665c0ddfdb971dd4495a674c916e5934d944eef699c5d6004e5671fb02c68f94128fd32a819ac49afa9993",
hex"9399fa9ac49a812ad38f12948fc602fb71564e00d6c599f6ee44d934596e914c675a49d41d97dbdf0d5c66ea8527e798462459e43fb1cfe8a9a258942e2480ec71989b43497a49144ee4d0930d6b6234f0322e132f1cd70132459d1ae377adf43ebd42963e91b65fbb6f91caffac22eb27710ce2185d8629f10b8ebf45832dac5994904579729884d452c2697b27b6a7adafd1698a53ed2e82af076178d73b1ce839a7aa7cd91de725ae5811d6c70e29dc9e70d1110a6a8c57b777d14db2c44d19c37b774363549f199711c1680bb34faee259bb995fbf489f95048e818e10216169388bbfb14b2be41ec11969958160a8633adca8706f000eef1207c1385413b5027f5ffd7f78d217903796e0155e4ebaa4468ee1b1b36a4107a650149d5533ef8f973c9bedd6addc53f9f710227d91f61d410fc7f1668ff50ff0315f422c53a53ba622df054ffc8c0eaaee4f029f58393dd73e060f046039fc1fa19e3f318ab528f88c4c555ed18f65b4eb1882a690d5a9e2ba7d827294241800eb55e9b4ded69828c14b6c55513e856f4f1b2bd2e4912333022fce3586d478e9b2c8f3cd6fb48b2f026f3d84a4d22caebd51524c16bcc6d1f2b844e98b7b87cca315e15b32c20b2da51f3843326e2cf4bfccec36313646d397c63420b5e3d5233a5612b7de7854cdf497bc1bb31b912fd77520dff8d64707ce5f6dfe4488386746c3bdf1f78208197837b025d746d2bc860699bf18ab86bc6aaf3cbc2aa097827f6c16259921922dad993373c4c8a7394d54439225d2c87abf1fd4dcac03670bdee13ff1eda2f28cfbd784f7799cae85e3e94759c325403caf2f554a0a54456a12f87f6b1463b2ac737c32a7bf8396ed894bdeaa0da6deb1923920c28865013f9c25e6779ae2a09d2b99327f9e94ab3e31e8cf27f8146e0c8283ff153a6b54a1b4019c15415e70beb14f2b3cab04c51ee968503a8553970ea977ac08062a199bf98be36fa4c7f96cbf88ed2074f2d8250d58d32641b702c02354bfdd5047c25eff6127bb045bc65b00c2eb4c70db1e59db48d3f09bb8d451f4afd496cfd869487145065253622c362597ef5441bee3ef3d78ccc0c238d2aab62f573d2e8489a9fb8e59615c4ec684e9d11cd629addd2d9e803a346172b91ae82e0e6dccf7e69dd351cf54b057a0b7370dc3fc38a645d35f4f59dcb12146fb83429f6d2e4411382ce53c093f2412a7672746f480b7119a36af6ca2386bffa5c9b1b70e61f13d7404ff8725e805018c959e971a9d175071c98ef9a654ef19373c864e34b553ad923da7591fe14e2846045d8738940a6360c01064690c31946835f8d4aad935493ce77513e5b2d7bc1c43c3de10a35afa5ed4294972147dfbbbdae50ffecc0e77082031b3e1f098447495bd505c16f8b69088377f515a77a8c79d4d6b338714f205a48fa34a9730baaaa044c7d9231bcd016952543a48c6ca4efb9ceff45e1c9ba457af6b1342600a9f43a7c8ff2c31a4d3054cda84b3ea33b5de7a1e7d788fb45082cbfb"
);
_reverseCase(
hex"544d5fbe8f91a9d70825069afaf3faf74cfd64a608cdafc6c27f8c7bcabc646dd8b73f71db185df70421ef110e8b46b61d491be0796d0e1b89dd866c0e4d2814c3d50dc893386e7803ea8e020478a9f9dd8cc30652f2d54e44b12363d2153283a6051251ea2d99855703ced7940d1c08e1ef9a404b0460c47057533cda7cbcdd788b991ea67d9f75dd170630ea5b9f8e6970b70b32d227fc030d8a3bffa4227e54a67e57e9c508830e426d0dcc0755485934a3c02684850da43379d7ce254483372a7bfb931b032b9d6bfdf46adedb4b80333804b5cc716b152e7970bb0e49c43568c9f8b3e73d93d959fb9d6f0cda6d05d684b4fd2d9012609430c2a9d55374bd83974e3d02f20c2f239a15a7fb1dd070564995ca149fb7ebf540d90fb2b8fb34be2caf3050fa1f6d87db0a5ab9b6abd47541fc52719df82e5bc2dafd62cabcca44a9bf35e489ee37f7bfa29eead5879b5fd87629e8182096833ccf2905fef70e3729ddcce3c03e0a5f61e3a8c76887a58c9fef2633104556038286d959b9914fcd682162705d6a9fdadfd10bfcdc9f71d7c4aaf6a3602575aa3261e294cccc93995072a1284470b265ef5085581ee55c27d616f860cd220cabef990573040b7a5c3c26e13f3da99e844636bd58161755de33c8f04cee9679dfac84e5392612b528271ad8cb1379cb92cbc867d32e5b253f963157d33a9c81c8f2ba9ce9264061b1c44406795ec03489312a9947b2378953d08684367d9c09ec2fae6041193923be1aa907f58a7c6c049b37752b3f081af99aff7b4994f1860003f898795ad4365e1cd1c68a1d18b5beaba4775f07ac6c27d1d0948da5b3ee9c3ec83896f70e8da20339693563d5f6057cf67bf3d23ffad0de9dfd53e68e16f9592a2e9c50502ce2f2a73898123469fb38aaa0455f337c042160f011d7114716099874c395d43a56445ad5d88d4f05f08b3d475b5c5dda6a7834fd0d7be5ec17c578fd6810bf41f67a7ffd052da05087b08fddf6eeb0565540a39840ee111d784d58b11bfab2362d52b24c99daf5f0efde5acbefe84414d40c396aa45395e18085e9ba7cb6b799b13d8a186f9b571af5b7bf95531573e3906540023774e432a2d1cb61be3f75fd6cb1e8a49ca43d31887f5efd00d1ec8388db3c5bf7376b704f0e2ad806874d738b8c96602a85b8436dc363ec644808f1115b40771bed5a012dcdc7a7190771019ac45d3777a027f33a9f7be3458ddbb20ee40827cbf06f23f9b9adc307ad532b9b6c8a887aaab46556eed2d6b540b675172cb19c1d3f275f281b831efe2fc5110f2969d074be216ae68ddd",
hex"dd8de66a21be74d069290f11c52ffe1e831b285f273f1d9cb12c1775b640b5d6d2ee5665b4aa7a888a6c9b2b53ad07c3adb9f9236ff0cb2708e40eb2db8d45e37b9f3af327a077375dc49a01710719a7c7cd2d015aed1b77405b11f1084864ec63c36d43b8852a60968c8b734d8706d82a0e4f706b37f75b3cdb8883ecd100fd5e7f88313da49ca4e8b16cfd753fbe61cbd1a232e4743702406590e373155395bfb7f51a579b6f188a3db199b7b67cbae98580e19553a46a390cd41444e8efcb5adeeff0f5da994cb2522d36b2fa1bb1584d781d11ee4098a3405556b0eef6dd8fb08750a02d05fd7f7af641bf1068fd78c517ece57b0dfd34786ada5d5c5b473d8bf0054f8dd8d55a44563ad495c3749809164711d711f06021047c335f45a0aa38fb6934129838a7f2e22c50509c2e2a59f9168ee653fd9dded0fa3fd2f37bf67c05f6d56335693903a28d0ef79638c83e9ceeb3a58d94d0d1276cac075f77a4abbeb5181d8ac6d11c5e36d45a7998f8030086f194497bff9af91a083f2b75379b046c7c8af507a91abe2339194160ae2fec099c7d368486d0538937b247992a318934c05e790644c4b1614026e99cbaf2c8819c3ad35731963f255b2ed367c8cb92cb7913cbd81a2728b5122639e584acdf7996ee4cf0c833de55171658bd3646849ea93d3fe1263c5c7a0b04730599efab0c22cd60f816d6275ce51e588550ef65b2704428a172509993cccc94e26132aa752560a3f6aac4d7719fdcfc0bd1dfda9f6a5d70622168cd4f91b959d98682035645103326ef9f8ca58768c7a8e3615f0a3ec0e3ccdd29370ef7fe0529cf3c83962018e82976d85f9b87d5ea9ea2bff737ee89e435bfa944cabcca62fddac25b2ef89d7152fc4175d4abb6b95a0adb876d1ffa5030af2cbe34fbb8b20fd940f5ebb79f14ca95495670d01dfba7159a232f0cf2023d4e9783bd7453d5a9c230946012902dfdb484d6056dda0c6f9dfb59d9933de7b3f8c96835c4490ebb70792e156b71ccb5043833804bdbde6af4fd6b9d2b031b93fb7b2a37834425ced77933a40d858426c0a33459485507cc0d6d420e8308c5e9577ea6547e22a4ff3b8a0d03fc27d2320bb770698e9f5bea300617dd759f7da61e998b78ddbc7cda3c535770c460044b409aefe1081c0d94d7ce035785992dea511205a6833215d26323b1444ed5f25206c38cddf9a97804028eea03786e3893c80dd5c314284d0e6c86dd891b0e6d79e01b491db6468b0e11ef2104f75d18db713fb7d86d64bcca7b8c7fc2c6afcd08a664fd4cf7faf3fa9a062508d7a9918fbe5f4d54"
);
_reverseCase(
hex"3574b2eecd0e16245217d372999c733569692c3217c2f7dcc35d54558500642806d016386e2322e14584eff44ce7ddd36f211ea0e6f519a45127232de274c20d12d738136de3d088c5b963e32f16bacd64504ccdc5dac3738b8add49b7ccfaf9368226881aa4d10a7490cf80e16c8ce4d7e94ed439862fd70bc742076f601d3b4dc7e2c1400b0944b1414a60d2a5f61a71d993727fb7107e88ac07d4136dbfab36fa9cc5734bd7658c7a62097444695f6218b4f7aab63e1f8e45f865ea899d5e32d39455fbe966e809295eeafaf3fd8c4d0a12061742b6e292a4cfb1c83be5f70050be6eb74fcad3c847b4aa2a9c7fcea88ddf68144032c37abd8ffebbc6cb43240cfafc378525bf4af3e7b24b246223be1d5dbf845320b483a223fac8d6da83f212b1",
hex"b112f283dad6c8fa23a283b4205384bf5d1dbe2362244bb2e7f34abf258537fcfa0c2443cbc6bbfe8fbd7ac332401468df8da8ce7f9c2aaab447c8d3ca4fb76ebe5000f7e53bc8b1cfa492e2b6421706120a4d8cfdf3faea5e2909e866e9fb5594d3325e9d89ea65f8458e1f3eb6aaf7b418625f69447409627a8c65d74b73c59cfa36abbf6d13d407ac887e10b77f7293d9711af6a5d2604a41b144090b40c1e2c74d3b1d606f0742c70bd72f8639d44ee9d7e48c6ce180cf90740ad1a41a88268236f9faccb749dd8a8b73c3dac5cd4c5064cdba162fe363b9c588d0e36d1338d7120dc274e22d232751a419f5e6a01e216fd3dde74cf4ef8445e122236e3816d0062864008555545dc3dcf7c217322c696935739c9972d3175224160ecdeeb27435"
);
_reverseCase(
hex"24153e8ef6a260bb1b6b0481dee502e1608442ade171383cf35b122b2dda35054d0e926d73e8aa8b222aafc99d5b3a406e7944e3e6687252ecb1ddd000780f4b8965282783f777abfa",
hex"faab77f783272865894b0f7800d0ddb1ec527268e6e344796e403a5b9dc9af2a228baae8736d920e4d0535da2d2b125bf33c3871e1ad428460e102e5de81046b1bbb60a2f68e3e1524"
);
_reverseCase(
hex"311751d6eab748768e36e194fb15596acf368fdb68d8b40e53ede3c5b2acbfb560f4f752bcd833860474515c1d23ee7392cc7829a1f1c539a6037ab322f84ffe552d8cf824123514e8c3ba4b4c6c700dfde35f8ae8422b3bb83e5ee95c351719bca3e83a78c44bb14b8a736be759cf4e59186ae7eb07f013073f0e27c9474c50709598c380ece559ebec553721247ea6f8eb3a9dcb0cfbd5c6a19a20e4ef018474488335a38e023b754a24ead9b9f477991e4e25440bed086c6dc76b5d5cb3d7ef8fb851b193a5f6edce575a0eb9e67bae36bbe31349cad52c3b0b9e47555c6b77fc197c5124e9db1f762bed68b35b463b3a43b4c5118b90c29f6a742a088e1aba79c1fa1a50237c52222a41a6703fc15ff3e7fb1c78ad9383fc8b88f7f6445e77a518c94815bfe94b26ac85db76665b1f3a557e417d8aa884c5c3f2660e35977a33eab2ff656b057cf30bf7255baccf2ff3bcabdc2d94a4a04db3af2cf13a88df06718d683901dc018aa618cea64481528dba287849862a3a2c2c6ec63adeee0fda2e269658fa3a6e9ac2b56fa4fb7a6f1433d0efeb79a7a08bd8bb7f6b75246ebed3b85d5607177e5c8bfeb7177ab73f53fce1d63ef971c27bd78423dbee119808053fe311557aac4c9de84c9a9d426ab56d63d7668b0088eb58768e621f03545d1966afe8406675e21ea174990f7e9d5f8468e3de2e992864b596873b3ba5ccff949a1e90c7dfe0394b7bea32de4667f646d64bd58424ecc638dcea4886b3df459673fda43aef821a7e99a3128a288227304385aa1b3b21d73526c5493d4bb129d03cc705a906da77b22a68cde1163820c0835ad13e72df74c876403d923c6a67d3c04de28d50ed6c4ecfdd41e15998eb41ee47b590b6565ba608c736dc8d1b23a63879a63fb3af41cbe9fa09a9ca06afda0fbf6c65fcee01acac9c6fc8a3d93dbb966abcac4f637c1d282627782c16e20c5ae6a1ae2093d4936f0520b22e521f5f85b205532e22d2825ed022f48edb3efcfdea648958995717f78be4b5124743a0932c04d7f3c405b180ca5b189c192468dab6f0c061964f741275df0bcbb573bba1005ea801dae34e05288eaff39644ac5fb71fe2b92e280390e4dcc4ae5a2f49a7788cbb44cced6ca1feee4015b7664724f2bccebe6c3573cce0a25b0cc75dcfe4500b376ba5b4a82b6f74ad84571258501bd70257bb32c23aa55eaa8c6259578b9f6e6a03a0d414ac42e22f78955bea688f0c3c33327fd1bd9ee1c4da3f84888d71069e5e015d0a5cd664df3e0255e4c6d08e7a3f4947886eb0dfcef96a6733e620fbeb49a56d9527ae04a0af24e041dd65a6271539c65d51c8646fcfff9f7ac066483ebed0848a43bc7e24dfbe1e3836e66608b0b0887d32099fbd473df5eca0632da6d61c67571711f8981851a5efe736e8da5291a453a4182eb9390e53197f1711d5ccb2584364882d0a287b800a44528cbeadf33afdf5d80b3cf34346ed2f78ae6f82911ea6f60dccf51af4ec4efea6ca2f4172d754f89193127ee149b7cf0d8f6620638f79128f9a046adb7c2fb5543c9335cb70c797b799863d4c4f5edc9a7a704aa83852c054d2e8dc37b8f814490d2a59fa",
hex"fa592a0d4914f8b837dce8d254c05238a84a707a9adc5e4f4c3d8699b797c770cb35933c54b52f7cdb6a049a8f12798f6320668f0dcfb749e17e129391f854d772412fcaa6fe4eecf41af5cc0df6a61e91826fae782fed4643f33c0bd8f5fd3af3adbe8c52440a807b280a2d88644358b2ccd511177f19530e39b92e18a453a49152dae836e7efa5511898f8111757671cd6a62d63a0ecf53d47bd9f09327d88b0b00866e636381ebedf247ebc438a84d0be3e4866c07a9fffcf6f64c8515dc6391527a665dd41e024afa004ae27956da549ebfb20e633676af9cedfb06e8847493f7a8ed0c6e455023edf64d65c0a5d015e9e06718d88843fdac4e19ebdd17f32333c0c8f68ea5b95782fe242ac14d4a0036a6e9f8b5759628caa5ea53ac232bb5702d71b5058125784ad746f2ba8b4a56b370b50e4cf5dc70c5ba2e0cc73356cbecebcf2244766b71540eefea16cedcc44bb8c78a7492f5aaec4dce49003282eb9e21fb75fac4496f3af8e28054ee3da01a85e00a1bb73b5cb0bdf7512744f9661c0f0b6da6824199c185bca80b105c4f3d7042c93a0434712b5e48bf7175799588964eafdfc3edb8ef422d05e82d2222e5305b2855f1f522eb220056f93d49320aea1e65a0ce2162c782726281d7c634facbc6a96bb3dd9a3c86f9cacac01eefc656cbf0fdaaf06caa909fae9cb41afb33fa67938a6231b8ddc36c708a65b56b690b547ee41eb9859e141ddcf4e6ced508de24dc0d3676a3c923d4076c874df723ed15a83c0203816e1cd682ab277da06a905c73cd029b14b3d49c52635d7213b1baa8543302782288a12a3997e1a82ef3aa4fd739645dfb38648eadc38c6ec2484d54bd646f66746de32ea7b4b39e0dfc7901e9a94ffcca53b3b8796b56428992edee368845f9d7e0f9974a11ee2756640e8af66195d54031f628e7658eb88008b66d7636db56a429d9a4ce89d4cac7a5511e33f05089811eedb2384d77bc271f93ed6e1fc533fb77a17b7fe8b5c7e1707565db8d3be6e24756b7fbbd88ba0a779ebefd033146f7afba46fb5c29a6e3afa5896262eda0feede3ac66e2c2c3a2a86497828ba8d528144a6ce18a68a01dc0139688d7106df883af12cafb34da0a4942ddcabbcf32fcfac5b25f70bf37c056b65ffb2ea337a97350e66f2c3c584a88a7d417e553a1f5b6676db85ac264be9bf1548c918a5775e44f6f7888bfc8393ad781cfbe7f35fc13f70a6412a22527c23501afac179ba1a8e082a746a9fc2908b11c5b4433a3b465bb368ed2b761fdbe924517c19fc776b5c55479e0b3b2cd5ca4913e3bb36ae7be6b90e5a57ceedf6a593b151b88fefd7b35c5d6bc76d6c08ed0b44254e1e9977f4b9d9ea244a753b028ea3358348748401efe4209aa1c6d5fb0ccb9d3aebf8a67e24213755eceb59e5ec80c3989570504c47c9270e3f0713f007ebe76a18594ecf59e76b738a4bb14bc4783ae8a3bc1917355ce95e3eb83b2b42e88a5fe3fd0d706c4c4bbac3e814351224f88c2d55fe4ff822b37a03a639c5f1a12978cc9273ee231d5c5174048633d8bc52f7f460b5bfacb2c5e3ed530eb4d868db8f36cf6a5915fb94e1368e7648b7ead6511731"
);
_reverseCase(
hex"39e0e5d63ef3aa18a0e1d6a09018bfb9160d84e89616445c4e2cfb726db2d39baec12968929b7accc4a8f41637788a05118a4e66e6ee6fc182805f884899d5792833b1c4c9e75c5e5d1e57edbd82ada1e33ef6f25d608aeffae336e5413baaba00dd168764b54815b80b96e7165f602c6a506c63e3df197d6be35dbf0b6fef708ed3bcd66d8ff743120cb310c4b58588adb753a5b3b132b867c808dd9d2f6c8037db139b871b7fe4110d474cb783f66783db38c40a186f1a09a337412837f3ab9afe744a83065e9d09a7bd976b3b6a090b6eddd3bd99eb8f352a70e237f6ede88fc53e4f93a33417755d70d4708ab9513c",
hex"3c51b98a70d4705d751734a3934f3ec58fe8edf637e2702a358feb99bdd3dd6e0b096a3b6b97bda7099d5e06834a74fe9aabf337284137a3091a6f180ac438db8367f683b74c470d11e47f1b879b13db37806c2f9ddd08c867b832b1b3a553b7ad8885b5c410b30c1243f78f6dd6bcd38e70ef6f0bbf5de36b7d19dfe3636c506a2c605f16e7960bb81548b5648716dd00baaa3b41e536e3faef8a605df2f63ee3a1ad82bded571e5d5e5ce7c9c4b1332879d59948885f8082c16feee6664e8a11058a783716f4a8c4cc7a9b926829c1ae9bd3b26d72fb2c4e5c441696e8840d16b9bf1890a0d6e1a018aaf33ed6e5e039"
);
_reverseCase(
hex"87f456d26b0bdcdd4c75e017e35092ebb4bf324805c4c7a2f6be5328c706b057da5b331f57f18fa3dd0711de4f28485a41b82810cb3f66a6ef09532f87469aac9b0dc2d541a7b09714745e0800ed635482f1b7b0ba054c49da2187c3330ecaf5415d7d001af1cae6fe0843c58417d50b288428787811faccce4835fc955ac67f3b83a5942d4375d1666cb01ca17d9122710d977185ab35a90255708f6aa34d6135c897d5e00d0aa711576745087c26e363ebfb4982c6355c2c018eb4956cd096f64f63d5277b96e3741509222cd1725420472af0cbcebd2f54030ce4049de35903c7147719f6ffb5fced26f921f7f4d87b9f3c8966ef72a959c4e0ae7f8b4487910f8e129db8d9725f1bc7f96a260aa3e242cbf5989b6e458d1beec7a0d7cf0decf9b159b0e01fe91bac64b40e1e715ec708b26bfb5271c5aace169701ee1e89d7e71a61c24a579109d312861d8dbf7f9cc7fa3c853883af6b5d7e0d8831380e18bc6cb86cd526fc05b8f713957a59265cb69ce0d14289f10056a2c4eba055f8e9527a2b6be14b38e4a04db714e4c50a959a9a92858ed5af2f5bea418478db57e3c6f0891397fb9e24378e1060ea7ded5629fa6f89d3e3fd049ef3996107473989bb0c5945996663abb65336b6e0bb863769c499f680635cec4c4092564d445dc4ae471538c00b6dbbe6418be618cd13038795ea03889b0c8b3806f4ff097a1309e66e468c35e394f371eef5d8e5e613fb47eaf7d6389061f52052a9c0ece37c0af08dfec335739a953c705b17c60806d757c227b3cfa573e08a70e3f47e60dba8e8c7deb5a384a1167e908a85f3774971fea617829a2f3eb7ae90b8373015202705eecc517b413604e85100e38eac47a9a4830ea2bb18c95b192d839d1fc71f556d279ff6cb4eb12130e44be3e612c35b479487cf293b0899627ea8b2670524122352329bec3c930aecffc2c1ea9e8806fcc83d45805add075c2081471eb5f6b3875c5dafff566bd8b9f39c6f7c509342806dc1ed6998fbdb004c8a2d54ff9710aea21e687b25aeea7ca1e9260a294961aeb962adaf964bdf927af0f5f3e2f0049634ec08574601d98f4bf2fa1c904152c39fa92947b9ff5d3b4027d47467457ee673acb74723c8dfe4bc0b65196524c56f00fd545aff2698542d65687a8cd857a0e04231370ea4633ca0e32e4872f7f5b576593c644abefbe7743f6eb82c4abef198c637d0bf1b9f70b0118138d58e743c87fef634f65b3c0693ab0b6cb9ec6143aa9c447afca1c48a6e881488a25a43f21fb13ecfe95bff98723c8bd15888679df4e5dd4d44e773dcd5059b29c9c54c480dd365338d3bc9f71a97efb743bf371a0e0483820120fdd221ca38326735",
hex"35673238ca21d2fd20018283040e1a37bf43b7ef971af7c93b8d3365d30d484cc5c9299b05d5dc73e7444ddde5f49d678858d18b3c7298ff5be9cf3eb11ff2435aa28814886e8ac4a1fc7a449caa4361ecb96c0bab93063c5bf634f6fe873c748ed5388111b0709f1bbfd037c698f1be4a2cb86e3f74e7fbbe4a643c5976b5f5f772482ee3a03c63a40e373142e0a057d88c7a68652d549826ff5a54fd006fc5246519650bbce4dfc82347b7ac73e67e456774d427403b5dffb94729a99fc35241901cfaf24b8fd901465708ec349604f0e2f3f5f07a92df4b96afad62b9ae6149290a26e9a17ceaae257b681ea2ae1097ff542d8a4c00dbfb9869edc16d804293507c6f9cf3b9d86b56ffaf5d5c87b3f6b51e4781205c07dd5a80453dc8fc06889eeac1c2ffec0a933cec9b32522312240567b2a87e6299083b29cf8794475bc312e6e34be43021b14ecbf69f276d551fc71f9d832d195bc918bba20e83a4a947ac8ee30051e80436417b51ccee052720153037b890aeb73e2f9a8217a6fe714977f3858a907e16a184a3b5dec7e8a8db607ef4e3708ae073a5cfb327c257d70608c6175b703c959a7335c3fe8df00a7ce3ecc0a95220f5619038d6f7ea47fb13e6e5d8f5ee71f394e3358c466ee609137a09fff406388b0c9b8803ea95870313cd18e68b41e6bb6d0bc0381547aec45d444d5692404cec5c6380f699c4693786bbe0b63653b6ab63669945590cbb893947076199f39e04fde3d3896ffa2956ed7dea60108e37249efb971389f0c6e357db788441ea5b2fafd58e85929a9a950ac5e414b74da0e4384be16b2b7a52e9f855a0ebc4a25600f18942d1e09cb65c26597a9513f7b805fc26d56cb86cbc180e3831880d7e5d6baf8338853cfac79c7fbf8d1d8612d30991574ac2611ae7d7891eee019716ceaac57152fb6bb208c75e711e0eb464ac1be91fe0b059b1f9ec0dcfd7a0c7ee1b8d456e9b98f5cb42e2a30a266af9c71b5f72d9b89d128e0f9187448b7faee0c459a972ef66893c9f7bd8f4f721f926edfcb5fff6197714c70359e39d04e40c03542fbdcecbf02a47205472d12c22091574e3967b27d5634ff696d06c95b48e012c5c35c68249fbeb63e3267c0845675711a70a0de0d597c835614da36a8f705502a935ab8571970d7122917da11cb06c66d175432d94a5833b7fc65a95fc3548ceccfa1178782884280bd51784c54308fee6caf11a007d5d41f5ca0e33c38721da494c05bab0b7f1825463ed00085e741497b0a741d5c20d9bac9a46872f5309efa6663fcb1028b8415a48284fde1107dda38ff1571f335bda57b006c72853bef6a2c7c4054832bfb4eb9250e317e0754cdddc0b6bd256f487"
);
_reverseCase(
hex"288b195895ba93fdd71150a9d646e30acb34da9285195745f6ef3eef114251d9586d202275eea2de6a28ddc2898e934083ab611442673988ccb79318caa6285407e004bfa6f70163ee3ac20c15c2785e4d06d6a14fdb44196bee9235a404dd4e42e4e546cc8c7a2b21c979e6042f3ea035e3a324be7b94128632cf14a59dac5cef9a455c5cb6c4f2ce463b5831921cfab4cff2342c5b745eaa36db5f86f1fd39ca0dfa15a5f0246f4b6a961b532e5f41c878a6f8708f728bbb213d148cfd10aee488c1788dfc7972c7537d77144dfca8814066a7318510a66f4d80963d33f5ed65f1cc2e9eb024a404a8525fe8b4bb2fa5e860495ed42b1a6f8afd85b3d1e2d705da154fe9d2c055870c17aca1aa0549165ea597a993868479575890dfbee084c0f3602e13ead23756e5a5a1ead9bdc0259d72afb90f0cc2dd982d9941a54e9420c0905602cad9b097a365ba9db047be968e28bb75c62a00ccaba209eac18e26c63a4a3779f914627ac439cc73850645f7b098f12e3f36de77a43c8e805c97c0f0a9c79895997fa7198924a519b52f3b86688c886d9ac1de97ae3f16951f9f04cae9bffb92293be3e01fa355a9ae9f52c1cea7c7a534313657",
hex"57363134a5c7a7cec1529faea955a31fe0e33b2992fbbfe9ca049f1f95163fae97dec19a6d888c68863b2fb519a5248919a77f999598c7a9f0c0975c808e3ca477de363f2ef198b0f745068573cc39c47a6214f979374a3ac6268ec1ea09a2abcc002ac675bb288e96be47b09dba65a397b0d9ca025690c020944ea541992d98ddc20c0fb9af729d25c0bdd9eaa1a5e55637d2ea132e60f3c084e0bedf90585779848693a997a55e164905aaa1ac170c8755c0d2e94f15da05d7e2d1b385fd8a6f1a2bd45e4960e8a52fbbb4e85f52a804a424b09e2eccf165edf5333d96804d6fa6108531a7664081a8fc4d14777d53c77279fc8d78c188e4ae10fd8c143d21bb8b728f70f8a678c8415f2e531b966a4b6f24f0a515fa0dca39fdf1865fdb36aa5e745b2c34f2cfb4fa1c9231583b46cef2c4b65c5c459aef5cac9da514cf328612947bbe24a3e335a03e2f04e679c9212b7a8ccc46e5e4424edd04a43592ee6b1944db4fa1d6064d5e78c2150cc23aee6301f7a6bf04e0075428a6ca1893b7cc883967421461ab8340938e89c2dd286adea2ee7522206d58d9514211ef3eeff64557198592da34cb0ae346d6a95011d7fd93ba9558198b28"
);
_reverseCase(
hex"33577137dc75664f33038b7b7ecdcf3a86b79f322747e846bcda7bb9327e7f46b590901bba1c70a8b21abccc00e1ac3372e7f6d043f0b95f8bfc1942210ede2b1dbd6d8f237769cf8503613f25e3beeece75f7b7845e059072a748f7f24500da8e4f18ce02f538674f085d0a278f8ebc9e05374e4a1ae955b1e0034759c1f6e069fc8e7c50d1159367eaf868aa027b66cdac013f78933bf53b19dfb9b5266e74c5f054b0e212c17d454e3eb0a719df30d0d91d9ff4cdfabf5372a6dae37dc8be8537de03d79f5127570426a8fb0aa8c191464e9b00b1a023f2b2d1dcbe73825b527581d6d923dafe369791e67cc4a85ab559cf2aeea2914e2607e906cf2a894e2148ae56256c",
hex"6c2556ae48214e892acf06e907264e91a2ee2acf59b55aa8c47ce6919736feda23d9d68175525b8273bedcd1b2f223a0b1009b4e4691c1a80afba826045727519fd703de3785bec87de3daa67253bffacdf49f1dd9d030df19a7b03e4e457dc112e2b054f0c5746e26b5b9df193bf53b93783f01accd667b02aa68f8ea679315d1507c8efc69e0f6c1594703e0b155e91a4a4e37059ebc8e8f270a5d084f6738f502ce184f8eda0045f2f748a77290055e84b7f775ceeebee3253f610385cf6977238f6dbd1d2bde0e214219fc8b5fb9f043d0f6e77233ace100ccbc1ab2a8701cba1b9090b5467f7e32b97bdabc46e84727329fb7863acfcd7e7b8b03334f6675dc37715733"
);
_reverseCase(
hex"dff39d3a6b2a038a53f47c605dcfbdf4e8cb96377ca2b1bc060a501df5491d37b1a7aa647f349c645c30040e515f61f0eb42c3f59e3544799570607e51e6287030d20155b40a13c8287dc30cd3005acf13a65e97dccc225e91670e27d253001867cf9aff383b0e58ad79f68b9757c2eca9fc391c1a1145f7f88eef4878eb8eba852d23df0663b244696d127096b60f3afec8f6c4859525cdc01a02db034bfd222f41ef690005d157079473749dbcb6417549d47f576d6daeb1e31e20a5ac29d9d4603f6503675cd64b8100b842a9a7ae11406d3f2584b8216415922394ad8519cf018239caeb983fc3a1a25ea8ba1e9f8f3a9dfbeeb538a870d51eb16eb9a435e7298844e473697c40c208555916b528972a563c21ec310f7ec784d070b394f58a94256ee525b536f25e916f38e3d485427a5f314f36d80caebe76a19651faf7741606fe81ad66bae41b86127acc90d64ae07ff694995934ea27e2a57ba763aa50f504ef4149bf71974918f8617224279ddf495c5702cedadcab4fd96df3305d56507ae78683443ced798ad95937330aad02b2768ff09a028d50a75d5e8c903befa0e271d35297a02f83a2fb6f7d89e92b56add325ec54ef4c37010ff2f8a7021ab608c724d384769c3e1265cd4f0d4cf569223b7b23f931ce86e147a4916c4a5ec87dedcccd7ed342bcf3e2ed012b383c74e319c8ed18532dd8ae9fb5d46d5ff9b6fa2398601448302dbee331c871ab92126c2fe9e0b5e56481adc82cbf9cde09b6626484633330a29ccd1f8d446d06819dd86349085f7052f305a34c2c6df1d8cdbb9a2251270db7d5ac30b911d1657ac57728059fc6d3dbd99908ee02ca76da972821d815ae76a36dfa91ff215234554141f9aa0908cb08434c4fe6c26cda5ce8e0a602c912c5a3464797e29fab3caadbdc806a4c3b8441ec9383cf9df51300f50094edbfbbd37c9e36c01dc547fbf0b0ad8dffa60d8c7976c57368d69610598bef452b2489d321eb3916b07d58952d77a03ba0d58373be82758b2d3025ba99f831968ec64235592d52f2ec476c4882d26e7f526c6a8d6c1c2b4e35e447b2bf30fa1ea40413077b13422f18bfc567bdea966b65f9cc68e8d9cd940f70297c632228c2a41aed0b9d9640c1466343f1f49208a3f2c27c97a4c53dfb98bd606a57d4b102a72ddee85e358f19a76a0372a4d1007c2a4738a0030c0dbded7aa390eef3b5d4f4a825cda98a48fb9e5b9371dde206b3b71473e8c724b8e75e75685747faf089359d8c8ef6925db6ad61ca4e07a9b8eb6b3f0d706c23b661c2304b092fe31960a2094707de9113f5e16eabe1e8c71c61d3f5529ce3ed01ab8160e51845537e682c140dd584b3f72323fd104ed14012a542da6b905f85c73701de6568209601068e69b814dd3bb8b1704b130dc58442d589ef2bce5177b004d90665df0a1879e392fdcbc033d1a67f1d6ae4bc972cdbf35bee0ecbdcb78857714e44985f9fdb56026b306815bfe0e9a12900c03c1cff12b93e79abd173d372224822aa3ce174c2e4e0ce7d365d0537f87a8ee7ab0d2975901343d6ec03dad4cb31eeb6cd5f328722d922632f6d63da43e5802c01b4243486a382d06f816e15781039061b68c8366dd10577846692aca5d4d4bd795d57ac9297e8b75836c124117eaa5a3a7c8b6c865a2fec642a05a58a6215e8c31eae59192411d6fbc26f9053105d6637e95876a3ef7f7b6d40bf451749179734c90777df9671b354e37b715e671468d06c3d0c64f5e344cd180257e1a75ba6b0e3ed516ecad87c723b039f51e5eeeb0fbb63cfb995b0747f10c23068974610387aa010499db9ebb4bffd643f0e913150bd35844651679efe3394a44cc2209ca2aec043d093be270f1c0996b6d7550ee1ebcf35fea31e8fdfa7071f06b3cb688d43e767a99da68b6078f2996ada6bb14e1e4eca028546c58a365e5843264a10c476ed6528a46479172c096bb9c4445d1cda59e8cfb662c1333a86c3a73141d01ec26cb43bbce753745e7b2a1a3e0d50a54eb6174c5101e8c455613f9a3e8393b4537220dc2c95fbad97922f15ad45e50720f531102a17c5999c628093cfcbeed6b595a4daf6386844b0a341b6f7f5a1b1c24533e595141ceddf16cc6b77027af5104a81c4f4db9a8233acbafe8327fafe2fe3cc5ed9587e84aa2c0d94158ec21ca076d69c7c8ca38301cc16d01e864b45cf2f16af1ac0821254c3a198862b281c20df7ef61e2636b932a16f4969ef1a95157c33d95c8163c41f3b98367c97b7a6e42be28a320f2168abb154594d355f7767a89cf277dfbf310781b98b32e3c799c0938141d9b246ccce97951a58f718a69897b950bd8cead0c9d85b9cbb42a0b153aa986daef4715d0948008d0447839951e2e7845838f460a35dc0c0203f731ee50e529aa508c91ced918da4540d3ac8f2536c25cc434707d050b134e081904cb1bc0f4d00142ee9caad2e1a6d373a2f959a0c157631f42e17fe7669c438325e2820a9c9941620e9296a0e15c3b9c39edb6cdf064b8c984869df569ede933154cdc80c7697969a6309e86f223ae8f8a0a6964fb31cba3682c073a43733788e92e60930a649df9d7ccbb235bf021b15de05e6704039d5",
hex"d5394070e605de151b02bf35b2cb7c9ddf49a63009e6928e783337a473c08236ba1cb34f96a6a0f8e83a226fe809639a9697760cc8cd543193de9e56df6948988c4b06df6cdb9ec3b9c3150e6a29e9201694c9a920285e3238c46976fe172ef43176150c9a952f3a376d1a2eadcae92e14004d0fbcb14c9081e034b150d0074743cc256c53f2c83a0d54a48d91ed1cc908a59a520ee51e733f20c0c05da360f4385884e7e251998347048d0048095d71f4ae6d98aa53b1a042bb9c5bd8c9d0ea8cbd50b99798a618f7581a9597cecc46b2d9418193c099c7e3328bb9810731bfdf77f29ca867775f354d5954b1ab68210f328ae22be4a6b7977c36983b1fc463815cd9337c15951aef69496fa132b936261ef67edf201c282b8698a1c3541282c01aaf162fcf454b861ed016cc0183a38c7c9cd676a01cc28e15940d2caa847e58d95ecce32ffefa2783febaac33829adbf4c4814a10f57a02776bcc16dfed1c1495e53345c2b1a1f5f7b641a3b0446838f6daa495b5d6eecbcf9380629c99c5172a1031f52007e545ad152f9297adfb952cdc207253b493833e9a3f6155c4e801514c17b64ea5500d3e1a2a7b5e7453e7bc3bb46cc21ed04131a7c3863a33c162b6cfe859da1c5d44c4b96b092c177964a42865ed76c4104a2643585e368ac5468502ca4e1e4eb16bda6a99f278608ba69da967e7438d68cbb3061f07a7df8f1ea3fe35cfebe10e55d7b696091c0f27be93d043c0aea29c20c24ca49433fe9e6751468435bd5031910e3f64fdbfb4ebb99d4910a07a381046976830c2107f74b095b9cf63bb0febeee5519f033b727cd8ca6e51ede3b0a65ba7e1570218cd44e3f5640c3d6cd06814675e717be354b37196df7707c9349717491745bf406d7b7fefa37658e937665d1053906fc2fbd611241959ae1ec3e815628aa5052a64ec2f5a866c8b7c3a5aaa7e1124c13658b7e89792ac575d79bdd4d4a5ac9266847705d16d36c8681b06391078156e816fd082a3863424b4012c80e543da636d2f6322d92287325fcdb6ee31cbd4da03ecd643139075290dabe78e7af837055d367dcee0e4c274e13caa22482272d373d1ab793eb912ff1c3cc00029a1e9e0bf1568306b0256db9f5f98444e715788b7dccb0eee5bf3db2c97bce46a1d7fa6d133c0cbfd92e379180adf6506d904b07751ce2bef89d54284c50d134b70b1b83bdd14b8698e060196206865de0137c7855f906bda42a51240d14e10fd2323f7b384d50d142c687e534518e56081ab01ede39c52f5d3611cc7e8e1ab6ee1f51391de074709a26019e32f094b30c261b6236c700d3f6bebb8a9074eca61adb65d92f68e8c9d3589f0fa475768755ee7b824c7e87314b7b306e2dd71935b9efb488aa9cd25a8f4d4b5f3ee90a37aedbd0d0c03a038472a7c00d1a472036aa7198f355ee8de2da702b1d4576a60bd98fb3dc5a4977cc2f2a30892f4f1436346c140969d0bed1aa4c22822637c29700f94cdd9e868ccf9656b96eabd67c5bf182f42137b071304a41efa30bfb247e4354e2b1c6c8d6a6c527f6ed282486c47ecf2522d593542c68e9631f899ba25302d8b7582be7383d5a03ba0772d95587db01639eb21d389242b45ef8b591096d66873c576798c0da6ff8dadb0f0fb47c51dc0369e7cd3bbbfed9400f50013f59dcf8393ec41843b4c6a80dcdbaa3cab9fe2974746a3c512c902a6e0e85cda6cc2e64f4c4308cb0809aaf9414155345221ff91fa6da376ae15d8212897da76ca02ee0899d9dbd3c69f052877c57a65d111b930acd5b70d2751229abbcdd8f16d2c4ca305f352705f084963d89d81066d448d1fcd9ca2303363846462b609de9cbf2cc8ad8164e5b5e0e92f6c1292ab71c831e3be2d304814609823fab6f95f6dd4b59faed82d5318edc819e3743c382b01ede2f3bc42d37ecdcced7dc85e4a6c91a447e186ce31f9237b3b2269f54c0d4fcd65123e9c7684d324c708b61a02a7f8f20f01374cef54ec25d3ad562be9897d6ffba2832fa09752d371e2a0ef3b908c5e5da7508d029af08f76b202ad0a333759d98a79ed3c448386e77a50565d30f36dd94fabdcdace02575c49df9d27247261f818499771bf4941ef04f550aa63a77ba5e227ea34599994f67fe04ad690cc7a12861be4ba66ad81fe061674f7fa5196a176beae0cd8364f315f7a4285d4e3386f915ef236b525e56e25948af594b370d084c77e0f31ec213c562a9728b516595508c2407c6973e4448829e735a4b96eb11ed570a838b5eefb9d3a8f9f1ebaa85ea2a1c33f98ebca398201cf1985ad942392156421b884253f6d4011aea7a942b800814bd65c6703653f60d4d929aca5201ee3b1ae6d6d577fd4497541b6bc9d7473940757d1050069ef412f22fd4b03db021ac0cd259585c4f6c8fe3a0fb69670126d6944b26306df232d85ba8eeb7848ef8ef8f745111a1c39fca9ecc257978bf679ad580e3b38ff9acf67180053d2270e67915e22ccdc975ea613cf5a00d30cc37d28c8130ab45501d2307028e6517e6070957944359ef5c342ebf0615f510e04305c649c347f64aaa7b1371d49f51d500a06bcb1a27c3796cbe8f4bdcf5d607cf4538a032a6b3a9df3df"
);
_reverseCase(
hex"241e5987b045ec3653468b86ab827825fe92c8a212011fae332d93a0d17db592f9749ed43db02af1298394e79dc6c53646baf9c0845b6b273a2df7a83b108c38e89002c0c6211d19efa4ac80f49e138dd4ea9933eb27ded65e6476ae7a52e84ae0bb862dfe4935a8f31c7535fe362ab4736255491d4c6fbafdd7ed59925476fcec264b86e2095742d1a0453dcaa5681dbf05f3cc5bdd5810e3ed47e53f3bffe86173c396a5e41c5687cb28caa7bf5535336c3559c9c697ec63cbb222f9e3b79da0f5521a8c71409b501c364791c9b199d14ca979ee1ea5d26701d3d75e50582e1287216d3eed6640d4cfc944d428ba8c74949d77c428cef79c1f5fd430895b62ee3a63d22fc0c08d5fe53d4cdf7f8c8dc5a1b1a9f31747bb931f393d8889e58ad65e21eb96f082a5e49bc26939534e5b5d2b0c57cf98ba2bc96ee909e377bf60e4fb38f210988d28c0217e7820f93567c4d6f46177ba6189a844ab7a18eadcc58ca0674e5fdf1f326e78080e7563e25b5fce65d10a0bceda920725355ec92d33a8696636fab09f1d7912c9a3aeac8e1d6bb91a0d56de45146fa42a76b305656c76b16be8bdbdf2f4894e24397fbd6ad74dd119b8a5da58dcef97034f1d9923ba1e58f4c00c1fe98d4abe95f57663b1ae2fd1246ff1eb4745de4df94b24bf31c4eee691908fc9a3d899683e7a77fcc74512276dc2d1332b89b42a6bf5d84b351f0cf7c88b0d0c8a97bd00e6085a92ae06f7e08ded96593d790fa2d96bf62da45c3bebd1e38e8ba942de2d1653b11d7f71a281569eb24f8b98c335950f51c4cff10036a4d47f7275d913dbadb92d6ae0bddf1201e30003a5ce548c26f8ec41f455eb122557e3310f16f65f95b9259ad309e1a50db93706d9f15644c91cfc71cba5a9226638a5922f8d5e908a14355673701f1341116f46ffb26d43d4e1671905aedf4b61b53631b3d44a3a1b7917ed7af03e3269313f215223d92905f98d2baf024076cbbe6f380d17446bee48eb4551157d71dfaa0b60ee74f67dd85f7be8428344789c2e6d36606179ab46757ef630fa1254f5f5335a504807e11a809f2b91f042c95f2441fcc122ab3ea7ff90e51847338bb276effc40a5cfb9ccb7e4d1dbae74621439d47a70b0781cce8e949a6a85f7767873b75c712e65a2c01ca2d354d072b9e9a95f80014b03aed8ff2ebb5774ff2e635b085335e26e0bdea11e2dae4cb83b29a5e8fdb1b857e562da3ef5ca2b67a8ae8086d173bdbd463bb08e389f57e6e70d04227bc47dafa7d7d9031f83247272950fad0f79cdf5fa008575c9a75c516bdb8839037ac6b17e60d3c5007b0ce941b1e311126f86e49df12b8a9d2a6aa72b8bca8473bf1b2ef284290d1bced7036dacb7ffc8d1275dcec0e40c20b7afcd89a7b0d1ebbb7bdc536c4e071c60494ba5191ee0d417e84c3a1332f647c00fd378358189b41281654652f5d91a86351da305542dd778e62a421fcd7b7a2069ada9640a5ac41da0581c69ca1ef4a571a8321843252b126061fe18e8fadb7df1b44a69af3ded74b5e8b68745f5ba0f9b9d829e54309e1c47396529641ae25c84e6b97957f3e8f8fa881ea64d1a793f6fe7ff79231b49a38800ffe446e63acb72c35e2ba8b2974f87e8ea51c7e6002440729f367fdbb0291215361b73aa1729f9e7eccb663e8fee0d70bac405597dd29a6c9a144e52b29ca85b322e31ff17ca18ab3eda64dd06fbfbd64c3bc78b17b0baeac19f8733d3b6ed8860c1f5a36efe59fb296ae21661b13f8b18e1c0914d17a1205ba18b09ec6e120da826821b92564d4319849952089885db142a95c31e059968403a0c835a8dcab11d4201d1edae8b0eaeb2102db42e3e9b87d1ddcc98fb5f3b58b2d34d8655bbf3084dd27a9e561a5f4834552120672e97ccc4e6c5ea5c09fa74984780a37a91673183145aca07af2f96bd2b7b866322dc2ab14a56a2d9e3fc61cafc52db3af5d09506918385c1dfd331257fd12fa0832cab0f59a75f725ca7d2eed1f31d899998975237c420efafba9baa040a8c299977d3949dbd7a7bdd03810b35e04ea3440629ba90facb0d7798425d1973d7e201735e259d01d0c33a937d3274f993385a2f9ed5843a6f97e3426befdb5e5ba8833397b1cf3ca4fb9028d6776858786ec2726c0a22e0f7c3c82a8442c5308e4398f0273664f04c210059657fb7a26753886e61833f1917566067888203e629b425a42812df5b0ee1ff3e0e0669ae1483bc2235e28ef2598d1f4a325c701c304d033079967b7deee3650ceb0eb6f1a66319b9238bb5b27c839de724f106bd72080f70e4e6e21f767d76f7fb9d846125fd1f378cd88dfa2eaa64dc743bdc49fe859b531dc42328e51a7406eaa47fb9a57dc2a463d4a1b788eeff5e691d92108535e1173492f16f3b9c78b416209235cab34381bb66f98dbc6e2aaf2d5048b443e508174a01b53cab4e158019b0d2e0",
hex"e0d2b01980154eab3cb5014a1708e543b448502daf2a6ebc8df966bb8143b3ca35922016b4789c3b6ff1923417e1358510921d695effee88b7a1d463a4c27da5b97fa4ea06741ae52823c41d539b85fe49dc3b74dc64aa2efa8dd88c371ffd2561849dfbf7767d761fe2e6e4700f0872bd06f124e79d837cb2b58b23b91963a6f1b60eeb0c65e3ee7d7b967930034d301c705c324a1f8d59f28ee23522bc8314ae69060e3effe10e5bdf1228a425b429e603828867605617193f83616e885367a2b77f655900214cf0643627f098438e30c542842ac8c3f7e0220a6c72c26e78586877d62890fba43ccfb1973383a85b5edbef6b42e3976f3a84d59e2f5a3893f974327d933ac3d0019d255e7301e2d773195d4298770dcbfa90ba290644a34ee0350b8103dd7b7abd9d94d37799298c0a04aa9bbaafef20c43752979899891df3d1eed2a75c725fa7590fab2c83a02fd17f2531d3dfc18583910695d0f53adb52fcca61fce3d9a2564ab12adc2263867b2bbd962faf07ca5a14833167917aa380479874fa095ceac5e6c4cc972e6720215534485f1a569e7ad24d08f3bb55864dd3b2583b5ffb98ccddd1879b3e2eb42d10b2ae0e8baeedd101421db1ca8d5a830c3a406899051ec3952a14db85980852998419434d56921b8226a80d126eec098ba15b20a1174d91c0e1188b3fb16116e26a29fb59fe6ea3f5c16088edb6d333879fc1eabab0178bc73b4cd6fbfb06dd64da3eab18ca17ff312e325ba89cb2524e149a6c9ad27d5905c4ba700dee8f3e66cbece7f92917aa731b36151229b0db7f369f72402400e6c751eae8874f97b2a82b5ec372cb3ae646e4ff0088a3491b2379ffe76f3f791a4da61e88faf8e8f35779b9e6845ce21a64296539471c9e30549e829d9b0fbaf54587b6e8b574ed3daf694ab4f17ddbfae818fe6160122b25431832a871a5f41eca691c58a01dc45a0a64a9ad69207a7bcd1f422ae678d72d5405a31d35861ad9f55246658112b489813578d30fc047f632133a4ce817d4e01e19a54b49601c074e6c53dc7bbbebd1b0a789cdafb7200ce4c0ce5d27d1c8ffb7ac6d03d7ce1b0d2984f22e1bbf7384ca8b2ba76a2a9d8a2bf19de4866f1211e3b141e90c7b00c5d3607eb1c67a033988db6b515ca7c9758500faf5cd790fad0f95727224831f03d9d7a7af7dc47b22040de7e6579f388eb03b46bdbd73d18680aea8672bcaf53eda62e557b8b1fde8a5293bb84cae2d1ea1de0b6ee23553085b632eff7457bb2effd8ae034b01805fa9e9b972d054d3a21cc0a2652e715cb7737876f7856a9a948ece1c78b0707ad439146274aedbd1e4b7ccb9cfa540fcef76b28b334718e590ffa73eab22c1fc41245fc942f0912b9f801ae10748505a33f5f55412fa30f67e7546ab796160366d2e9c78448342e87b5fd87df674ee600baadf717d155145eb48ee6b44170d386fbecb764002af2b8df90529d92352213f3169323ef07aed17791b3a4ad4b33136b5614bdfae051967e1d4436db2ff466f1141131f70735635148a905e8d2f92a5386622a9a5cb71fc1cc94456f1d90637b90da5e109d39a25b9955ff6160f31e3572512eb55f441ecf8268c54cea50300e30112dfbde06a2db9addb13d975727fd4a43600f1cfc4510f9535c3988b4fb29e5681a2717f1db153162dde42a98b8ee3d1eb3b5ca42df66bd9a20f793d5996ed8de0f706ae925a08e600bd978a0c0d8bc8f70c1f354bd8f56b2ab4892b33d1c26d271245c7fc777a3e6899d8a3c98f9091e6eec431bf244bf94dde4547ebf16f24d12faeb16376f595be4a8de91f0cc0f4581eba23991d4f0397efdc58daa5b819d14dd76abd7f39244e89f4f2bdbde86bb1766c6505b3762aa46f1445de560d1ab96b1d8eacaea3c912791d9fb0fa366669a8332dc95e35250792dace0b0ad165ce5f5be263750e08786e321fdf5f4e67a08cc5dcea187aab44a88961ba7761f4d6c46735f920787e21c0288d9810f238fbe460bf77e309e96ec92bba98cf570c2b5d5b4e533969c29be4a582f096eb215ed68ae589883d391f93bb4717f3a9b1a1c58d8c7fdf4c3de55f8dc0c02fd2633aee625b8930d45f1f9cf7ce28c4779d94748cba28d444c9cfd44066ed3e6d2187122e58505ed7d30167d2a51eee79a94cd199b1c99147361c509b40718c1a52f5a09db7e3f922b2cb63ec97c6c959356c333555bfa7ca28cb87561ce4a596c37361e8ff3b3fe547ede31058dd5bccf305bf1d68a5ca3d45a0d1425709e2864b26ecfc76549259edd7fdba6f4c1d49556273b42a36fe35751cf3a83549fe2d86bbe04ae8527aae76645ed6de27eb3399ead48d139ef480aca4ef191d21c6c00290e8388c103ba8f72d3a276b5b84c0f9ba4636c5c69de7948329f12ab03dd49e74f992b57dd1a0932d33ae1f0112a2c892fe257882ab868b465336ec45b087591e24"
);
_reverseCase(
hex"b6f422fcd5b4ca4e32656c1d2ddd7fd25ba5decce83cd42e1562fabdf9aeece064c5bc34a3a34730fde3b9cb641578d665b9e02abb1b775503a2da7e6cff85d9845545f5ddd7ec170aa426852065520aac844d1fdf19eaae136e3ab9775a192e2a242ae8418a1dbcde40358aa030c68fd9d01a29925335a175fc86a23cd3b3bcdd104f68849ce30e114a367210b1aa5b33db8256ed546971830a324027041afb85af78439412c6c14f2ca11a4e8d83e1c09c9f8bfd1163301d3620315fffd7d411f9f4cb704ef9198e588367cea235e43d1f257596f804865410a1cde2f845ccddc7a2e0af77ec00dc5d3bab8728333b0eb5944f98d88108af5344d56a3d163faa5895b3dc4e77e4b18c0da5c605f8405d96077805266e27931fc436ccae63df5c5d84df6c8edca102505b66de692696c508f243f2308b5bf01199cc3c918ce748a54afd9408de58759e362ae322839b1fa8c2b3b3a8988856fec05e43f7aa9c0722eaafcc88aec2070c0b2e87769e99cd17e32d0eace611e8efd5f450c1b3ab3a48045691b05c2fd33077b3825159f4feb8e95bf7d58c83e6ed10c9e1e91c4a9262a41d320f89813683d55c4301fa224bf258fda029667b53d7901ed25dc4b45a20aa637f2b2293c5eb1be4c4c0eb5259caa14295237eef02d4a49ab0085501c0b08b91eb5b74158bfe806db9786acaa314c717dff75b38c86bca22771d2b90ba973c09603aa752704431004956e0c4def8e1df45109c568d1af48672d1d5db752bb7db1780c37d2759ad52dafeff8af167f191f65c85aa4cc117579589f8692c5b6e08b026f7530af95f638c83d28894b5ba5a5f68be0a22bd4154803382662b21c64368dd766d015b075edfc91726afd127f1e96ffa565a84ac84ff6c066ce77001fad79605e40d98c2fbb3744741676e7e4274b85cf6aa513406d13f16069ca9ec5d03775fcf26312713e56532a9532e1bafd092b8902954d667c93fbe611cc99159729a796cd1a465bd9211000733f77112b96ed224fd0c3f1d2f566113a1e3ff9a8053264d7c0f291123a9930fc88498d1ca22be2119aa0952b61e0b25cc50d82c3da9b88655d2d57287ebf6747e264423f9f1d4ebbdf484afd6745d99bd43850da5491cd5294943a14e924994f84f73b1b915ea1f328f3ec46f7cba092bb6f594799d488af4dcf827a514ca2d82d20d7968851f96736270f2a35d0e3bb6",
hex"b63b0e5da3f2706273961f8568790dd2822dca14a527f8dcf48a489d7994f5b62b09ba7c6fc43e8f321fea15b9b1734ff89449924ea1434929d51c49a50d8543bd995d74d6af84f4bdebd4f1f92344267e74f6eb8772d5d25586b8a93d2cd850cc250b1eb65209aa1921be22cad19884c80f93a92311290f7c4d2653809affe3a11361562f1d3f0cfd24d26eb91271f73307001192bd65a4d16c799a725991c91c61be3fc967d6542990b892d0af1b2e53a93265e513273126cf5f77035deca99c06163fd1063451aaf65cb874427e6e67414774b3fbc2980de40596d7fa0170e76c066cff84ac845a56fa6fe9f127d1af2617c9df5e075b016d76dd6843c6212b668233805441bd220abe685f5abab59488d2838c635ff90a53f726b0086e5b2c69f889955717c14caa855cf691f167f18afffeda52ad59277dc38017dbb72b75dbd5d17286f41a8d569c1045dfe1f8dec4e056490031447052a73a60093c97ba902b1d7722ca6bc8385bf7df17c714a3ca6a78b96d80fe8b15745beb918bb0c0015508b09aa4d402ef7e239542a1ca5952ebc0c4e41bebc593222b7f63aa205ab4c45dd21e90d7537b6629a0fd58f24b22fa01435cd5833681890f321da462924a1ce9e1c910ede6838cd5f75be9b8fef4595182b37730d32f5cb0915604483aabb3c150f4d5efe811e6ac0e2de317cd999e76872e0b0c07c2ae88ccafea22079caaf7435ec0fe568898a8b3b3c2a81f9b8322e32a369e7558de0894fd4aa548e78c913ccc9911f05b8b30f243f208c5962669de665b5002a1dc8e6cdf845d5cdf63aecc36c41f93276e26057807965d40f805c6a50d8cb1e4774edcb39558aa3f163d6ad54453af0881d8984f94b50e3b332887ab3b5ddc00ec77afe0a2c7ddcc45f8e2cda110548604f89675251f3de435a2ce6783588e19f94e70cbf4f911d4d7ff5f3120361d306311fd8b9f9cc0e1838d4e1aa12c4fc1c612944378af85fb1a042740320a83716954ed5682db335baab11072364a110ee39c84684f10ddbcb3d33ca286fc75a1355392291ad0d98fc630a08a3540debc1d8a41e82a242a2e195a77b93a6e13aeea19df1f4d84ac0a5265208526a40a17ecd7ddf5455584d985ff6c7edaa20355771bbb2ae0b965d6781564cbb9e3fd3047a3a334bcc564e0ecaef9bdfa62152ed43ce8ccdea55bd27fdd2d1d6c65324ecab4d5fc22f4b6"
);
_reverseCase(
hex"45c2ec5fd1ddf673371ed2656fd684a315bca02fe01d67c8c116bdb53bd8b47ad62ae5ddede2ef6027cc3691f607feace555f10a8aa7b288ca8e0e8f462148a39151b3e2e6665bf4c415df8df4e99377d9a390ee9ab7eb388d91a5ce1d1c70a2ccbb5fe67b0ad4c379",
hex"79c3d40a7be65fbbcca2701c1dcea5918d38ebb79aee90a3d97793e9f48ddf15c4f45b66e6e2b35191a34821468f0e8eca88b2a78a0af155e5acfe07f69136cc2760efe2eddde52ad67ab4d83bb5bd16c1c8671de02fa0bc15a384d66f65d21e3773f6ddd15fecc245"
);
_reverseCase(
hex"0a176361cea37861ecf7a00e65ce0d74342e9f2bfcdc68bd01f2b662ff4a3a5b33e4fda8dcfd0b1d8dfb00c917ac619b4baaed8bb0255212c03e5b4d16d499b48592f404b98fa83bd94ff6d78213e7cb6de22dc3f70770adc59c53a3c3e26c764f4ecddc441ff2e3bf58c0bb3f4477dd79ee06515adadb1d89fcf4d80bf93e43d3be1ed79da286e786df8d672ab040d77b329b295b1a1830d0bf9860db730bb69f16dc3074f1fe4b2cc1ee7dbecf64aa25b85860d8bc9d58e73d0853bfb0efdf7c01e7a2570e13eae38869c71e942519e83672e3f998df7e4bfd97ce7bf13f63210967698b834dbb52978155622e274887dc2c43a3b3c039a6366507475babfa2c307b8ca8e072c02d8ea7b7f89b80ae870308cc65fd02a9d31517c3aaa5f44f76096e402702dcdc1eb5103f4d66274e0c7c7360a534779108dac89f9fc971ca458dfa568a4dbdb36708a3dad434e2845f5252c5984f0061a0958ef9e077a41868f5ea996cecc0a84ff087e1c151608725b8541dae675d5a8327829cb7e33e73addcfa6ae755fb2c489d6aac5d11ab717242f75686f2f1ea4d899a28490b90924191f84e2244f9d40862537163a45d7f81f73ec998cfe1873dde4ed14c70bba519c3608689b1add06ef58a64929bc1c9a28da97c6b84071c2d09da73c1a29c5dbd7c",
hex"7cbd5d9ca2c173da092d1c07846b7ca98da2c9c19b92648af56ed0adb1898660c319a5bb704cd14ede3d87e1cf98c93ef7817f5da46371536208d4f944224ef8914192900b49289a894deaf1f28656f7427271ab115dac6a9d482cfb55e76afadcad733ee3b79c8227835a5d67ae1d54b825876051c1e187f04fa8c0ec6c99eaf56818a477e0f98e95a061004f98c552525f84e234d4daa30867b3bd4d8a56fa8d45ca71c99f9fc8da08917734a560737c0c4e27664d3f10b51edcdc0227406e09764ff4a5aac31715d3a902fd65cc080387ae809bf8b7a78e2dc072e0a88c7b302cfaab5b47076536a639c0b3a3432cdc8748272e6255819752bb4d838b69670921633ff17bce97fd4b7edf98f9e37236e81925941ec76988e3ea130e57a2e7017cdfefb0bf53083de7589dbcd86058b825aa64cfbe7deec12c4bfef17430dc169fb60b73db6098bfd030181a5b299b327bd740b02a678ddf86e786a29dd71ebed3433ef90bd8f4fc891ddbda5a5106ee79dd77443fbbc058bfe3f21f44dccd4e4f766ce2c3a3539cc5ad7007f7c32de26dcbe71382d7f64fd93ba88fb904f49285b499d4164d5b3ec0125225b08bedaa4b9b61ac17c900fb8d1d0bfddca8fde4335b3a4aff62b6f201bd68dcfc2b9f2e34740dce650ea0f7ec6178a3ce6163170a"
);
_reverseCase(
hex"7f5e58882ccdf9fabb66264f3ea760d119745b31673374317502486fd262715298ecc001742c58eac9bac828473fd2b1c54930f91cc5a3add31117a3aa7855ae6a6c1b72a2b297564bcdf7fb65a063f0a071ce74247d89e2a5ea432910233159895e8ad5eabda3911e7bdd59beade0a9579d8057fed26a60e53ad89e235122dee388378b08fc57e128ef1613473261414d9c94f183f9033f7881fc1bab08dbd4d2ea1c00234c1da0d8db456efa786ca9a20e495904aacc058171e20b683e2387ce6d1b9c0df6e6bb2a10121a8af218d0e1c298",
hex"98c2e1d018f28a1a12102abbe6f60d9c1b6dce87233e680be2718105ccaa0459490ea2a96c78fa6e45dbd8a01d4c23001cead2d4db08ab1bfc81783f03f983f1949c4d416132471316ef28e157fc088b3788e3de2251239ed83ae5606ad2fe57809d57a9e0adbe59dd7b1e91a3bdead58a5e89593123102943eaa5e2897d2474ce71a0f063a065fbf7cd4b5697b2a2721b6c6aae5578aaa31711d3ada3c51cf93049c5b1d23f4728c8bac9ea582c7401c0ec98527162d26f48027531743367315b7419d160a73e4f2666bbfaf9cd2c88585e7f"
);
_reverseCase(
hex"c92d1e0b57e78d84b4e5a334ae787e1d62007672c7f8a50b2c9a4a5320183197a91b35485c3acd4d4aa4d12f13d8676ddc8efe6ae6648600469897d1803b9c58fec56f135304b77567b2a651e173cae4f189f3f96e7fbb753cff78b12ef855d9cf442dae1e71b7127669067873c76fe4db24a5aa50658776660704d362eb28548fdfa6d50363f6106761634b4e718e562461f3b07b2ca92639ea060bece86ce868cbe34d5da3cdc87ddc2d73e1c41971e2733ea422ddc17f81c476e6ae171006b6c3832ae9f107a8f47707bab03b34f30131de733c6309a6a2a36d05ea90ab83650c873f1f6269c16de28be6ed5d26b26b4da41957c8f953b66c70a6a7578d0ccc6c2ea709700037b060fb254005857b6cc9ddd5ee8ab844c7d6cce2b0809c4af004ba310c3d6d4141503319a3ccde9d8283021f6b5c7576787d0fb9e726f9582ccbf0",
hex"f0cb2c58f926e7b90f7d7876755c6b1f0283829ddecca319335041416d3d0c31ba04f04a9c80b0e2ccd6c744b88aeed5ddc96c7b85054025fb60b037007009a72e6ccc0c8d57a7a6706cb653f9c85719a44d6bb2265dede68be26dc169621f3f870c6583ab90ea056da3a2a609633c73de3101f3343bb0ba0777f4a807f1e92a83c3b6061017aee676c4817fc1dd22a43e73e27119c4e1732ddc7dc8cda35d4de3cb68e86ce8ec0b06ea3926a92c7bb0f36124568e714e4b63616710f66303d5a6df8f5428eb62d304076676876550aaa524dbe46fc7737806697612b7711eae2d44cfd955f82eb178ff3c75bb7f6ef9f389f1e4ca73e151a6b26775b70453136fc5fe589c3b80d1979846008664e66afe8edc6d67d8132fd1a44a4dcd3a5c48351ba997311820534a9a2c0ba5f8c7727600621d7e78ae34a3e5b4848de7570b1e2dc9"
);
_reverseCase(
hex"c59290143b5b1cc51e10d20ee0c553014193924552e82152bbb062049fa8566a237695e5f25911d9686c1db6f65a5a209915fbb7a67abc09174d91b156e312f9bddddf0440ce0d25dd65176e043ef894fed5cd7091395a69739c5d955e2e3b5583e4eef5554808eae0407c6dd9c34e2d381b2039d37d8ceb3ee81ac65d7fb3c57074f79c8e720f295ee533467240d8c529aea1ce258f3195792f46aa9f46166a5b8a93140a0830f76c81abfa6ec69c13e65ae598f93dc93f3e12b8f4942cae1d662c9a2c6f9b9c8262f70add15528c147af0f12da57f854bfcdf2c928dbe6723123ba29a70b6eea84dae99a57531ecee6e2c04836f02613f2392b873e12ea8bea5e0bc8febc86df7d33af14b8cb053f53d7436cd4a09758fc92ff045f408e754097f34b430989f082dc469b639b7d2290ae1f40a1d241ce7b1ec0d3757dbfd2d5311cfdfbfffb2b7965eb3be9f127d608eaadb2ce0e469b3dd52b8ae26a17e865214a4765fe3690bb9c904265dbb5247a986a9e6f31fd255cad388737b682c201030b92c582890d9ca061ff5ff351f15713c4b473ba93af2ad37cf05ab5d5604f6b581ff84114ba18fc8c330ef35c1d90101d147be32f49b83104c2f3e2e89c1e16eb03ff4e69191eff02084a8346a1c2dbfd2f39552c1046c68e6218057d634a732d52bd2ce8918f8af25c9643ae436c4cd09e3f76442e6c4fc61e7355686002b3a1b9cf56259856156e8fcd157f017595419ff697ae18364c00dd3145580acb0d627a03727c6138cd5c3505e919dad084664685ccaf3521894f5ad0e7fbcb848086c885c8321449c92e9f95d985ad557883b6c871bbec5d2a28767c97f7d0ae72e3e0b4e6bc79c1114b299e831e9f7bae34576eaba6673b57c6ce1777a09e0d5d807a40802ace84fd0892c84afc40c7f350fd6f7a9f08a1afaf69a06370a428166ef63a452235fecea6b60ec1418976deff1ad03756c1bddf627d91370af6ba6ad5b543ff62434ebf8935b0369c23f72c34ca9031477b191002d64c817669729524be21f800ae25f94680c362b85fe50d1f00a6d6fffe9c417a69af59060bab31caa59ebaf7fd40d0fdb6588ec7136d6a4e07c23a2a8bb093896fec14843d5b34a2b39d6c78153e125c6d89f274a757f3901d9c7ac46ac5d2efec2aa18f0f4cdfbbcf9a88cc244928662c800b0c528d0b036878e4be673f6f638ecebb5ae727210931821c89f0aa199ca5a85d52c42d7fbbeb040f69eeefd1c50579f5fd09646410a3509b393fa7e3f08ac6550308fbbc27f3e5b1eef26641ba9dfc6f8c05892bb0723e2d3a013e5ec4e3fc8445b157c6c507123d2a2a6cce8c29bdb77c71c7bcdfe37c475a12ca85fb8509b22a874fb8fdeb160f966221f2f4c7630a58b84e290c7955a03b85ccc19016319265d395e32c5aaf4d3752d91150e7a674943348508ee5af1d658b4b876266a92c87435f9be9ee285317ef7e22bd5086dc49f0d7647eac7578f90df48c97b1f666cc1b702d9b44164869bbdae0cf68469834d6b2b8ad1dce39b54c79d859e2e6eff09f9fbc0c6bb73f023e166fe0f2ab3b96dbe2b0ba06a0bcf7fde164044841d3112c7c2fc6428ab970731ddf71877cfadc50b0defcccb49b06c73b125272d87567328caa4418474357d5eb2053be49ecb2d3462138e69da13d8f6d5ece0ed033129a592237b8015ce8b171423b5438cda539485df4b0b57e73baba0406ffcb6761b268ea9314723f33937864861bf828ecd370c6b1e8e96537b7d3fbc7659684d27eb8abde7176d593f",
hex"3f596d17e7bd8aeb274d685976bc3f7d7b53968e1e6b0c37cd8e82bf6148863739f3234731a98e261b76b6fc6f40a0ab3be7570b4bdf859453da8c43b52314178bce15807b2392a5293103ede0ecd5f6d813da698e1362342dcb9ee43b05b25e7d35748441a4ca287356872d2725b1736cb049cbccef0d0bc5adcf7718f7dd310797ab2864fcc2c712311d84444016de7fcf0b6aa00b2bbe6db9b32a0ffe66e123f073bbc6c0fbf909ff6e2e9e859dc7549be3dcd18a2b6b4d836984f60caebd9b866441b4d902b7c16c661f7bc948df908f57c7ea47760d9fc46d08d52be2f77e3185e29ebef93574c8926a2676b8b458d6f15aee0885344349677a0e15912d75d3f4aac5325e395d2619630119cc5cb8035a95c790e2848ba530764c2f1f2266f960b1de8ffb74a8229b50b85fa82ca175c437fecd7b1cc777db9bc2e8cca6a2d22371506c7c155b44c83f4eece513a0d3e22307bb9258c0f8c6dfa91b6426ef1e5b3e7fc2bb8f305065ac083f7efa93b309350a414696d05f9f57501cfdee9ef640b0befbd7422cd5855aca99a10a9fc8211893107272aeb5ebec38f6f673e64b8e8736b0d028c5b000c862869244c28ca8f9bcfbcdf4f018aac2fe2e5dac46acc7d901397f754a279fd8c625e15381c7d6392b4ab3d54348c1fe963809bba8a2237ce0a4d63671ec8865db0f0dd47fafeb59aa1cb3ba6090f59aa617c4e9ff6f6d0af0d150fe852b360c68945fe20a801fe24b5229976617c8642d0091b1771403a94cc3723fc269035b93f8eb3424f63f545bada66baf7013d927f6dd1b6c7503adf1ef6d971814ec606beaec5f2352a463ef6681420a37069af6fa1a8af0a9f7d60f357f0cc4af842c89d04fe8ac0208a407d8d5e0097a77e16c7cb57366baea7645e3baf7e931e899b214119cc76b4e0b3e2ee70a7d7fc96787a2d2c5be1b876c3b8857d55a985df9e9929c4421835c886c0848b8bc7f0eadf5941852f3ca5c68644608ad9d915e50c3d58c13c62737a027d6b0ac805514d30dc06483e17a69ff19545917f057d1fce85661855962f59c1b3a2b00865635e761fcc4e64264f7e309cdc436e43a64c925aff81889ced22bd532a734d6578021e6686c04c15295f3d2bf2d1c6a34a88420f0ef9191e6f43fb06ee1c1892e3e2f4c10839bf432be47d10101d9c135ef30c3c88fa14b1184ff81b5f604565dab05cf37adf23aa93b474b3c71151f35fff51f06cad99028582cb93010202c687b7388d3ca55d21ff3e6a986a94752bb5d2604c9b90b69e35f76a41452867ea126aeb852ddb369e4e02cdbaa8e607d129fbeb35e96b7b2ffbfdfcf11532dfddb57370decb1e71c241d0af4e10a29d2b739b669c42d089f9830b4347f0954e708f445f02fc98f75094acd36743df553b08c4bf13ad3f76dc8eb8fbce0a5bea82ee173b892233f61026f83042c6eeeec3175a599ae4da8eeb6709aa23b122367be8d922cdffc4b857fa52df1f07a148c5215dd0af762829c9b6f2c9a2c661dae2c94f4b8123e3fc93df998e55ae6139cc66efaab816cf730080a14938a5b6a16469faa462f7995318f25cea1ae29c5d840724633e55e290f728e9cf77470c5b37f5dc61ae83eeb8c7dd339201b382d4ec3d96d7c40e0ea084855f5eee483553b2e5e955d9c73695a399170cdd5fe94f83e046e1765dd250dce4004dfddbdf912e356b1914d1709bc7aa6b7fb1599205a5af6b61d6c68d91159f2e59576236a56a89f0462b0bb5221e852459293410153c5e00ed2101ec51c5b3b149092c5"
);
_reverseCase(
hex"c45b0b6f630b6fe2bbd8ee73a5844fa506c716f993926708de456be48d6d8c345a67b0dc591ff8392068215169f65585bf19155cddfefa472f8353d2a2ff605afc91a8a96bf498b631ff5a08df22b5aedea3ae46ceaeaa7d7d8a9fa849d33d77e88ada058feee174ae0899dd85d4e17e2483d8bd6cda6055bc0c58cab2f87a33ddefa9f3112e6c35f69bbb29fd7dd848ab8c7aa5b0857a07ae9e4edb14209f1cf33733675916649d3999c8fe3cfbf3f34bdaee4dd80e141c4764c2fa289ba22494b5c76c138885f5997636bdb423aa5ec29e11be0decc30735426207f0948b0b58e2391571287b764d4b1ad335c6a647b12ec0abe53c4dc095bd970a700df02ca912b2cabbeeb82784dfbf3147edadce37c1f3de18f4996322e2c2e914d46781f126a1fb9a96684013cdfd5f2f8bffc571f1ce16f05df45d7787e38cc6450b396930425f8ab52fe3fd085a8d7305cce4a68ad4f802d5040ddc49e5b940feb1a7515171d028eec7b745369b729e33375611288ea5fbb34e6c33ef0d21f63fad0bcaf4a81add8f515c496729fdd94505b7d77bccb7bac41109090bd79ded27b98957b5d0537f8d822fc37e913e84c125a558f90b660544dfd841370a1b153a5906d8fcb37d3b09c06d157253d9425fff4f7b3397a4a7efca7bc53a80d3ac2e90bf8bc031fac48304939de7e4cc8ea055763e62ae1eab5c0ae3fa57b93f74cc1494126c85fd24b609c3873173dcbb77dc212bcd61983a58440a47a38085581146e1f70797a889a4cd7f552fede9088236f6ca5921f712ced4a97d267dbbb85230bea831c4623e9c255a08273cd722fc9803e2123468ec6b3e09d60b273b1dfcd2c6bcbf4e025cbc79b91e",
hex"1eb979bc5c024ebfbcc6d2fc1d3b270bd6093e6bec683412e20398fc22d73c27085a259c3e62c431a8be3052b8bb7d267da9d4ce12f72159caf6368208e9ed2f557fcda489a89707f7e14611588580a3470a44583a9861cd2b21dc77bbdc733187c309b624fd856c129414cc743fb957fae30a5cab1eae623e7655a08ecce4e79d930483c4fa31c08bbf902eacd3803ac57bcaefa7a497337b4fff5f42d95372156dc0093b7db3fcd806593a151b0a3741d8df4405660bf958a525c1843e917ec32f828d7f53d0b55789b927ed9dd70b090911c4bab7cc7bd7b70545d9fd2967495c518fdd1aa8f4ca0bad3ff6210def336c4eb3fba58e28115637339e729b3645b7c7ee28d0715151a7b1fe40b9e549dc0d04d502f8d48aa6e4cc05738d5a08fde32fb58a5f423069390b45c68ce387775df45df016cef171c5ff8b2f5ffdcd134068969afba126f18167d414e9c2e2226399f418def3c137ceaded4731bfdf8427b8eebbcab212a92cf00d700a97bd95c04d3ce5abc02eb147a6c635d31a4b4d767b28711539e2580b8b94f00762423507c3ec0dbe119ec25eaa23b4bd367699f58588136cc7b59424a29b28fac264471c140ed84deeda4bf3f3fb3cfec899399d641659673337f31c9f2014db4e9eae077a85b0a57a8cab48d87dfd29bb9bf6356c2e11f3a9efdd337af8b2ca580cbc5560da6cbdd883247ee1d485dd9908ae74e1ee8f05da8ae8773dd349a89f8a7d7daaaece46aea3deaeb522df085aff31b698f46ba9a891fc5a60ffa2d253832f47fafedd5c1519bf8555f6695121682039f81f59dcb0675a348c6d8de46b45de08679293f916c706a54f84a573eed8bbe26f0b636f0b5bc4"
);
_reverseCase(
hex"59f03343660ce3bba521d89956f3f48c5c839851f165a56ec8f7c74299c356897a8296bbe5e3284d3558a443f4d82b4dca5ede34eca26f6f129cdac72167936d6590d569127c1135527a9943655015d481e9043182aebf08ee29cde224e187705eb6d91f698dc5949e22bbd106daa02c145cdb29f5353eafccb9f99d0c81e68b44b143128bcc6b4b35bf6494bef3ae9145e9e37b6ed466b25b733b57a36981b0dfed32a8fad8b84a4ee1a1337a60aea25d931f570ea22891a37670765ad72a58b975f6ee3ac3025a7168823e596a606a7c0a353a239924c45c",
hex"5cc42499233a350a7c6a606a593e8268715a02c33aeef675b9582ad75a767076a39128a20e571f935da2ae607a33a1e14e4ab8d8faa832eddfb08169a3573b735bb266d46e7be3e94591aef3be9464bf354b6bcc8b1243b1448be6810c9df9b9ccaf3e35f529db5c142ca0da06d1bb229e94c58d691fd9b65e7087e124e2cd29ee08bfae823104e981d415506543997a5235117c1269d590656d936721c7da9c126f6fa2ec34de5eca4d2bd8f443a458354d28e3e5bb96827a8956c39942c7f7c86ea565f15198835c8cf4f35699d821a5bbe30c664333f059"
);
_reverseCase(
hex"f1ba6fa184333be7189735189265c884c4a9e24744ae0a3355ac07c8d9828be69776a1ecbdc75b304537a401340779e4713a6b96e8e6f038beffa559338add1824aea99ad40644bc2ed963ef6794e7c64be9bf1489f191412229e68462913b046be08ca26eeea5686efe8bcff2c0975d941523fe24b31a54a1899fc18584e4017072a3fbdbc0eb3963201b85577d919326387872da67f11f77117c18f9b4178aa82d877c4b5707eda0bc97b51e87580199d9d7b6c427d7f184edd027ae2afdba8236d863d31e7ef3ea97a930",
hex"30a997eaf37e1ed363d83682bafd2aae27d0ed84f1d727c4b6d7d9990158871eb597bca0ed07574b7c872da88a17b4f9187c11771ff167da7278382693917d57851b206339ebc0dbfba3727001e48485c19f89a1541ab324fe2315945d97c0f2cf8bfe6e68a5ee6ea28ce06b043b916284e629224191f18914bfe94bc6e79467ef63d92ebc4406d49aa9ae2418dd8a3359a5ffbe38f0e6e8966b3a71e479073401a43745305bc7bdeca17697e68b82d9c807ac55330aae4447e2a9c484c8659218359718e73b3384a16fbaf1"
);
_reverseCase(
hex"b68e31a4a169f1c34ae87da8bdc21990c601af996aadedca64f249dbf56823a8a5ecf69352f83195d5f6718e61ba7a562d2d79b1d7e20957f7865274d4d076038031a305625f521825842ac0cbb5ccc56680ea873576d8342cd0ad52d5dd7f0bbf346b0b29bf5766ebbbaf8ff04e2419f5fae654ad0fad9cdd19c0260f99bdfded31a272da517f67e241a15eaaaf46d991df2d9d7f1aed3ca443514ab65f7f8dc75dbf4b826d3d25bbf213a131d6d461aeb5d7f8e30c3bb772bc1497d425fe6e3894130e8a1588af31ed3b4065803e1e3b81feb25a0b8af13164a494eec1fe70f8e8daa0295497b4489a6506008027102d1c8e60431081c7d1e33ebe1402f325f5ed5fdfd8e2d2a0517905f4ba1b571196beb0670950ff69a0f93b03f77f0d932ddade637b96b93d2d831a0096dea55eac7896f95175263c0f0741f6579d0c9a9026f44a3efcc2fe076cf460fef7fd506eccca5f5027165e56f333b7d7914480f66c146f3784f9812374e8bb98e0ffc8cf018938265c661844e6ac5179caee9bea54fb39ecd7a09e0f21f5743681e8ab6ef325b5f0ddb21862eac8078bba0cc65a996f428aa421e3b1fa879120bf7dad7654c4d90ceaab09d5f32d5dfdf86ce6a26f28608c78b5bb32280c5bc18bc373c65998c41362f1ee304de4df8abf396465aa9f53e915640f25a87be68e9f6832e7dc6b3ae753df6dfc5e2c442b840910fef7540e8c55ed7b15ae612cd10a4c52ac747fd497c48f722af7da0a622bc9b62c7dfd37a4e4b65d3ee14118fd96057b49cc48a07c63678f477d0e9bbf57ae3854378fc12274945aae18ed9833d44f90a57c074377f7741132ddba66493fda00a1cf3c1a9418c28328347a81fa5d0ea0e215da1f35193e",
hex"3e19351fda15e2a00e5dfa817a342883c218941a3ccfa100da3f4966badd321174f77743077ca5904fd43398ed18ae5a947422c18f375438ae57bf9b0e7d478f67637ca048cc497b0596fd1841e13e5db6e4a437fd7d2cb6c92b620adaf72a728fc497d47f74ac524c0ad12c61ae157bed558c0e54f7fe1009842b442c5efc6ddf53e73a6bdce732689f8ee67ba8250f6415e9539faa656439bf8adfe44d30eef16213c49859c673c38bc15b0c2832bbb5788c60286fa2e66cf8fd5d2df3d509abea0cd9c45476ad7dbf209187fab1e321a48a426f995ac60cba8b07c8ea6218b2ddf0b525f36eabe8813674f5210f9ea0d7ec39fb54ea9beeca7951ace64418665c26388901cfc8ffe098bbe8742381f984376f146cf6804491d7b733f3565e1627505fcacc6e50fdf7fe60f46c07fec2fc3e4af426909a0c9d57f641070f3c267551f99678ac5ea5de96001a832d3db9967b63deda2d930d7ff7033bf9a069ff500967b0be9611571bbaf4057951a0d2e2d8df5fedf525f30214be3ee3d1c7811043608e1c2d1027800006659a48b4975429a0dae8f870fec1ee94a46431f18a0b5ab2fe813b1e3e8065403bed31af88158a0e1394386efe25d49714bc72b73b0ce3f8d7b5ae61d4d631a113f2bb253d6d824bbf5dc78d7f5fb64a5143a43ced1a7f9d2ddf91d946afaa5ea141e2677f51da72a231edfdbd990f26c019dd9cad0fad54e6faf519244ef08fafbbeb6657bf290b6b34bf0b7fddd552add02c34d8763587ea8066c5ccb5cbc02a842518525f6205a331800376d0d4745286f75709e2d7b1792d2d567aba618e71f6d59531f85293f6eca5a82368f5db49f264caedad6a99af01c69019c2bda87de84ac3f169a1a4318eb6"
);
_reverseCase(
hex"2072656b9aa8dc6eee3a37f528e2c879497018bb045938d5dc7631e77a1d07909cdcf45ea6687e6bfc112f74f5b10a094ac7ff4b54b03bdd6b894eb9c37647e8aa",
hex"aae84776c3b94e896bdd3bb0544bffc74a090ab1f5742f11fc6b7e68a65ef4dc9c90071d7ae73176dcd5385904bb18704979c8e228f5373aee6edca89a6b657220"
);
_reverseCase(
hex"c08fbf9fc2e1c6dbd96793220e878a15fed374b08241970f9461e86c87c1c345b59c84b598e7ab5210fea452efbd60d3f21e5bdb0901fe8c3c0ef1cb1a9f0cd8769235812f847e9cd295f68203d0f1e9ceae44664bd32bb1be4321b41b06cf284d2a2bfa8aeaa1c9ac36045f027cfa983756c926a5f93391b1cdbce49ec478f9ccfbcb0ea04a5c28d597880e82542336bf2ccf68a83074499459135e11cd238f7de0bf0fd3e08021af2046ae3c81baf29536543436adfa089b9ab38df2ec239d85406cafd68046a25ca916c1b80b0e45d5de7b6863166bdf5925c95661e9b6c05910e5c60c4544834e0355df863d51053cd639862365adab636ce835605119050a5c8411e6c022d083c8f629c4ee8f3e771a0955e7fce062aaafc01d369c1d6450fa237fd0ab09e4610f9a55b0461cd292b9c77ed8a84943f664e9f84ac5468d3cf212a068ea96b765c392987c653dfe613d82138c739fdad682ab3ed8654c37bbac07f75053132a73f7cda6be0900950b32c45ffc20de7916337d08604b1a0bb4a1d1d43931a2303a7d409bcdd500c3b4bad7b1a4ccdab51b5614a681f635d31ff0eb1ac2",
hex"c21aebf01fd335f681a614561bb5dacca4b1d7bab4c300d5cd9b407d3a30a23139d4d1a1b40b1a4b60087d331679de20fc5fc4320b950009bea6cdf7732a135350f707acbb374c65d83eab82d6da9f738c13823d61fe3d657c9892c365b796ea68a012f23c8d46c54af8e964f64349a8d87ec7b992d21c46b0559a0f61e409abd07f23fa50641d9c361dc0afaa62e0fce755091a773e8feec429f6c883d022c0e611845c0a0519516035e86c63abad65238639d63c05513d86df55034e8344450cc6e51059c0b6e96156c92559df6b1663687bded5450e0bb8c116a95ca24680d6af6c40859d23ecf28db39a9b08faad3634543695f2ba813cae4620af2180e0d30fbfe07d8f23cd115e135994497430a868cf2cbf362354820e8897d5285c4aa00ecbfbccf978c49ee4bccdb19133f9a526c9563798fa7c025f0436acc9a1ea8afa2b2a4d28cf061bb42143beb12bd34b6644aecee9f1d00382f695d29c7e842f81359276d80c9f1acbf10e3c8cfe0109db5b1ef2d360bdef52a4fe1052abe798b5849cb545c3c1876ce861940f974182b074d3fe158a870e229367d9dbc6e1c29fbf8fc0"
);
_reverseCase(
hex"bb82e1904466abce211aa43ef4926a879dff47e05cbd13b43de25ec3bbfc1ccf88c8bedb6cd0c55476f266e42da0e044036ebfdccc5b4dafa32e83e36863e87b6bbe6fe4d84af0521a2412811c84cebd038038a36ca024287ac0d5193bda3a3ae7eb46343aa3a3a4002ab992d2e14824fec01c701d47dfdcd6651ed5e7aefe5377d0d1104251e6db494d4b5e12337dabbdc081fc70dddd77ba66e99dc4ddb6c4e2c1305ee760794f2412784b9733db0d2349e2358b193aec21aecf828e4481927b7819f18f65050d091a04b6fa4f0df39abf6a5b1453d71ad4b71f8fe16f9003293471e4a6989d8a94a4a6527745492f2ce5809d898f95dc323bf5a1e1327a86a5c998a40f8d41d731c949db48b5f53c1bdd153d819c386f5d2648704f8d067a83315e6b5c1289d9effb406f5174bda2114715cbd1e0291d4d9e9b55f2ff47bbc6d6a6d808e38a604cc01e48cf1d9a4beef8b3f53354d76e863b32b2f58b67accf89ead104775fe6212f714dd5c3cfa41e80cbc6d2764de713ba686fc069984e77e68130837a1511b969c43784e66c18c540a29b31c10f4c884803cdc72657a59d96194c47e95dbc43296ccb066fafa41a85f9657011b866eaf0e9042e206e8c8df51f246dd0eef7fe4981b36b77cca4ba4ad6469356cd236eb2fb0ca8ad8fc2dd2a40acfe7ece431bb16a1e091a3b",
hex"3b1a091e6ab11b43ce7efeac402addc28fada80cfbb26e23cd569346d64abaa4cc776bb38149fef7eed06d241ff58d8c6e202e04e9f0ea66b8117065f9851aa4af6f06cb6c2943bc5de9474c19969da55726c7cd0348884c0fc1319ba240c5186ce68437c469b911157a833081e6774e9869c06f68ba13e74d76d2c6cb801ea4cfc3d54d712f21e65f7704d1ea89cfac678bf5b2323b866ed75433f5b3f8ee4b9a1dcf481ec04c608ae308d8a6d6c6bb47fff2559b9e4d1d29e0d1cb154711a2bd74516f40fbefd989125c6b5e31837a068d4f7048265d6f389c813d15dd1b3cf5b548db49c931d7418d0fa498c9a5867a32e1a1f53b32dc958f899d80e52c2f49457752a6a4948a9d98a6e471342903906fe18f1fb7d41ad753145b6abf9af30d4ffab6041a090d05658ff119787b9281448e82cfae21ec3a198b35e249230ddb33974b7812244f7960e75e30c1e2c4b6ddc49de966ba77dddd70fc81c0bdab7d33125e4b4d49dbe6514210d1d07753feaee7d51e65d6dcdf471d701cc0fe2448e1d292b92a00a4a3a33a3446ebe73a3ada3b19d5c07a2824a06ca3388003bdce841c8112241a52f04ad8e46fbe6b7be86368e3832ea3af4d5bccdcbf6e0344e0a02de466f27654c5d06cdbbec888cf1cfcbbc35ee23db413bd5ce047ff9d876a92f43ea41a21ceab664490e182bb"
);
_reverseCase(
hex"b662d41483d95d5f1968e52250db0a551b4969dd7ea048a0368db184199031214464f76e679c46e1bdef91738f50a9dbf686028451fd0a46b5ed6d52692ec06099586fc6c13be90c9fd25ea15c44e0bcab7a36",
hex"367aabbce0445ca15ed29f0ce93bc1c66f589960c02e69526dedb5460afd51840286f6dba9508f7391efbde1469c676ef764442131901984b18d36a048a07edd69491b550adb5022e568195f5dd98314d462b6"
);
_reverseCase(
hex"f238c09513e5f53a5fd4f403590ebb1edd8ea521e3769766f733179b79ca26a1c1bced2caea1137836a1cdb46aa02f43f5f8164a56a486d638a45d1efce36cf5f94e062f06ded2fd22f9484660d3348a136618a63f31c4cd7ba95b6e86de331936fe1413a9bfdebc95fa89bda1a48e7e8f4dd6c3690ff6497c2aea14749655421dcba2e69f8ba2148919f70ef14069616de037f6714fed210b1e83659cd055710e00331dc6b928f479f17436d10df214e6627391b2f7dcedfaeff4dc5a2bc37a8035a3aa538145525241f24a1073e3a6e90017cc284443488373f3c9c5433523801f90b56602798b2fb58f9f38d047a07a9a115fc64566890f9e33a91aa9e43a58b39967f4e4ab167d2f1a40db3177267f866f71b4364b57738625a050f23559b776d8a80e35e596ba75825c900697ebdd1ce403b4261ee704e3f94ea96af6755d1021246e2a53670d894bacede68245199382fafeec9f3a1b50b83b15ce90424f42f999470b03a4e39b5007f0fb850c8f952427c6e510dec98364bd054a6cc6a434",
hex"34a4c66c4a05bd6483c9de10e5c62724958f0c85fbf007509be3a4030b4799f9424f4290ce153bb8501b3a9fecfefa8293194582e6edac4b890d67532a6e2421105d75f66aa94ef9e304e71e26b403e41cddeb9706905c8275ba96e5350ea8d876b75935f250a0258673574b36b4716f867f267731db401a2f7d16abe4f46799b3583ae4a91aa9339e0f896645c65f119a7aa047d0389f8fb52f8b790266b5901f80233543c5c9f3738348434428cc1700e9a6e373104af2415252458153aaa335807ac32b5adcf4effaeddcf7b2917362e614f20dd13674f179f428b9c61d33000e7155d09c65831e0b21ed4f71f637e06d616940f10ef7198914a28b9fe6a2cb1d4255967414ea2a7c49f60f69c3d64d8f7e8ea4a1bd89fa95bcdebfa91314fe361933de866e5ba97bcdc4313fa61866138a34d3604648f922fdd2de062f064ef9f56ce3fc1e5da438d686a4564a16f8f5432fa06ab4cda1367813a1ae2cedbcc1a126ca799b1733f7669776e321a58edd1ebb0e5903f4d45f3af5e51395c038f2"
);
_reverseCase(
hex"fd8f57a49cd2526eea289cd065f6c2460223088ec3880fc59f3d5ab0c383ac9765ac02db88348114bf54aab6b5cd20d248903616123f59253b7724e0051b5ec45554518bacfad5cb3df9b9c0d9fe57028d451207fefff523437dc3cefac810dae57eaac1a56cfdefe109c4a7772057d5cf38609b13f5fd3d8d113ad0d4e3ffcc6e0bb3d6242d4b7863fd2c172f808d02114c1bc229644678be5663a5924c3ff513d6f4ec8cac08ea69f1199a03dccba4b0504458ebf6c89b6c1eb47c5492b1e89cebab237bc7894f24026deda66ff2e12c51230be38ade7cf458dc3195a1a51c771a64410fcfe782ffd8563688f8e4d05f77a2ce0d1fa7bd36a4db8ff547133de0cf943c2cbe55c110c6f4b299943911f92139b6e7ccc837147d09b18f22af993f0187b9b163cda22e947a0dccdebaa48685340ee94a4b28b8e57e2caaf97e0287b791280b416060a58f6c38a2a370d88a32b91a2a4a1b56ddbe2fab3225ea3e7cb5c464c0806d523b7f9c4cc27dc1e1e7886e674dff8c5ecdf320dd6a2125a279f777b0e6a6d5bfaf45d7064d906a7ffa9860c9c61410873db7b115cf119012d5444f9da35e158a0dfb74e70c1e9eb39b3f6288b36fde28ab2f7f57b60a928f43734c0af37e06e149982250ad1597aadfec328b84d60b622159f8c57e25a6238a08277383ba6620182504bd152064f8351a959ea3cbbe883f2ed90256d36da84056c867116a514efa9689c1e31b531c72a048f4d0034ad8c574d093bcaf4d86b61e96d4e1a8a9cdca221cec91dc52e947d41260df7b44dbd24ae02dd29149c12ee81f7d4c2e7eac71c24ac114b91befeff2f863640b8b6c1f1c087dfcf91aba5a761de5fb1aa84e018cd980d5c1b2df8d3e42f264c069c81e58b933c4f1248d99637e931ab6b93fbc342540616131e5b62ebf06f70a620ac9318acb",
hex"cb8a31c90a620af706bf2eb6e5316161402534bc3fb9b61a937e63998d24f1c433b9581ec869c064f2423e8ddfb2c1d580d98c014ea81afbe51d765aba1af9fc7d081c1f6c8b0b6463f8f2efef1bb914c14ac271ac7e2e4c7d1fe82ec14991d22de04ad2db447bdf6012d447e952dc91ec1c22cacda9a8e1d4961eb6864dafbc93d074c5d84a03d0f448a0721c531be3c18996fa4e516a1167c85640a86dd35602d92e3f88becba39e951a35f8642015bd0425182066ba837327088a23a6257ec5f85921620bd6848b32ecdfaa9715ad50229849e1067ef30a4c73438f920ab6577f2fab28de6fb388623f9bb39e1e0ce774fb0d8a155ea39d4f44d5129011cf15b1b73d871014c6c96098fa7f6a904d06d745afbfd5a6e6b077f779a225216add20f3cd5e8cff4d676e88e7e1c17dc24c9c7f3b526d80c064c4b57c3eea2532ab2fbedd561b4a2a1ab9328ad870a3a2386c8fa56060410b2891b787027ef9aa2c7ee5b8284b4ae90e348586a4badecc0d7a942ea2cd63b1b987013f99af228fb1097d1437c8cce7b63921f911399499b2f4c610c155be2c3c94cfe03d1347f58fdba436bda71f0dcea2775fd0e4f8883656d8ff82e7cf0f41641a771ca5a19531dc58f47cde8ae30b23512ce1f26fa6ed6d02244f89c77b23abeb9ce8b192547cb41e6c9bc8f6eb584450b0a4cbdc039a19f169ea08ac8cecf4d613f53f4c92a56356be78466429c21b4c11028d802f172cfd63784b2d24d6b30b6eccffe3d4d03a118d3dfdf5139b6038cfd5572077a7c409e1effd6ca5c1aa7ee5da10c8facec37d4323f5fffe0712458d0257fed9c0b9f93dcbd5faac8b515455c45e1b05e024773b25593f1216369048d220cdb5b6aa54bf14813488db02ac6597ac83c3b05a3d9fc50f88c38e08230246c2f665d09c28ea6e52d29ca4578ffd"
);
_reverseCase(
hex"fc7141479bca17cdb455cf66069cec5f055ce8fc147512794e4976fa48c833a14003e007196b36a3c52af4b2568c0d611754f24d573dab5b07b24200c855147976df6a32f400ae695712c96d7d66f98c3a79d076701078cdcec3f3f1f18fd590e1a45a6fd31b58606f1f0b6f094251abd202fef4194858e7bec1afc4978613269178e28695339009d34e5f292086d67c9b619761353f74b62ef7c1184e642bf608f1094292d52c1c8c96b8f91122fe337cb13e2a4c8be7c827a3faa0a43c0a4559920a682ff30fb01f16cfeb0e2a4e7f577e7074bcad03942ce79fd9504e85d93dd0ac98406266284e6ea93065d58bfef32e6047e1569a3458957d16554848f61a61f77048004e2f1029848a36a800f566bd10b8bf3cafa2fa252fdef71e254b7f23b2e750f6e4029724329eb1b217e7641b3ea81e49ad",
hex"ad491ea83e1b64e717b2b19e32249702e4f650e7b2237f4b251ef7de2f25faa2af3cbfb810bd66f500a8368a8429102f4e004870f7611af6484855167d9558349a56e147602ef3fe8bd56530a96e4e2866624098acd03dd9854e50d99fe72c9403adbc74707e577f4e2a0eebcf161fb00ff32f680a9259450a3ca4a0faa327c8e78b4c2a3eb17c33fe2211f9b8968c1c2cd5924209f108f62b644e18c1f72eb6743f356197619b7cd68620295f4ed30990339586e2789126138697c4afc1bee7584819f4fe02d2ab5142096f0b1f6f60581bd36f5aa4e190d58ff1f1f3c3cecd78107076d0793a8cf9667d6dc9125769ae00f4326adf76791455c80042b2075bab3d574df25417610d8c56b2f42ac5a3366b1907e00340a133c848fa76494e79127514fce85c055fec9c0666cf55b4cd17ca9b474171fc"
);
_reverseCase(
hex"3b9c06b2ff7c1db804e2dbb5c15133508683869fea2b39edc56e426ebaf9a9fbbcd9d1b42ca1afee7a6a9a5cc29847dd478030a92f56d2e9a5126d2f697be5d6400090434ac9c408d1146f03e599c124029c8188725dccdc650b80eb110506248b15aeb20b679665af8bbf6f609c9e82cdba505ab1573718b6050e05c74ddfd081c9c092106faa954970052db50f906ca7bebd0ccacec233bf780426f26d23557729dcce56d03e1d56068598639cb268ff4410bd53da780fabd2a2504f96ce7a216b79ef814785f73b7a0a508e69297ec629f2679cfd8678a9aab8461fed292296ac76d742503f2d947050999b56f6592866853b3b18ba97118605145d6d6e720318334b6b9f555a8c56ed22e5d90c723c4dc42f64e325d5f3101c8469430065c26099662d87400b292ff8fb09ec66201471ed963615163e0c569d5f784422b0d49f66e1130602f2aa065533f62b1df7fa07f914711a9a2c19aae6c8c9e46a0d1ffc4dbd9e46408d824ddcb62d9b00b80d96c534e364aa23fda0aaba31a457892534eba93062e2dbb4801e3db2af1289f2f2f7d503b090e3e57c85f4fe68a34b7d52e5180ec37ea829a64ed1f011ae55ed8518a55bc42a8fc21ff131523b62990bf2f1defbf14149df243fc66bf6bcbf79717ef17590834d9db9228ed5ad9e60da1eca4734db4371f96f88d4f0663b0b8c7f29b8a835c0f6e26e892ef04980f2459e28ddf0121744c28a1971d13d3d8fc215edea16642ed83ac876c6df38908b2d8ad06a1989720181e06aa3bce7514f240b7c49dcac318d4885f554a0595bb609aae6192eeda9c3e52032095d3d4c2f1efba2e371e107d6ee4c3845ac8ddf5a21531566d79fb0e89fe73d05dca9f4fbd1801f404c26ca656ab8777aa21ff390886ec480f5cd6b55b2c15b115062f90e61b535a46b8eaade92f30c1e6aad7ef33611555da5efc55f5146a2c3a284cf390486fae8d2962bc2aeed802967c6d7c38767eb409c3204ea3fcbfb4b973f71cc266ee67bf04aa1b8a0c4cdbaa8157a16e0ed40dcc45d4a74983f727fcaa372d4e97a13dbb7b3147d2a19004c891b2c40febe5cdde6297d396a4f",
hex"4f6a397d29e6dd5cbefe402c1b894c00192a7d14b3b7db137ae9d472a3ca7f723f98744a5dc4dc40ede0167a15a8bacdc4a0b8a14af07be66e26cc713f974bfbcb3fea04329c40eb6787c3d7c6672980edaec22b96d2e8fa860439cf84a2c3a246515fc5efa55d551136f37ead6a1e0cf392deaa8e6ba435b5610ef96250115bc1b2556bcdf580c46e8890f31fa27a77b86a65ca264c401f80d1fbf4a9dc053de79fe8b09fd7661553215adf8dac45384ceed607e171e3a2fb1e2f4c3d5d093220e5c3a9ed2e19e6aa09b65b59a054f585488d31acdc497c0b244f51e7bca36ae081017289196ad08a2d8b9038dfc676c83ad82e6416eaed15c28f3d3dd171198ac2441712f0dd289e45f28049f02e896ee2f6c035a8b8297f8c0b3b66f0d4886ff97143db3447ca1eda609eadd58e22b99d4d839075f17e7179bfbcf66bc63f24df4941f1fbdef1f20b99623b5231f11fc28f2ac45ba51885ed55ae11f0d14ea629a87ec30e18e5527d4ba368fef4857ce5e390b003d5f7f2f28912afb23d1e80b4dbe26230a9eb34258957a431baaaa0fd23aa64e334c5960db8009b2db6dc4d828d40469ebd4dfc1f0d6ae4c9c8e6aa192c9a1a7114f907faf71d2bf6335506aaf2020613e1669fd4b02244785f9d560c3e16153696ed71142066ec09fbf82f290b40872d669960c265004369841c10f3d525e3642fc44d3c720cd9e522ed568c5a559f6b4b331803726e6d5d1405861197ba183b3b85662859f6569b995070942d3f5042d776ac962229ed1f46b8aaa97886fd9c67f229c67e29698e500a7a3bf7854781ef796b217ace964f50a2d2ab0f78da53bd1044ff68b29c63988506561d3ed056cedc297755236df2260478bf33c2ceca0cbdbea76c900fb52d05704995aa6f1092c0c981d0df4dc7050e05b6183757b15a50bacd829e9c606fbf8baf6596670bb2ae158b24060511eb800b65dccc5d7288819c0224c199e5036f14d108c4c94a43900040d6e57b692f6d12a5e9d2562fa9308047dd4798c25c9a6a7aeeafa12cb4d1d9bcfba9f9ba6e426ec5ed392bea9f868386503351c1b5dbe204b81d7cffb2069c3b"
);
_reverseCase(
hex"18b7dfec60b1b09915a8d5462f663b33f7f1637df04951487d6e2b74c8032a32cb75d721584e323f890f1a",
hex"1a0f893f324e5821d775cb322a03c8742b6e7d485149f07d63f1f7333b662f46d5a81599b0b160ecdfb718"
);
_reverseCase(
hex"e9f0369077270c11ebe550bc6052b451b54b2c9672a66843af9ec2b5fb17f871556a53bb795f8d687faacb668460285db96bfe26be917ce19029931802cf09ac00ca7d8a62c41843647a6cc092de4bdb8b119575f66e35574ba860679c2157ed879a28c04b230c19655aaa0f1d227148c080b2f53d6c1c6520b2c4bb5d1b12df4115decf7e4865c3982426a8228b6b1000c8f6a389f3e2e832b0bdbc7ac0fea0bff80517fee909ae266677abbb0931c6f586c8c5ece63babcb253386b7b6c35c07e70f9c679522c6921b74f86061182ceae60d17aa796b13c663285b1f6a693fe2e6848d929272fb0c906fce628471b4f2b6b3b746bc8a5b7617bee0571877bbff6d0aef8351b9c8e660f7c9ecb01e00c5bb1f365646a3da48025a02a0dc21f17571d88130df5786de383b07daf661920a67fab11f0c16726781f436a286daf376c356b136639a1015bbcf853278f4938ed7e7c2e53b8c70d6185fcb5b04fc73be1cb77993dc803844523d6999f0cb37305a6b034b649818fcfc48e70a02e6e2a84628c139138fcb98b461829772e733bff107955d7c93536ecd64694aa59ce88a714d093596dbdd069fb91981c85a7c769d06eac4b6fa4bd5f3850e7f31a74ab5e17ca93c097672a3fe9eb064a000fde90eb57fd29332ed7c2fdae11a901b09b19124b3cf3eb10419c24b998c23a36c7cc6a39ae8773baf72bbaf4d00bf1bd0cfd67b61c5b6d3e2c54d9fc0d709deae1a1ddcae604e3bd250821bafca6a64e94abf1ed6f868931671f8172320da51f5179d571dc0c823da34cd4f1faec6d425f574501ca55216d08ec31882ae0fb1541e70898bea821c532ac0129476f4dbf97958066e19716ac72a",
hex"2ac76a71196e065879f9dbf4769412c02a531c82ea8b89701e54b10fae8218c38ed01652a51c5074f525d4c6ae1f4fcd34da23c8c01d579d17f551da202317f871169368f8d61ebf4ae9646acaaf1b8250d23b4e60aedc1d1aaede09d7c09f4dc5e2d3b6c5617bd6cfd01bbf004dafbb72af3b77e89aa3c67c6ca3238c994bc21904b13ecfb32491b1091b901ae1da2f7ced3293d27fb50ee9fd00a064b09efea37276093ca97ce1b54aa7317f0e85f3d54bfab6c4ea069d767c5ac88119b99f06dddb9635094d718ae89ca54a6964cd6e53937c5d9507f1bf33e772978261b498cb8f1339c12846a8e2e6020ae748fcfc1898644b036b5a3037cbf099693d52443880dc9379b71cbe73fc045bcb5f18d6708c3be5c2e7d78e93f4783285cfbb15109a6336b156c376f3da86a236f4816772160c1fb1fa670a9261f6da073b38de8657df3081d87175f121dca0025a0248daa34656361fbbc5001eb0ecc9f760e6c8b95183ef0a6dffbb771857e0be17765b8abc46b7b3b6f2b4718462ce6f900cfb7292928d84e6e23f696a1f5b2863c6136b79aa170de6ea2c186160f8741b92c62295679c0fe7075cc3b6b7863325cbab3be6ecc5c886f5c63109bbab776626ae09e9fe1705f8bfa0fec07abcbdb032e8e2f389a3f6c800106b8b22a8262498c365487ecfde1541df121b5dbbc4b220651c6c3df5b280c04871221d0faa5a65190c234bc0289a87ed57219c6760a84b57356ef67595118bdb4bde92c06c7a644318c4628a7dca00ac09cf0218932990e17c91be26fe6bb95d28608466cbaa7f688d5f79bb536a5571f817fbb5c29eaf4368a672962c4bb551b45260bc50e5eb110c27779036f0e9"
);
_reverseCase(
hex"c999500057e4c483dc3b89b90ddcdeffa14c312bf81b1b7a95097631649aedc3feeb35a7b180f21b4953999eee4954f515dc90cf1861347c435fd8b8e9503b647bdd7949ba70e9916ae292dde99257e8b8039d5aadf9fa037fafd66f21e638d519b783762c2e012094d6193d23a1cc3a807c6ac6365e8073c3cf4de4f56cda48281de1e1aac6b73a965478da03416bc5618d4b397666848277a9e6c6832b6ef9cbde3b9febff0a7dc07fe566630d7948b7e6bf11981b7a0131d029d0f56dd5f35f4e733efcdcb12a99758d4b13fbf3dde1022a777522f735777935f45a5bbed3517b302d374c3f",
hex"3f4c372d307b51d3be5b5af435797735f72275772a02e1ddf3fb134b8d75992ab1dcfc3e734e5ff3d56df5d029d031017a1b9811bfe6b748790d6366e57fc07d0affeb9f3bdecbf96e2b83c6e6a97782846676394b8d61c56b4103da7854963ab7c6aae1e11d2848da6cf5e44dcfc373805e36c66a7c803acca1233d19d69420012e2c7683b719d538e6216fd6af7f03faf9ad5a9d03b8e85792e9dd92e26a91e970ba4979dd7b643b50e9b8d85f437c346118cf90dc15f55449ee9e9953491bf280b1a735ebfec3ed9a64317609957a1b1bf82b314ca1ffdedc0db9893bdc83c4e457005099c9"
);
_reverseCase(
hex"ade79063379fab8f9cad08f5b3d4e4543728",
hex"283754e4d4b3f508ad9c8fab9f376390e7ad"
);
_reverseCase(
hex"c37f2889693afae00ee6f9214b13425b15f93ed825337ed650938086e8ea305f00b237f63d5c718934ca5b089e6a",
hex"6a9e085bca3489715c3df637b2005f30eae886809350d67e3325d83ef9155b42134b21f9e60ee0fa3a6989287fc3"
);
_reverseCase(
hex"e199f2b3b853600183917555bee805447908af5f76b262d6da4d99e35ce61f77bb1e9e882343fda301545bbf511c2b99690e89b8cbcc3c6b11abfc649a58adf3193ad2ca27c1940ab9f3ea7e29cacd304473bdaf10cf8afd378e7d54ae14efcb892f3c584550c4b14e9a877c5eeee7fa9ab08859c9131c776bd35086e721624ca2286be261d9af88b29d60ad5c3ea6e4018680b23fd4f3816a132a9d482606cdfe196a39d79785735c0a441595cf4494f71d26fd43b0b1d2e30db1f30a222170611492bd32880433c393b0d8b453502ef4f0043bc9387f89dde61a60174d780c3c90728d5f919df472c9b7939942824064a78e9ce329b99d63f352c186663f3b5127df5836c1ba362c3d86fbc9b187d5758898cc1ae2923e4950eac43bacc98838475fa1fd367a846782ac5611f2e59aab886e01c8def89efcc94cc3bc5c8daa6c39cdf248ccfc9db4294a2c5e9734d7ddafac9a50097baf263c6e43584fc314bf68e8d299e7802ea41319a3d5c216e647bcb1e2efadc2ad06de24ebdff272540e8b2b9480429afe9b368327e2fb9851d985db92554c80df1e78b4ee441da289feae5c73c97cf4b9a1d01fdfd635535507734ee6d8625a940edac32973727eee9ba24b1b15aea8179b328817681cbaaa9b5f30ec219c9ecdd46989dab51d232c77a8fa562ab9e941a8e3f897ab439958b360638b5eb7240f20d980d052b45bdeebb99d5a5756a8315b6425e4a1842e6fc4dbf3f5406906c4065a132960ba67a2500c541e15ed1259e88ecc36744120d59f913109e50996cab0ef2c5a4a8cf50552c5eba6ad037ea96621f46b9d6e42ad5967b944cacb18518c85cfe327178b244c3d804066b2d41220e523ae534fcd0951c0de21e5146c6f67e62ed51f8babbbf3704557d8b28ecc8a5bdbae0fec6393f7844c9e54ed681b23622285fd8906a86b90339f48ace1749aeee3be2878ffecf276c71592df97e6f3662837a20283574fc49edb471c3590d1add6f4e08ba6106978ac6980c6e78e5d377104fe05f2758144d662e48f9369484c0781561a776b233d54094d52a8a94a43918df4f8c30cec09107472bca35f0c5aa61e8a5029c4ab4e22bb693e21c07ccf9b318c08d482faef6baa7a16b95ebd4ff5c6d86d093cb9bd5c850ce5314a7f592b5f92d09a08274a35ffdb484e63c6dcc467054347a0b03a691de3d8f52a7ae68d0b01d50c481b191810fe1427f5019bdedf77b09d28f20d68a974280adeb758312176e25c0fe0a022e2566ebdd89586dafd4d505ca878d5048f318e0a258bbb391569f0882d1359ec3c7b3c2ccf8e1831ed0669e1f53b4c7147585dd617622cd4f789c0eb258c14ac4e59b8fc10627ceff0095e66c154e43feedfd1c078fea1b3bb0a086485def28ef71b94e0ab2c4fe2f798aa5c0c945d81f0f5a42d1d4f7296e7182cfdf46716eb296956e82eb8e31832892d90b61f44608790363b05f01c8a7a752877e318460a1a2d571fb0a1a656f5562e6c9a4ae86c110c80ff42",
hex"42ff800c116ce84a9a6c2e56f556a6a1b01f572d1a0a4618e37728757a8a1cf0053b36908760441fb6902d893218e3b82ee8566929eb1667f4fd2c18e796724f1d2da4f5f0815d940c5caa98f7e24f2cabe0941bf78ef2de8564080abbb3a1fe78c0d1dfee3fe454c1665e09f0ef7c6210fcb8594eac148c25ebc089f7d42c6217d65d5847714c3bf5e16906ed31188ecf2c3c7b3cec59132d88f0691539bb8b250a8e318f04d578a85c504dfdda8695d8bd6e56e222a0e00f5ce276213158b7de0a2874a9680df2289db077dfde9b01f52714fe1018191b480cd5010b8de67a2af5d8e31d693ab0a047430567c4dcc6634e48dbff354a27089ad0925f2b597f4a31e50c855cbdb93c096dd8c6f54fbd5eb9167aaa6beffa82d4088c319bcf7cc0213e69bb224eabc429508a1ea65a0c5fa3bc72741009ec0cc3f8f48d91434aa9a8524d09543d236b771a5681074c4869938fe462d6448175f205fe0471375d8ee7c68069ac786910a68be0f4d6add190351c47db9ec44f578302a2372866f3e697df9215c776f2ecff7828bee3ee9a74e1ac489f33906ba80689fd852262231b68ed549e4c84f79363ec0faedb5b8acc8eb2d8574570f3bbab8b1fd52ee6676f6c14e521dec05109cd4f53ae23e52012d4b26640803d4c248b1727e3cf858c5118cbca44b96759ad426e9d6bf42166a97e03ada6ebc55205f58c4a5a2cefb0ca9609e50931919fd520417436cc8ee85912ed151e540c50a267ba6029135a06c4066940f5f3dbc46f2e84a1e425645b31a856575a9db9ebde5bb452d080d9200f24b75e8b6360b3589943ab97f8e3a841e9b92a56faa8772c231db5da8969d4cd9e9c21ec305f9baaba1c681788329b17a8ae151b4ba29bee7e727329c3da0e945a62d8e64e7307555335d6df1fd0a1b9f47cc9735caefe89a21d44eeb4781edf804c5592db85d95198fbe22783369bfe9a4280942b8b0e5472f2dfeb24de06adc2adefe2b1bc47e616c2d5a31913a42e80e799d2e868bf14c34f58436e3c26af7b09509aacafddd734975e2c4a29b49dfccc48f2cd396caa8d5cbcc34cc9fc9ef8dec8016e88ab9ae5f21156ac8267847a36fda15f473888c9ac3bc4ea50493e92e21acc988875d587b1c9fb863d2c36bac13658df27513b3f6686c152f3639db929e39c8ea7644082429993b7c972f49d915f8d72903c0c784d17601ae6dd897f38c93b04f0f42e5053b4d8b093c333048832bd9214617021220af3b10de3d2b1b043fd261df79444cf9515440a5c738597d7396a19fecd0626489d2a136a81f3d43fb2808601e4a63e5cad609db288afd961e26b28a24c6221e78650d36b771c13c95988b09afae7ee5e7c879a4eb1c45045583c2f89cbef14ae547d8e37fd8acf10afbd734430cdca297eeaf3b90a94c127cad23a19f3ad589a64fcab116b3ccccbb8890e69992b1c51bf5b5401a3fd4323889e1ebb771fe65ce3994ddad662b2765faf08794405e8be55759183016053b8b3f299e1"
);
_reverseCase(
hex"173ea0d069af6f30d15d6a6e4944bcf5f05bdaa000d71f7196f287154eb60aea9659bb25e7ff0c51f3fdf7abfeea54a3b1f365cb81b8a70550a6b5795a7982a4091f68c452bbae14e09df9aa3186ccfd92d1a9841c2d2421cbe4caeca8cc448e2f1766913a57d6510778bf23841fc3c400c6ad9b72c3cd7b97c2948b0017905a192c95ef7729215efa99dbe299831407d97fce3df3677d5fb15da098a3bb17903053537680de94a19a61371fc1fcb35e6fb66153905c9eaebfbce5b53121fcd2b98d7d799cb42965a87b7a6ea961b241f49eacb4a0261bd313f59272bcc84332a0361e7d6f6869c2091b50ebe40222e60bac2da8f5a378ddac7a2529e5bba481110afcec8d46dfd7d51254d41d81305fc9427e405a91806042ec52a14d539b86028320f9a14166871b89850f242c878bb39154fcd7a237c16d",
hex"6dc137a2d7fc5491b38b872c240f85891b876641a1f9208302869b534da152ec426080915a407e42c95f30811dd45412d5d7df468decfc0a1181a4bbe529257aacdd78a3f5a82dac0be62202e4eb501b09c269686f7d1e36a03243c8bc7292f513d31b26a0b4ac9ef441b261a96e7a7ba86529b49c797d8db9d2fc2131b5e5bcbfae9e5c905361b66f5eb3fcc11f37619aa194de80765353309017bba398a05db15f7d67f33dce7fd907148399e2db99fa5e212977ef952c195a9017008b94c2977bcdc3729badc600c4c31f8423bf780751d6573a9166172f8e44cca8eccae4cb21242d1c84a9d192fdcc8631aaf99de014aebb52c4681f09a482795a79b5a65005a7b881cb65f3b1a354eafeabf7fdf3510cffe725bb5996ea0ab64e1587f296711fd700a0da5bf0f5bc44496e6a5dd1306faf69d0a03e17"
);
_reverseCase(
hex"61990127dcc3d271334754563a96bbe3916a0f9e1a248b66113d6336d058afeff51e2cb01c882dea076714222e12f9673d159374f5ba851d3539872bd8485ce01698b4b23c15faea7ca9fc0e8a44f7d352b4845a62f59ead5e4d25316b15e0de460988678bf12c11508caf5fc608e309e97d45cfb262ff5f05272c468c744600b9a2095bd6eb68ebba72b5c304aa7b9f34c62e0c495896f11531d035f3415cba0d62a68cf12e05aa4fbcfb2d93929ce4340d607a799908193569535d7a761360b19f925e733967b91fcbc9f7399ab7ca48c27155b3cf3d5986ce5127350db0e4894dce36a951d1748bdeb372a537fd092ca0bce2a4933904c0017dc984a49d490583b6abb3c75d99faa300f9a3b9df210559752836d1b9030a67e8f9f9902279bc4385c8b56855be461ab8e3d9676751f45731eb904e009fed",
hex"ed9f004e90eb3157f4516767d9e3b81a46be5568b5c88543bc792290f9f9e8670a03b9d1362875590521dfb9a3f900a3fa995dc7b3abb68305499da484c97d01c0043993a4e2bca02c09fd37a572b3de8b74d151a936ce4d89e4b00d352751ce86593dcfb35571c248cab79a39f7c9cb1fb96739735e929fb16013767a5d536935190899797a600d34e49c92932dfbbc4faa052ef18ca6620dba5c41f335d03115f19658490c2ec6349f7baa04c3b572baeb68ebd65b09a2b90046748c462c27055fff62b2cf457de909e308c65faf8c50112cf18b67880946dee0156b31254d5ead9ef5625a84b452d3f7448a0efca97ceafa153cb2b49816e05c48d82b8739351d85baf57493153d67f9122e22146707ea2d881cb02c1ef5efaf58d036633d11668b241a9e0f6a91e3bb963a5654473371d2c3dc27019961"
);
_reverseCase(
hex"069505e0c2cd1372c021e1cf8d2ca4aa3cb79c0a154d7b707fb9774a21f8a60f4fd66478d06ab1e91f667b1381d97231305bc7958ac3ed14d74033aa7779ed5526f8559b4ad23876e320573a98b1cfc4ddc7b1d562555049db22d2afffeb2d56f6465ec2158daf7a9fc23c096aff439e83595043436cd8088452cf83d52ca6bf1d830b956b17a8143688cf763fce10f11c37a58bf0e4098aff96741c3b163ca0640c3c4b64996852fd36d6734d1c991310401e63eae47f0274e1b301a0be9a8d1db7b7d49fad7e062074e5e9",
hex"e9e57420067ead9fd4b7b71d8d9abea001b3e174027fe4ea631e401013991c4d73d636fd526899644b3c0c64a03c163b1c7496ff8a09e4f08ba5371cf110ce3f76cf883614a8176b950b831dbfa62cd583cf528408d86c43435059839e43ff6a093cc29f7aaf8d15c25e46f6562debffafd222db49505562d5b1c7ddc4cfb1983a5720e37638d24a9b55f82655ed7977aa3340d714edc38a95c75b303172d981137b661fe9b16ad07864d64f0fa6f8214a77b97f707b4d150a9cb73caaa42c8dcfe121c07213cdc2e0059506"
);
_reverseCase(
hex"209fcf33f76b39910510f7c49db9dbd932c821d923e38e8ef427efd1b5f8126ca0e5f40482d7ba6b0efab3ce01b0908a4d2e362a30869eda3219c8a38b25114bc148e0db33b003fa9265bd0b393d6201e2482f15ac6555faa03617d31fd66853f84f6a2bfbcd55e98ccd94fe2cc529a8b7af125ed1a5fa9bcb35d3f2cf07aa2f7d378a634c8bdd11c03c26c70a88fb75fbb1555185e2cd4cea4d46362760babc9127df175acf348eed9325f32a49438e948f7ef4ce7f23733ceaa27e5c078bf5e5c60b30f1bd20f08d2c6466c865f36139c712703a9b82307a26bee0f25d31baae50f4139225925e99d677f5c5d68ee494dec836375af09e71e748f578fc44ba1dec1d02e7e5212a8fb68a4b5d349853bb71350d755369d072895d60862a792b25eacd2bb473e19ff1de7ff84548526a46aa8e0c2fb44a16ca81c45bff41f8d90d33a1be9b0841db4535f0cae0774cc522673ec2d1ef8f10f1fb6c7ad530a167682c6320dbf72db96151a035ffa269564857e5ab3317c10d84cb10114953d7c61ca7ecc8fb058bd6b76731d6356dbd6a4ab2ff30456855535e754f55e3441f6c5f8656e26ba55a650b620d65ea6c51d9aed2818a55c8ee9a41258dea66671c134462285af46155b78ea060c50fef704f472f3cb574bc48d4ce07a7c10845b1a9a9ef79d7b74852e55dbe4ff63dcf20aa62c4eac195c90cff9815ddd33b6d3590efeb4ebf9cd0650b477c918c7b7dc3b6eee1a3ac6caf610b899ddf3b42198a9ba05aedfda3ce75d74f366d38b8b333a162b824fe2e3ed636d0cd7317e8be00059ddea73125e5f7fbcc675db4be4d4809d81a2e725f89752c39024efb01bed0d5ffe1941907f82b09146ab79a11ee4e5cf978a1e1722198a5198085d58fcdc59fbef648412b5befb2412c822833caf67f74b89155acc40431f7eb7b35903945faaf8aa2da738269aff4c6942468f35f05072a47bd50fd7932fecb93ecb94ec4f0e8b58520cdb5052d7555cb9d42a61260bceaa595649bbbfe47e7d4da12c53fd2831689d02dc058f0f6c4fcdf634daa29342b9b996c7083b4051d2fdcf574efa36c23a9b1a033cc7392665adfcbb8059980623c23dd3ace26707c37699d34fcc667fc9260a825beab633dca1a8971945c6ac74cf4f1958cbf6109fb7faaa6402c3e408060a29d254d6b8fe960a1724aced02c61dfcee8e12ad01da12041ba793ad6",
hex"d63a79ba4120a11dd02ae1e8cedf612cd0ce4a72a160e98f6b4d259da26080403e2c40a6aa7ffb0961bf8c95f1f44cc76a5c9471891aca3d63abbe25a86092fc67c6fc349d69377c7026ce3add233c62809905b8cbdf5a669273cc33a0b1a9236ca3ef74f5dc2f1d05b483706c999b2b3429aa4d63dffcc4f6f058c02dd0891683d23fc512dad4e747febb9b6495a5eabc6012a6429dcb55752d05b5cd2085b5e8f0c44eb9ec93cbfe3279fd50bd472a07055ff3682494c6f4af698273daa28aaffa453990357bebf73104c4ac5591b8747ff6ca3328822c41b2ef5b2b4148f6be9fc5cd8fd5858019a5982172e1a178f95c4eee119ab76a14092bf8071994e1ffd5d0be01fb4e02392c75895f722e1ad809484dbeb45d67ccfbf7e52531a7de9d0500bee81773cdd036d63e2efe24b862a133b3b8386d364fd775cea3fded5aa09b8a19423bdf9d890b61af6caca3e1eeb6c37d7b8c917c470b65d09cbf4eebef90356d3bd3dd1598ff0cc995c1eac462aa20cf3df64fbe5de55248b7d779efa9a9b14508c1a707ced448bc74b53c2f474f70ef0fc560a08eb75561f45a286244131c6766ea8d25419aeec8558a81d2aed9516cea650d620b655aa56be256865f6c1f44e3554f755e5355684530ffb24a6abd6d35d63167b7d68b05fbc8eca71cc6d753491110cb840dc11733abe557485669a2ff35a05161b92df7db20632c6867a130d57a6cfbf1108fefd1c23e6722c54c77e0caf03545db41089bbea1330dd9f841ff5bc481ca164ab42f0c8eaa466a524845f87fdef19fe173b42bcdea252b792a86605d8972d06953750d3571bb5398345d4b8ab68f2a21e5e7021dec1dba44fc78f548e7719ef05a3736c8de94e48ed6c5f577d6995e92259213f450aeba315df2e0be267a30829b3a7012c73961f365c866642c8df020bdf1300bc6e5f58b075c7ea2ea3c73237fcef47e8f948e43492af32593ed8e34cf5a17df2791bcba602736464dea4ccde2855155b1fb75fb880ac7263cc011dd8b4c638a377d2faa07cff2d335cb9bfaa5d15e12afb7a829c52cfe94cd8ce955cdfb2b6a4ff85368d61fd31736a0fa5565ac152f48e201623d390bbd6592fa03b033dbe048c14b11258ba3c81932da9e86302a362e4d8a90b001ceb3fa0e6bbad78204f4e5a06c12f8b5d1ef27f48e8ee323d921c832d9dbb99dc4f7100591396bf733cf9f20"
);
_reverseCase(
hex"cd1618b45c0bdfc4d92e896f9ad3a08997bc663daece3d8086160e56412c7f5c932d97cf1dc9561e7b094f22bc37a3afa69659b897b168dab756e19f2fae86b43b0a4e0ae39da88372132267af4bca916f300b6e44a7c65c4adf52d44a831571eae8787d6ad49c127915e484f13b2934ba5eeab1da31584d26a28384cfaf0634f6108ab9394cc82830df641a5d09530c7d693b191435fdec4c00a951ff",
hex"ff51a9004cecfd3514193b697d0c53095d1a64df3028c84c39b98a10f63406afcf8483a2264d5831dab1ea5eba34293bf184e41579129cd46a7d78e8ea7115834ad452df4a5cc6a7446e0b306f91ca4baf6722137283a89de30a4e0a3bb486ae2f9fe156b7da68b197b85996a6afa337bc224f097b1e56c91dcf972d935c7f2c41560e1686803dceae3d66bc9789a0d39a6f892ed9c4df0b5cb41816cd"
);
_reverseCase(
hex"cefff8ad93e7855c20245c72",
hex"725c24205c85e793adf8ffce"
);
_reverseCase(hex"393d98a3b3921ac78465b6", hex"b66584c71a92b3a3983d39");
_reverseCase(
hex"9bbe8aff9119780a7d32f8e65589ffd7f32a5f8c2bf5a4afa9b28ee096328399165a73467a3869f98e9ca9dcbfdd78350f4c3becf11b1e1c4e8d71973e84fcf41ce14a8a6c977b332c26f72345482a593bcc6ac556ea9c11869b1ef3580296a4b12a448c1fcbaa78b8a6ec5b050a8e5e86f8e3d777a3a8acd1b4bf4feb9b613fc3904aa5dbc6572ecc4deb5962966c810f948481017c17b6e3374a39a5eb2b9c4e831080041ad4eb62b97fd547bf46e848f2b463804ffa69120276f765203ae4e696b38d17815e56f7653fbbfa161ed3ac712b4c05a9841ceafc9ee10121f19dc3c51630ab95fdf665cfe684cf194fdfaa98797ea8f9f10723cc832ab2987014767eae89af6ed3a60f37929a08a10326918532c9b9f80b84fa694dbbda5fb671a1f6645b0cd41f215c38a836f84ab0b26da9962a8016ed351d280e2cd812539df35ff1119d517355671e493a0508c8bc516f7fa85e7d79cac39bb7c446e939a83c32b43e78fd4761cd8c9c66ce94a22b9f32056515e7accc70dbb7b214c33fc4faec41fb2759925bdc0d49d1871b72b3499c9f76a141794eec001419c2eba24d95fed33156aff0a3713db47bca921a2062b2072e433300ee51425e4f3865db0622224432e77f537ba529edf5bb2fbe3472a2ca8c5668187b604a99558756afd3c0820d3ca8c037f852b5111b1c160cfd830a73d93f3d67756852a77041f08e754fb75745c26862cfe9df3dee9c0b69ad478c2e6b4926c07847fcec1fb960689d60ba88abc4713bccc4147ff53483a667f3982911ede61a66d9eec08a531c5c8fbac8e906d838faed17a6921cca3d7e88983edae42e3f88d4dcd25c12ccfc4b6a3fbc89e086253348b924531e0e0ac010ccccd9889786b99b74428944945a229d905fabe87d2b2701881a4a4a9fe647fffb0ebca5b1cb1daa7cd36a6fcd68f71ef6dea8620bf1e1cf5abdc2ae5db2f5a461e7db66b700e045cdebe963401e6a4df39e9de2e541a5f69893d6e8693ba44f5b171a3c2bef698871fab2be5fec1876a5be1bb407d009cfed3441a0d18f3057e86a8f32875d7a7cd39e6e21d4236081335675186032c3a264be072d1da8718e5252e123790266d7203bea3d20aade0424f6baac5f773ada625b189df3fcf25ddba5a7e6f505f6261252808b8df87e24ce5b0bad37e2a93cb366473e15faa5d209e2c02e7b25a68f1b4eb12a299f3348c64e9fe1813069da49ce23e0b9112360431d99629972491655528efb5e9b639ea078312dd41ca9cbaa8fe0669a3acc2b859a985fc1dbf28e1a6b3614179e767dc0355bd3f21df7a3480141596d75c3fb4f46054dc489d5b5953bb31795cc4a4608ad881956e0980ab29e11c3af8b20a3cb711f8925c5e28aa9f6aa9e34466a03684594be645d3a89def4e395f475280801123cd8ce22c1f8c662fa56840db08d94c366058681d82435067158acb8843af3fadf8f1fa2baa987faee0d46dd7b5aa986efad84598c98dc15a65e23fb7a882fa1dbf07fe6cf783ba576e6ece1303ea24c7d3863fd651d94bc80691ff8380b4a7aaf93522618c50886dff5c30d7f0fe6d6666df578649b96425959c08a58b17d3193811f41e4bc3694b35fb85b9bd85a2d25fca0f782be8ca77c8159ada9e7ef98ac400100c4ee459621313ab5e4ac79ed348d4494ef20b4c0a3c779902dedc899b6bedd9a20b8575ad4d0a3103ca548a241c9cc6726034a159809eca78c2ff0727343ec16e5ba71a78b692d9dc2fd19cf52fd4c2748c15de1891dc86baf60e501b736e3bf8c8462c21eede9e54c3ef7445abeaadebffb2949b40158e38d10cdd211114bfbc0079a964cfaf385098912c4f49118034e5bf2d99edd994ec2616f3885c34a7b7fbd6b3b45fe8999aa49af5231a86451d16434bf4d28bf2dfe6aa8cd362c1afd560f7c65",
hex"657c0f56fd1a2c36cda86afe2dbf284dbf3464d15164a83152af49aa9989fe453b6bbd7f7b4ac385386f61c24e99dd9ed9f25b4e031891f4c412890985f3fa4c969a07c0fb4b1111d2cd108de35801b44929fbbfdeaabe5a44f73e4ce5e9ed1ec262848cbfe336b701e560af6bc81d89e15dc148274cfd52cf19fdc29d2d698ba771bae516ec437372f02f8ca7ec0998154a032667ccc941a248a53c10a3d0d45a57b8209addbeb699c8ed2d9079c7a3c0b420ef94448d34ed79ace4b53a31219645eec4000140ac98efe7a9ad59817ca78cbe82f7a0fc252d5ad89b5bb85fb39436bce4411f8193317db1588ac0595942969b6478f56d66d6e60f7f0dc3f5df8608c518265293af7a4a0b38f81f6980bc941d65fd63387d4ca23e30e1ece676a53b78cfe67ff0dba12f887afb235ea615dc988c5984adef86a95a7bdd460deefa87a9baa21f8fdffaf33a84b8ac5871063524d881860566c3948db00d8456fa62c6f8c122ced83c1201082875f495e3f4de893a5d64be944568036a46349eaaf6a98ae2c525891f71cba3208bafc3119eb20a98e0561988ad08464acc9517b33b95b5d589c44d05464ffbc3756d59410148a3f71df2d35b35c07d769e1714366b1a8ef2dbc15f989a852bcc3a9a66e08faacba91cd42d3178a09e639b5efb8e52551649729962991d43602311b9e023ce49da693081e19f4ec648339f292ab14e1b8fa6257b2ec0e209d2a5fa153e4766b33ca9e237ad0b5bce247ef88d8b80521226f605f5e6a7a5db5df2fcf39d185b62da3a775facbaf62404deaa203dea3b20d766027923e152528e71a81d2d07be64a2c3326018755633816023d4216e9ed37c7a5d87328f6ae857308fd1a04134edcf09d007b41bbea57618ec5fbeb2fa718869ef2b3c1a175b4fa43b69e8d69398f6a541e5e29d9ef34d6a1e4063e9ebcd45e000b766dbe761a4f5b25daec2bd5acfe1f10b62a8def61ef768cd6f6ad37caa1dcbb1a5bc0efbff47e69f4a4a1a8801272b7de8ab5f909d225a94448942749bb9869788d9cccc10c00a0e1e5324b948332586e089bc3f6a4bfccc125cd2dcd4883f2ee4da3e98887e3dca1c92a617edfa38d806e9c8ba8f5c1c538ac0eed9661ae6ed112998f367a68334f57f14c4cc3b71c4ab88ba609d6860b91fecfc4778c026496b2e8c47ad690b9cee3ddfe9cf6268c24557b74f758ef04170a7526875673d3fd9730a83fd0c161c1b11b552f837c0a83c0d82c0d3af568755994a607b1868568ccaa27234be2fbbf5ed29a57b537fe73244222206db65384f5e4251ee0033432e07b262201a92ca7bb43d71a3f0af5631d3fe954da2ebc2191400ec4e7941a1769f9c49b3721b87d1490ddc5b925927fb41ecfac43fc314b2b7db70ccace7156505329f2ba294ce669c8ccd6147fd783eb4323ca839e946c4b79bc3ca797d5ea87f6f51bcc808053a491e675573519d11f15ff39d5312d82c0e281d35ed16802a96a96db2b04af836a8385c211fd40c5b64f6a171b65fdabb4d69fa840bf8b9c93285912603a1089a92370fa6d36eaf89ae7e76147098b22a83cc2307f1f9a87e7998aadf4f19cf84e6cf65f6fd95ab3016c5c39df12101e19efcea1c84a9054c2b71acd31e16fabb3f65f7565e81178db396e6e43a2065f776021269fa4f8063b4f248e846bf47d57fb962ebd41a048010834e9c2beba5394a37e3b6177c018184940f816c966259eb4dcc2e57c6dba54a90c33f619beb4fbfb4d1aca8a377d7e3f8865e8e0a055beca6b878aacb1f8c442ab1a4960258f31e9b86119cea56c56acc3b592a484523f7262c337b976c8a4ae11cf4fc843e97718d4e1c1e1bf1ec3b4c0f3578ddbfdca99c8ef969387a46735a1699833296e08eb2a9afa4f52b8c5f2af3d7ff8955e6f8327d0a781991ff8abe9b"
);
_reverseCase(hex"8576380705591c3f572144", hex"4421573f1c590507387685");
_reverseCase(
hex"73440b5b849e5420a33cd681fdcbb3e65713383685cc289773b43bc39f7c26fffea987b4381cad36428535d25b24890274a9d80840b2db1ce13b887d70d4d1697a88d343c6f1bc62951e544bd9362a7e3f1dc5341d7f0357d6097fa2890a6c640fc0ff43354b85733738f1a5796d7b248a3465eaa2c168867f8a5ef28a3c619f15be436f5e28a1b619e1b79ef316db33b478ec47e5b9a5531eaa0e6f797a74abea57061d10d0b36b66becc3e7c9b8313bfe428adc6464e9bca78a96f2828ca0213e8cfd3fbcde40a6c4770c96d1645f6c7c0d52e1a3ec5841153a778bfe5d8c72cdbb264f78c8d30e2bfc6d63eedb9c5d7da7ceb5c050e18c42b9ce01e2dab7467855d163af858b85e6b50ce98c81030b802f8a18b1f1ceba099bec3ba4e61f7ed7c2b7041424e8aaff7989dc3ca60bf6164939a70e3900042928a385b53074fc8e336367af6472ec8a8bbd3604dceb1c29002c7ba796afe1a22ad4dc00d965395751c4ffa2395d9cbe654cafb8d0f4d393afe54ec7057880ab4a14027ae68a4e9df454fcdff065d2ceca8b6a00a65d3ee973a8dd57a5daab1a344ce8d7ed16df111107b938d543ede92933fa1a31dc29e860b47d0e24248a5e41b8afe8f4df2fd925077a8446b3ade7148b5fdfda2964cadc944fc478762ec0baf710aee2238ae770ca0e574bb6e8497f4534982f0845d428406e3512bd12c7865cfe50b958bfef0e8f9bcd66c5498a47f1a184dea64f500452c5b9a2539664a63bc40055f06cd8ae188fc6913f9fcf2116b147e199e86bb123ec90e1d8b0eb8bca09f68cbeee5ce928f68d039786d5f577e2a039617abdd08edbcb884320c174b667b7c94bef7d8416ee3ba6beb331621f62f085b2bc38752e3bc9a848efaec7bb4840fce68c23089b02405fc132a4eb08e2289e9c9753455229364685d95c7db3e23e211358783867881665d05d13b9d61b9823c77c7ce138775690fcc8c253fba93032b5ef5b7343e2962d6d3f053c20f615d52fd7c3f34d87b6f87678f4d3dc5e5c65e9f2eb74d7e984b6c1738cfffa0a069bd456702722d47373ad932b93b6a3fab4585a97c4d92d843a3e09213",
hex"1392e0a343d8924d7ca98545ab3f6a3bb932d93a37472d72026745bd69a0a0ffcf38176c4b987e4db72e9f5ec6e5c53d4d8f67876f7bd8343f7cfd525d610fc253f0d3d662293e34b7f55e2b0393ba3f258ccc0f69758713cec7773c82b9619d3bd1055d6681788683873511e2233edbc7955d68649322553475c9e989228eb04e2a13fc0524b08930c268ce0f84b47becfa8e849abce35287c32b5b082ff6211633eb6bbae36e41d8f7be947c7b664b170c3284b8bced08ddab1796032a7e575f6d7839d0688f92cee5eecb689fa0bcb80e8b1d0ec93e12bb869e197e146b11f2fcf91369fc88e18acd065f0540bc634a6639259a5b2c4500f564ea4d181a7fa498546cd6bcf9e8f0fe8b950be5cf65782cd12b51e30684425d84f0824953f497846ebb74e5a00c77ae3822ee0a71af0bec628747fc44c9ad4c96a2fdfdb54871de3a6b44a8775092fdf24d8ffe8a1be4a54842e2d0470b869ec21da3a13f9392de3e548d937b1011f16dd17e8dce44a3b1aa5d7ad58d3a97eed3650aa0b6a8ec2c5d06ffcd4f45dfe9a468ae2740a1b40a885770ec54fe3a394d0f8dfbca54e6cbd99523fa4f1c759553960dc04dad221afe6a79bac70290c2b1ce4d60d3bba8c82e47f67a3636e3c84f07535b388a92420090e3709a936461bf60cac39d98f7af8a4e4241702b7cedf7614ebac3be99a0eb1c1f8ba1f802b83010c898ce506b5eb858f83a165d856774ab2d1ee09c2bc4180e055ceb7cdad7c5b9ed3ed6c6bfe2308d8cf764b2db2cc7d8e5bf78a7531184c53e1a2ed5c0c7f645166dc970476c0ae4cdfbd3cfe81302ca28286fa978ca9b4e46c6ad28e4bf13839b7c3eccbe666bb3d0101d0657eaab747a796f0eaa1e53a5b9e547ec78b433db16f39eb7e119b6a1285e6f43be159f613c8af25e8a7f8668c1a2ea65348a247b6d79a5f1383773854b3543ffc00f646c0a89a27f09d657037f1d34c51d3f7e2a36d94b541e9562bcf1c643d3887a69d1d4707d883be11cdbb24008d8a9740289245bd235854236ad1c38b487a9feff267c9fc33bb4739728cc8536381357e6b3cbfd81d63ca320549e845b0b4473"
);
_reverseCase(
hex"746e9985abf7df4b97c755c01f2981a511b4c0edf0009edcbc23ff14d36b8ebbf87e61d6179fc03355a2b10cfa07204f7de5c9b40e0f35e065601e4cdcd6babde1e935ea1f64488288de02b83b23d15b8c58d28fa3e5df1f3653ff9f143644358624ef7a8ae6f49ad918994264d1dedfa3fa564644176d667ef89f514fdd188c63bb86d670069ed0ba1c6d38961c516d695fcfa9649c4f5cfcfcefb782c3af2093cf4a5be7849c03550943bffa9fad4782f3b6413c63bae940ad7f1ddfd29e75d2181dfff463668b89b41165fe93ecfe27525bc08082b323c429edb6a7faa369179f97ab77943a7cb89d4015e64562aa1fd6b979f89938aad712ffe2dbb1bf8d42ca224dbc4064361e96feb08c5cbefa070e60d76bcc402e6fadd30d178c35872e7eb79d1f42c30339b10dc00a6f5568288d1e21fa884f2c34492d43868caa0aa7913c53b3a62cf762606fe651fb4aed2135d69038baac9e661035ba188cd4e48b1a14cab84c5b4324c026f8b0cba2eb079cb9307ca685c7b67268c5082d82c16e8c39ff9e4b3a71665200216a2e986a6d1bd7aed5d5e093c43ef14388e27f132d3b74636ca169ddb1ac5afc39ecbcfce22a8040e935c108bf44966ce49c5313b663991f8f74138a4b81d885306c624419212f2990ef256e1b751917d2bb9056a9773c1d811381a347949bc4b9b4f48adbfab39e6383e71e4f4e2e04a919bf4e346013d07fc3fbc48579b4dce2cf0920cffcb685b6e8dbea9d92fb4ad35de0a55714d6c9966d76220fc42a8331db6b68dde7c53c6ce995ebb4263b5fcde613977a0928a1858060063f5f6b5ce6241b54d415f538bdbfc9f8f330cb07e392089aae923c7659b12a3c28e6a8cac0b082edf544eeba6cb3ec2c9e760132d999d8bdcdd38969fffe956a63ca83f5ab1a30686cedaa55048e23adddbca72521826cfda3c94be5811f123261b08523e7b5edda3944757405e518ae289b5f5595c3f801927d015a530d1c6ec69acf9ca606bdd5d5e81a01b4b353094fe0985b6f5b9feef6651f9a4c3ef9030cee357121f9caa3042abffed7b0cc91e03c121ec912d7ddc707e437d1680928a7aedd3056f23e06faf3dcabc9ef8a1e67954d73deed2ed726dfaec42e08845a38e7b7ecb1954572891cddf3158ef6d115ce4f1391edccd6d969b1fe46eb1ebb17b33d5d45b5ce0731950ee921754884a7d49498eef41a5cd0e1d6f73ed15cadb675db48214956c1a8962b3f1a9ad31e142b68bed3506b47d4589da0ce8d13317d8423cc9fd77d7b1a9ac199eeeb511eff1158590b0a348397c3b058f1ad9f487d8efd345cefdcb468",
hex"68b4dcef5c34fd8e7d489fadf158b0c39783340a0b595811ff1e51ebee99c19a1a7b7dd79fcc23847d31138dcea09d58d4476b50d3be682b141ed39a1a3f2b96a8c156492148db75b6ad5cd13ef7d6e1d05c1af4ee9894d4a784487521e90e953107ceb5455d3db317bb1eeb46feb169d9d6cced91134fce15d1f68e15f3dd1c89724595b1ecb7e7385a84082ec4aedf26d72eedde734d95671e8aefc9abdcf3fa063ef25630ddaea7280968d137e407c7ddd712c91e123ce091ccb0d7febf2a04a3caf9217135ee0c03f93e4c9a1f65f6ee9f5b6f5b98e04f0953b3b4011ae8d5d5bd06a69ccf9ac66e1c0d535a017d9201f8c395555f9b28ae18e50574754439daedb5e72385b06132121f81e54bc9a3fd6c822125a7bcddad238e0455aaed6c68301aabf583ca636a95feff6989d3cdbdd899d93201769e2cecb36cbaee44f5ed82b0c0caa8e6283c2ab159763c92ae9a0892e307cb30f3f8c9bfbd38f515d4541b24e65c6b5f3f06608085a128097a9713e6cd5f3b26b4eb95e96c3cc5e7dd686bdb31832ac40f22766d96c9d61457a5e05dd34afb929deadbe8b685b6fccf2009cfe2dcb47985c4fbc37fd01360344ebf19a9042e4e4f1ee783639eb3fadb8af4b4b9c49b9447a38113811d3c77a95690bbd21719751b6e25ef90292f211944626c3085d8814b8a13748f1f9963b613539ce46c9644bf08c135e940802ae2fcbcec39fc5aacb1dd69a16c63743b2d137fe28843f13ec493e0d5d5aed71b6d6a982e6a21005266713a4b9eff398c6ec1822d08c56872b6c785a67c30b99c07eba2cbb0f826c024435b4cb8ca141a8be4d48c18ba3510669eacba3890d63521ed4afb51e66f6062f72ca6b3533c91a70aaa8c86432d49342c4f88fa211e8d2868556f0ac00db13903c3421f9db77e2e87358c170dd3ad6f2e40cc6bd7600e07fabe5c8cb0fe961e366440bc4d22ca428dbfb1dbe2ff12d7aa3899f879b9d61faa6245e615409db87c3a9477ab979f1769a3faa7b6ed29c423b38280c05b5227feec93fe6511b4898b6663f4ff1d18d2759ed2df1d7fad40e9ba633c41b6f38247ad9ffabf430955039c84e75b4acf9320afc382b7effcfc5c4f9c64a9cf5f696d511c96386d1cbad09e0670d686bb638c18dd4f519ff87e666d17444656faa3dfded164429918d99af4e68a7aef2486354436149fff53361fdfe5a38fd2588c5bd1233bb802de888248641fea35e9e1bdbad6dc4c1e6065e0350f0eb4c9e57d4f2007fa0cb1a25533c09f17d6617ef8bb8e6bd314ff23bcdc9e00f0edc0b411a581291fc055c7974bdff7ab85996e74"
);
_reverseCase(
hex"38d9e3599b4bf7df99aa42faae8f515b0b9b",
hex"9b0b5b518faefa42aa99dff74b9b59e3d938"
);
_reverseCase(
hex"7742922f5310275f0efccd5598b6a1ccf251d8f3b950ac3716fa5347e2248c88b45801e43dd6808c2bd9fed6579bbc59c8cdf39316fc2bda037efdf2b97938e35504ab847590e4f54faebbe0ece04a11dce0f9ab1db64d2a10b343e924cd7c20272a5c7a8a579ed6b2c23c5d4311010949a51f319b7b77c7c59c09c2444005cac527af1b3830a7b15eecb947e5faec35c58de00a98823f19e12edbcc9ad4edb561838686cb3d938b6edcc4d636c81aa473188edaa1cc088092e5404fbc7ca4e1f370bab20fc4ac7ae51412486ae5a3ad76be1216160c70395bc713bcc12d8e32c360f9313740c017659a27b663f23dd53cb95ba3519f6273dd744f7a859eb61de9418a50142fcb091fc387c8bcfaaa08fae2e30e6b132f66cd5fe2bed905ef727050a97b605e9b8e99320d312713178811fffb94cb56f52bf2b917fb4ea978c64d328b7d088b33ff846089060cd64a7c99408ed4951ca1f968ba5c9145a063435e95733d04f3dd8ca9e909245785fd6a3072f51850cce21ace4e264afa2dc7324e7215a910c4006c7b2db63c2d590cdec63d7bb15fbced6c1a530ab1d53c9be0076e9a460e4cfebe9a372c8fdf040aaaa258b733e8e960fb091097fb13af0189d6026679a7fbb0b1da4e3495613b28016b1dec704bdb56fe2ae901cf520dd2b027e97824d482ae4e6fd9be2e379236201b4b47763a5249d39e21ef6937347cd85fc80fb36e671d311d4c88f916104ea0608e51060634ff83ce93408c29552c92815b359281f95d6d6e87852b954a63d8066ad1ef95a761b81d8d77136ab08b144ecaa2e44098e98bd6b92888fd80b92568b314ae16feedbb7fea141dfc0de88c4354681d18d64b016d502a8d35cc01321208c75ee91937698f478d8be1aacbf690f25a275897f1a2d171b662ceb8cb71a8bf330b3b3ab6d6ee24140d2890c22b8c0b040016777504d549d964ec6bf0558bc53298f746f3ccfcc20d71e28592aac73ecf218b8687560492290e1e00a554714f78deeb89097fd2573783cca5ee971674f60f3861c3426d7d72331a6def24b0b3164b94929f1a7324a87106ad1f5965b98549e0f15e11b1232dcc25086f042202cdedb715603f397f2843ba88c98e94cdb59a2b563fe46c1cd4ed47a41462485f0523db10aa507b7c3b0cb0a54b7e6b374a0666dd3e2d98c6ac09352c125b31eff003bbdb4c30f982a32a0d39ded35f9232c17177f9dc6a16fc8dac66fcaca998136f97521eea92b1a727fdaff3e1725c921431efafa6bf6184e488a55df41cd2bc02c62789b1c8ad8828ef83229a2d53eef4d2b6ead4df851201a9f550f96ad8fd1d7ba6b415042c2b23f670d59035b60040deb064c882cdb63096080dd18a322859df8ba018d2b9582aeb663c2f762b1d47452731299b9dbccb64849a9cc60b1bb24af137a42579c283549f052102a4b892276950101fc1d678b83149aef2dbc506951022acf47e542442ea3cea0bb27402ffaff0846504295cf12115033003f26124d8b5b4f1cece5069b1eb8dadba270ee56bb2eed9bf32b2c342514ef7d61d11fa8bc7185f2fd0f8b8890ad0693d55c5ed5b11430d573f362e258cf4c3654edd29d7a06d76fdfe301f2bf4b176589119c26122076f15fabff10d76e6f0494d5e7a3e36c4b08a2c368236b8a8972ecd284954f9ef7c3937a87dacc4a8d12e3c4f3fe746c832c1215bb69248322f021dfd278142ac52c881f7da9f85",
hex"859fdaf781c852ac428127fd1d022f324892b65b21c132c846e73f4f3c2ed1a8c4ac7da837397ceff9544928cd2e97a8b83682362c8ab0c4363e7a5e4d49f0e6760df1bffa156f072261c219915876b1f42b1f30fefd766da0d729dd4e65c3f48c252e363f570d43115bedc5553d69d00a89b8f8d02f5f18c78bfa111dd6f74e5142c3b232bfd9eeb26be50e27baad8debb16950cecef1b4b5d82461f20330031521f15c29046584f0afff0274b20bea3cea4224547ef4ac22109506c5dbf2ae4931b878d6c11f1050692792b8a40221059f5483c27925a437f14ab21b0bc69c9a8464cbbc9d9b29312745471d2b762f3c66eb2a58b9d218a08bdf5928328ad10d089630b6cd82c864b0de4000b63590d570f6232b2c0415b4a67b1dfdd86af950f5a9011285dfd4eab6d2f4ee532d9a2283ef2888adc8b18927c602bcd21cf45da588e48461bfa6afef3114925c72e1f3affd27a7b192ea1e52976f1398a9acfc66ac8dfc166adcf97771c132925fd3de390d2aa382f9304cdbbb03f0ef315b122c3509acc6982d3edd66064a376b7e4ba5b00c3b7c7b50aa10db23055f486214a447edd41c6ce43f562b9ab5cd948ec988ba43287f393f6015b7edcd0222046f0825cc2d23b1115ef1e04985b965591fad0671a824731a9f92944b16b3b024ef6d1a33727d6d42c361380ff6741697eea5cc833757d27f0989ebde784f7154a5001e0e2992045687868b21cf3ec7aa9285e2710dc2fcccf346f79832c58b55f06bec64d949d50475771600040b8c2bc290280d1424eed6b63a3b0b33bfa871cbb8ce62b671d1a2f19758275af290f6cbaae18b8d478f693719e95ec708123201cc358d2a506d014bd6181d6854438ce80dfc1d14ea7fbbedfe16ae14b36825b980fd8828b9d68be99840e4a2ca4e148bb06a13778d1db861a795efd16a06d8634a952b85876e6d5df98192355b81922c55298c4093ce83ff340606518e60a04e1016f9884c1d311d676eb30fc85fd87c343769ef219ed349523a76474b1b203692372ebed96f4eae82d42478e927b0d20d52cf01e92afe56db4b70ec1d6b01283b6195344edab1b0fba7796602d68901af13fb971009fb60e9e833b758a2aa0a04df8f2c379abefe4c0e469a6e07e09b3cd5b10a531a6cedbc5fb17b3dc6de0c592d3cb62d7b6c00c410a915724e32c72dfa4a264ece1ae2cc5018f572306afd85572409e9a98cddf3043d73955e4363a045915cba68f9a11c95d48e40997c4ad60c06896084ff338b087d8b324dc678a94efb17b9f22bf556cb94fbff1188171327310d32998e9b5e607ba9507072ef05d9bee25fcd662f136b0ee3e2fa08aafabcc887c31f09cb2f14508a41e91db69e857a4f74dd73629f51a35bb93cd53df263b6279a6517c0403731f960c3328e2dc1bc13c75b39700c161612be76ada3e56a481214e57aacc40fb2ba70f3e1a47cbc4f40e5928008cca1da8e1873a41ac836d6c4dc6e8b933dcb86868361b5edd49accdb2ee1193f82980ae08dc535ecfae547b9ec5eb1a730381baf27c5ca054044c2099cc5c7777b9b311fa549090111435d3cc2b2d69e578a7a5c2a27207ccd24e943b3102a4db61dabf9e0dc114ae0ece0bbae4ff5e4907584ab0455e33879b9f2fd7e03da2bfc1693f3cdc859bc9b57d6fed92b8c80d63de40158b4888c24e24753fa1637ac50b9f3d851f2cca1b69855cdfc0e5f2710532f924277"
);
_reverseCase(
hex"6c5cda6042b73e04db2e260ec8dbe2a14a0e3c299c82d404f507818d784e0811fe4fac73fc2f992574584fbc70f0616ae176351581255d025d5fc857f444989d8000d5a467c2439ceb553bdd221903d6b092beb4ce6ad005eb618a820abb19b2111773c4bed40289f960a41b9736a86761defa9f90fc0930f1b1d8d9bb717eaee6c3c2cfe49109c144ec17da5310741ba998c930245b843d057ecff063b8e3a9654868f4734d413738bd49ceee13a163b344780520a3b119617d7c7e857e94e55c240f9034fbc9bcb00cc598ddf214f7dc32040cb753c0045d72769124ba9c41aebf3c443a668bbcb03083ff287904017ce78c46c033d8ad00c587c6b3abe1bea26c2c90a590d1da411f50e3466dd875197c102d1e051e9384ca3556a35d2099cfc9ecc901bc8c21f8577abf216b7e1ed65d041d5fcefcacea821b38de568c1721393159d6063580c41455e2867b68a9cd96b5bcd825ce9aef45792996384fcb1d8d3f592fa3f43ace3658eebdacb2a34ac2eec1f206199244c685e7c71c564cc40a9af3a63bb39f2bc7446433eb64e62db570784e39684a4b9bccc76a1470baf42420de10140488c6d249f687c3bd3ec5f1a5d683d3c2d5b4d6608c525f74a4e66a13ec8098198890e851eaab49d7d7f7eaf1880dcb6398be911da4a77ea137275202c2af348fc4062f99632bf393cda2c277d81728de664ed6bf25f1b24a468fe90aac3d9a1b9fa697e4f6c00a56e6134b1ee42a393f223e0846bef47d9732c527f39fb077eca320fe6b898bb0ce402607636628afda7d872c0a8b811c6ee4f4bdf4407ae895011ceac23ca5827b5f9dab1f3c5eb9931d97056297a0ca0107afb091cfa010d5fa9bb1913a3fb2df0dcef5e66bf7b6752260b7efb23011ed15493d635dd34b7b5576b8e2551332f3ab2e0498fd514ca924e7b4786f234895efafcf6c7d1b1c8b9c086d1c99c2616827c6a6193fa019c05f94a18018062104f32a046744db01f3322d2c70c12adbd47e4870a2b5fc886da67431f27e48e7f7f4dd014f6c309fbbeb3b93516402180966f68f19d2ff8933a3d56851e3f40352c819614084690069434885f26105c7efca1595972a9b52208b5dff59eaa744fdaa058c419d57fdd72ec7cad332f013d4c3719708a4310577137528d992e2947651c8693b4d722c2a508f46ec92790b35445fd6148fe030992b42e6e2b107b5df852e187028714fe74b8850a56c1d1df4d13d91e2376f564626baec666b7ffb422736d1bdc31401b559c1f7a1520c89dc30345301167b6be1d665697319eafeb28ba8cf8652f479417dde454303aebe5662a6dbf3fafd5f9ef30e3489ecb9e25b5c72228149f68e72646c11d69679cd7df596f5c119cc7be54247335abd242f4f5fa87b18b4776c6bd014d0af117fa9d80e894911363367b5bd35164f61c703bd31fe93afb89e799a2c1c1832a6e7854ae83b14ca1811e68d70fb3e926cdd2276fc9f1db32ccfdb9b132a25b6de1b463ae60c9d4d95cab0acacb5278efab5f920d280220a1f8b5738f634ad9d327266b96b354dd915e035dc2fd0e74af0f7f7d0c107cbc365db5edc758dbe8e3eaacc815fb0bbfd069560133bfd9a2b18454e67d49a9f35881e1dfadf8150ace1835bb05b59a1c050de0780106dfa574d2306239cd15a641831dd9547d98eb2156cbb4b4afa7f6ea0b66aa55723ef",
hex"ef2357a56ab6a06e7ffa4a4bbb6c15b28ed94795dd3118645ad19c2306234d57fa6d108007de50c0a1595bb05b83e1ac5081dffa1d1e88359f9ad4674e45182b9afd3b13609506fdbbb05f81ccaa3e8ebe8d75dc5edb65c3cb07c1d0f7f7f04ae7d02fdc35e015d94d356bb96672329dad34f638578b1f0a2280d220f9b5fa8e27b5acacb0ca954d9d0ce63a461bdeb6252a139bdbcf2cb31d9ffc7622dd6c923efb708de61118ca143be84a85e7a632181c2c9a799eb8af93fe31bd03c7614f1635bdb56733361149890ed8a97f11afd014d06b6c77b4187ba85f4f2f24bd5a334742e57bcc19c1f596f57dcd7996d6116c64728ef6498122725c5be2b9ec89340ef39e5ffdfaf3dba66256beae034345de7d4179f45286cfa88bb2feea19736965d6e16b7b1601533430dc890c52a1f7c159b50114c3bdd1362742fb7f6b66ecba2646566f37e2913dd1f41d1d6ca550884be74f712870182e85dfb507b1e2e6422b9930e08f14d65f44350b7992ec468f502a2c724d3b69c8517694e292d9287513770531a4089771c3d413f032d3cac72ed7fd579d418c05aafd44a7ea59ff5d8b20529b2a979515caefc70561f285484369006984406119c85203f4e35168d5a33389ffd2198ff6660918026451933bebbb9f306c4f01ddf4f7e7487ef23174a66d88fcb5a270487ed4db2ac1702c2d32f301db4467042af30421061880a1945fc019a03f19a6c6276861c2991c6d089c8b1c1b7d6ccfafef9548236f78b4e724a94c51fd98042eabf3321355e2b876557b4bd35d633d4915ed1130b2efb7602275b6f76be6f5ce0ddfb23f3a91b19bfad510a0cf91b0af0701caa0976205971d93b95e3c1fab9d5f7b82a53cc2ea1c0195e87a40f4bdf4e46e1c818b0a2c877ddaaf286663072640ceb08b896bfe20a3ec77b09ff327c532977df4be46083e223f392ae41e4b13e6560ac0f6e497a69f1b9a3dac0ae98f464ab2f125bfd64e66de2817d877c2a2cd93f32b63992f06c48f34afc202522737a17ea7a41d91be9863cb0d88f1eaf7d7d749abea51e89088199880ec136ae6a4745f528c60d6b4d5c2d383d6a5f1c53ebdc387f649d2c688041410de2024f4ba70146ac7cc9b4b4a68394e7870b52de664eb336444c72b9fb33ba6f39a0ac44c561cc7e785c644921906f2c1eec24aa3b2acbdee5836ce3af4a32f593f8d1dcb4f3896297945ef9ace25d8bcb596cda9687b86e25514c4803506d659313921178c56de381b82eaacfcce5f1d045dd61e7e6b21bf7a57f8218cbc01c9ecc9cf99205da35635ca84931e051e2d107c1975d86d46e3501f41dad190a5902c6ca2bee1abb3c687c500add833c0468ce77c01047928ff8330b0bc8b663a443cbfae419cba249176725d04c053b70c0432dcf714f2dd98c50cb0bcc9fb34900f245ce5947e857e7c7d6119b1a320057844b363a113eece49bd3837414d73f4684865a9e3b863f0cf7e053d845b2430c998a91b741053da17ec44c10991e4cfc2c3e6ae7e71bbd9d8b1f13009fc909ffade6167a836971ba460f98902d4bec4731711b219bb0a828a61eb05d06aceb4be92b0d6031922dd3b55eb9c43c267a4d500809d9844f457c85f5d025d2581153576e16a61f070bc4f587425992ffc73ac4ffe11084e788d8107f504d4829c293c0e4aa1e2dbc80e262edb043eb74260da5c6c"
);
_reverseCase(
hex"3e96bfbaa6452bb0a992991378058c2f3c9df51ae3f8849f864eff69318454ffe96edfa41975fa27b3015073eeefcd74374b580dc9e484254ec4b9748a0ba2f1f1ad861a8a1336881b7ae1c753bf7f7b0ff90e4702cff288d80005421743c52f518dee33aeed1205b9245121eb75ee05d5a500df8565ec17a7c397dae202",
hex"02e2da97c3a717ec6585df00a5d505ee75eb215124b90512edae33ee8d512fc54317420500d888f2cf02470ef90f7b7fbf53c7e17a1b8836138a1a86adf1f1a20b8a74b9c44e2584e4c90d584b3774cdefee735001b327fa7519a4df6ee9ff54843169ff4e869f84f8e31af59d3c2f8c0578139992a9b02b45a6babf963e"
);
_reverseCase(
hex"54928798cafa59bc86b7139ad42ba4dce1f9b48447c1015800f161c3937a6ac89623f3d661475359be59e9d8c9803eb00168c37fb1d038d05b8383d42945d7fc2a83c6c59db7eb129feb475498d56123df3b72f3e4b68f12a6bc3df8303d0c742a3acb614b4032a86a11e1834abb2b3db12bdcd8c8c3996716e64ba4e05ded6f18bed55b8816d37ebcdd7d18352ccade206a2a8444bf12e6af93a4f56c4bba8a488cb31ea5332558d9215a86fa83fa8c7c7e35977e3e3ba6152d71ef259ff2e4abafb4ff916bdaf2f0f3fd0abfcfbb4b2913ffff9b919c7dbfa743ab43529a62225bf9cc610010ff4b2146118392840776b4ba220675567e914b97578d31878124d4f497da60f0114ffbc847f29ab012b16da107864b2ba3602eefabe8ce685de8377117ec804492eff604ba05195fae20d58921f6ff7572541addf7f49ad6ea1e9c6bf8b399962f09ea1c200fa0cd0cea41c03812871c80b14afbd86d1a846383dc22ee7d26da28ad3376fb3a94f3ad4cfd946830e88aba5ffa4b93d92aacc49905a861526bfa7c0f26edd560f3208a7ecf230dfa1677afe4dbad512f7fa0e39da7c2e419d8f1ce34ee27029304225838460fbec77e732e4c5db76ca2916ee73ec7ad1572d23b4c85dd304f5bf3b542989a8650322bbecff6b03553891d9822a3e530970f2d7788b8cd83c8973ec95b8dddac55ddc9daf4f0e138e722760398658760fce953c89d085b66338f7a199aebd78188dee37feee32caf60919194499d110b756c9f9389d183201c9272fb1e571efc45e416b0cefeace896511e571c5081bad772bce1854e8afe1d761882fcedd1bc0e66a131865e6957ff27efaaed9d25acf9d20a88b8adeadbcc100554e17f10352d73464c76bdf9bec0a1514780e1",
hex"e1804751a1c0bef9bd764c46732d35107fe1540510ccdbeaadb8880ad2f9ac259dedaaef27ff57695e8631a1660ebcd1edfc8218761dfe8a4e85e1bc72d7ba81501c571e5196e8acfeceb016e445fc1e571efb72921c2083d189939f6c750b119d4994919160af2ce3ee7fe3de8881d7eb9a197a8f33665b089dc853e9fc60876598037622e738e1f0f4dac9dd55acdd8d5bc93e97c883cdb888772d0f9730e5a322981d895335b0f6cfbe2b3250869a9842b5f35b4f30dd854c3bd27215adc73ee76e91a26cb75d4c2e737ec7be0f4638582204930227ee34cef1d819e4c2a79de3a07f2f51addbe4af7716fa0d23cf7e8a20f360d5ed260f7cfa6b5261a80599c4ac2ad9934bfa5fba8ae8306894fd4cadf3943afb7633ad28da267dee22dc8363841a6dd8fb4ab1801c871238c041ea0ccda00f201cea092f9699b3f86b9c1eead69af4f7dd1a547275fff62189d520ae5f1905ba04f6ef924480ec177137e85d68cee8abef2e60a32b4b8607a16db112b09af247c8fb4f11f060da97f4d4248187318d57974b917e56750622bab476078492831146214bff100061ccf95b22629a5243ab43a7bf7d9c919bffff13294bbbcfbf0afdf3f0f2da6b91ffb4afabe4f29f25ef712d15a63b3e7e97357e7c8cfa83fa865a21d9582533a51eb38c488aba4b6cf5a493afe612bf44842a6a20deca2c35187dddbc7ed316885bd5be186fed5de0a44be6166799c3c8d8dc2bb13d2bbb4a83e1116aa832404b61cb3a2a740c3d30f83dbca6128fb6e4f3723bdf2361d5985447eb9f12ebb79dc5c6832afcd74529d483835bd038d0b17fc36801b03e80c9d8e959be59534761d6f32396c86a7a93c361f1005801c14784b4f9e1dca42bd49a13b786bc59faca98879254"
);
_reverseCase(
hex"67e8a097e20dbdb2a279ef9d0ec7037c49279da329fc3d87d8431aeb76a87bfd7240cc743d67444e5a4c6b45bd012a61c8c7f3f2ec2cbd5bb489fd6a184f99883ad1b0da1bf59a11ed080b0325d6e4d79f47d1c7d00acab5200f80f106db64f6f28975c9a142d46622c832a81dfc494240c9f5d722c396f7f6a190f56a42c7d377e7e7a19132e57959ac12e37e0e84d51810cc791fec511e54a181b05e758d014757ec69c3bcc172805fbaf23ce0c351115c94bf884c8d594433f9f8a3ceaae56a267ba0ae7959a57372068c906cb3fb20695741f520e5e959c9ce89145ba50cbd697d33c208a6165e51a603dff9ad6dc9d4f969045ce8d8b2b008fa97868532c58b14b0ddd857a8b8c752c37f2068d662540b1ae0e5a8d3b0e76513246cc277252d8b6cec4315b504d9477ee6fc7ab31700e88ff856b8ed3a5a9d0298407bc967929220b03a02759993501cd991723836bfa2907043a8ae87db5341220a739720f79f14f9b6ac41ef2d9d6683d6c5c8eebd0eaf769756ed5b2ea196a27aef96bcbd3b3782a15e9fa3f294c3f9cfeae485f7a515093c67c798dcbfd9e5d8562b851f14de92038945f4d369c40013c8cc5081e3cccf82f4f2076fb1e0ec6489f8dee227f700195a71348342f8de46b0b9c99f0567fd2e9ec090c7d18b58fd09a24d37a949c83ac27480ae3793eaee8f4b85e67d8ce94302f6c4d9a3ef89dfeb2732b4b4a267405b217fd4f4e05f00e43715f3c28d651e49a4c476dbb8baa30246286b2bf847c411cdfb684b93ee6e68a32c49fd6fee7fde7891f3a72e58d55b01e3947fda250cbbe98f3d2eb92a46f0b3d8bcdc8bd2ac63dc39bff732be2780aef1072940fd1855b2fb7b6d2495b1e8d0b62aa918fc9105461df315638ab804ecf740963a783bbfd5207020d3d9635cc64dba37c3b0ea6aac1a3ba9a894d1170b93b9419b3b3eeaf392a944768788d0b0c0ef3a6f0e921b7f42b348dc62c4c26018effd7aaf74f15750d66cc015f0b8efb935be1127e7ba74f5a053d883a975cdb6e17c41c78fa17e5796b7bb6c8b7d36b438a51bb9cdf990d3ba23d0252dcdc66cfae6f084bd4f009d293e53a6baf45b",
hex"5bf4baa6533e299d004fbd84f0e6fa6cc6cd2d25d023bad390f9cdb91ba538b4367d8b6cbbb796577ea18fc7417ce1b6cd75a983d853a0f574bae72711be35b9efb8f015c06cd65057f174af7afdef1860c2c462dc48b3427f1b920e6f3aefc0b0d088877644a992f3ea3e3b9b41b9930b17d194a8a93b1aac6aeab0c337ba4dc65c63d9d3207020d5bf3b783a9640f7ec04b88a6315f31d460591fc18a92ab6d0e8b195246d7bfbb25518fd402907f1ae8027be32f7bf39dc63acd28bdcbcd8b3f0462ab92e3d8fe9bb0c25da7f94e3015bd5582ea7f39178de7fee6ffd492ca3686eee934b68fbcd11c447f82b6b284602a3bab8db76c4a4491e658dc2f31537e4005fe0f4d47f215b4067a2b4b43227ebdf89efa3d9c4f60243e98c7de6854b8feeea9337ae8074c23ac849a9374da209fd588bd1c790c09e2efd67059fc9b9b046def8428334715a1900f727e2def88964ece0b16f07f2f482cfcce38150ccc81300c469d3f445890392de141f852b56d8e5d9bfdc98c7673c0915a5f785e4eacff9c394f2a39f5ea182373bbdbc96ef7aa296a12e5bed569776af0ebdeec8c5d683669d2def41acb6f9149ff72097730a224153db87aea8437090a2bf36387291d91c50939975023ab020929267c97b4098029d5a3aedb856f88fe80017b37afce67e47d904b51543ec6c8b2d2577c26c241365e7b0d3a8e5e01a0b5462d668207fc352c7b8a857d8ddb0148bc532858697fa08b0b2d8e85c0469f9d4c96dadf9df03a6515e16a608c2337d69bd0ca55b1489cec959e9e520f541576920fbb36c908c067273a55979aea07b266ae5aacea3f8f93344598d4c88bf945c1151c3e03cf2ba5f8072c1bcc369ec5747018d755eb081a1541e51ec1f79cc1018d5840e7ee312ac5979e53291a1e7e777d3c7426af590a1f6f796c322d7f5c9404249fc1da832c82266d442a1c97589f2f664db06f1800f20b5ca0ad0c7d1479fd7e4d625030b08ed119af51bdab0d13a88994f186afd89b45bbd2cecf2f3c7c8612a01bd456b4c5a4e44673d74cc4072fd7ba876eb1a43d8873dfc29a39d27497c03c70e9def79a2b2bd0de297a0e867"
);
_reverseCase(
hex"8b50ada82d9f109895a08090a591d39ff81a1991e139bc824662c834752add309fb4c2dff51352e61276856373a0aa5e8faff0299cc3893b4a9398364a844ed4a2a4f0b66b81faed7014c4b94433333c3123c86adaca9d9c844d3f43e3a67b0d2482a2c615111080608a5e9456225315eaad590f60b1184018fb7b57e02fdd6532aed2dc2bb7c0c15d28eb7d435d8bb32792335c665ca6fe40d546a64388cf81bbf1abeb743ded5b37a36f074ccbd82d2a4babcf227a5f22577ef0cbe5c25466f2ed7472d384204ca0af1ceb619df79dac56ff1c34d7a3a1e3f03f12ea0df1f7c25b5eeeb2a7bf5d365a0069fd0f364ece6461e934d986ecb1d7641607b3521971f0d554f68e82f1dcac32c780f50d507f32476a8f0796170a7f735ce72cad47ff1877b348a09d494d904755d7724feef18e445ee3e7247907228d5813be8bc354edae350b5cf8be70b8df0234ef6091820468aae0c5fdc3246a53e8b7b936e798dcbdeea3177a9a7c2e3a74cbfa044db7ef5b5c0fb94899fbd19e48b8a0b1e0ed4e218dae2ac8833831a0d64bca2f0c24c0c92d3b459ae3f419fb622cc21d3ecd41c99d841b0843cb923d80317b178cfb47a8fe0ad3f6d280a5003e4dcb20a1e89dd2ffaff53d18717644409af2a2417f3832ec0fb6f7a63216349a5604a6904ad3481940963110091edfefae26676f919000c78138c84bcb6f79a00a1577c160e32de1c0a97d5c2e781b171946f1db5a525349416ebb9274e285a59844f200448e86184418500605a990d8d31f66e232b4740a9dcc91d4842424f5bd8bd7ffd1a2adf7b6ffdfe197ff774be6a1a0aeea55d2d954cad1eede7c9a5a222fecc3b75b7d660d4b8931a1ec8503ba9945011d445f1cc0b2d2f07cbd6ddc93159446fbe7bffd633fcac9d70126f4233c2c549c7a577d18f96a2970090719f1d9065733368bd5fda65e3358c1a08852047472483a521fd1529feff4e36c215d435e900c29cf70230c4cf0634c13c812aaaf626c9d5b08c3f3b9ac0185467dcdc2e4abf8024972b361ff508cab41e43f93611a0a33244f7016694ef50bd26130042a8f002a417d92ef77da665636d1ae702804a94bcd8fe51b623c91406dfdc5f5bd37b11640e94fa277a4874565149e26cf44d47d0199e7f28207d49c41a62b51557a14b1e651a01d91c0721ca6738d01b2d1734d9fb8c37b8e95ee14bdf9ff4aa5461123b0e191a097197f2330e7e1a082b789d1db48acf2f5975b1390d0101ecf03a58a6649f30d20359980ee71e8de195a8c1258968a83ca6b9ac4745890502d4561f5606cf5bef570ec6a3ac50989897bfda8095f421654ce975a052a286b23874dc076e25f09ccd4050928424b2862809acf2b6eb90a15e29a40c4aaedd5c3d238f8fc9d6afc9e9d57852cbda1f1672b71fd34cb3d7024f857da6cd253ae588b20196b531d815c03ea2b606a02bdedb5ed3711dcbbce2c7b0778aa0ce644337c38cc050b63c2d2b702e83f3fd1c7e8875668635d36ca977b7025d2296a33071ace73ed0f14883b3846e5a7adf887af96df0a84b046d0db4410feb3c4617e490445880e9a12bf92ede1da0a470a5e750ae8dc7420159b37582c1c685a3280b0ffeccaecd50f8dc426aebf7872ce26c51b808f068f6916875b387142e4b12a44b2e0cf45a45aae5fc9619649c84dfae7d02d016475a2e08f1cfbee53cc82c57ec80a0a2151a0134daf9f974c8a57bc06b39d0cbbad74e74a6e30f969495b40f365902c9556e25e1bb45b2a2bc57a95f16e0dbda0b9f9e7f4f7a2a7e7de8ca938d479505bd6ed290757cff1fd48850d0dcfa92debcaa8e138d5f57ae11dc8f439fdf57fb0897f85a8564ec9ed90d8677186253e4f6e20b5",
hex"b5206e4f3e25867167d890edc94e56a8857f89b07ff5fd39f4c81de17af5d538e1a8caeb2da9cf0d0d8548fdf1cf570729edd65b5079d438a98cdee7a7a2f7f4e7f9b9a0bd0d6ef1957ac52b2a5bb41b5ee256952c9065f3405b4969f9306e4ae774adbb0c9db306bc578a4c979faf4d13a051210a0ac87ec582cc53eefb1c8fe0a27564012dd0e7fa4dc8499661c95fae5aa445cfe0b2442ab1e44271385b8716698f068f801bc526ce7278bfae26c48d0fd5eccaecffb080325a681c2c58379b152074dce80a755e0a470adae1ed92bf129a0e884504497e61c4b3fe1044dbd046b0840adf96af87f8ada7e546383b88140fed73ce1a07336a29d225707b97ca365d63685687e8c7d13f3fe802b7d2c2630b05cc387c3344e60caa78077b2ccebbdc1137edb5edbd026a602bea035c811d536b19208b58ae53d26cda57f824703dcb34fd712b67f1a1bd2c85579d9efc6a9dfcf838d2c3d5edaac4409ae2150ab96e2bcf9a8062284b42280905d4cc095fe276c04d87236b282a055a97ce5416425f09a8fd7b898909c53a6aec70f5bef56c60f561452d50905874c49a6bca838a9658128c5a19dee871ee809935200df349668aa503cf1e10d090135b97f5f2ac48dbd189b782a0e1e730237f1997a091e1b0231146a54afff9bd14ee958e7bc3b89f4d73d1b2018d73a61c72c0911da051e6b1147a55512ba6419cd40782f2e799017dd444cf269e14654587a477a24fe94016b137bdf5c5fd6d40913c621be58fcd4ba9042870aed1365666da77ef927d412a008f2a043061d20bf54e6916704f24330a1a61933fe441ab8c50ff61b3724902f8abe4c2cd7d468501acb9f3c3085b9d6c62afaa12c8134c63f04c0c2370cf290c905e435d216ce3f4ef9f52d11f523a487274045288a0c158335ea6fdd58b36335706d9f119070970296af9187d577a9c542c3c23f42601d7c9ca3f63fdbfe7fb46941593dc6dbd7cf0d2b2c01c5f441d014599ba0385eca131894b0d667d5bb7c3ec2f225a9a7cdeeed1ca54d9d255eaaea0a1e64b77ff97e1dfffb6f7ada2d1ffd78bbdf5242484d491cc9d0a74b432e2661fd3d890a9050650184418868e4400f24498a585e27492bb6e414953525adbf14619171b782e5c7da9c0e12de360c177150aa0796fcb4bc83881c70090916f6726aeefdf1e09103196401948d34a90a604569a341632a6f7b60fec32387f41a2f29a40447671183df5afffd29de8a120cb4d3e00a580d2f6d30afea847fb8c177b31803d92cb43081b849dc941cd3e1dc22c62fb19f4e39a453b2dc9c0240c2fca4bd6a0313883c82aae8d214eede0b1a0b8489ed1fb9948b90f5c5befb74d04facb743a2e7c9a7a17a3eebddc98e736b9b7e8536a24c3fdc5e0aa6804829160ef3402dfb870bef85c0b35aeed54c38bbe13588d22077924e7e35e448ef1ee4f72d75547904d499da048b37718ff47ad2ce75c737f0a1796078f6a47327f500df580c732acdcf1828ef654d5f0711952b3071664d7b1ec86d934e96164ce4e360ffd69005a365dbfa7b2ee5e5bc2f7f10dea123ff0e3a1a3d7341cff56ac9df79d61eb1cafa04c2084d37274edf26654c2e5cbf07e57225f7a22cfab4b2a2dd8cb4c076fa3375bed3d74ebabf1bb81cf8843a646d540fea65c665c339227b38b5d437deb285dc1c0b72bdcd2ae3265dd2fe0577bfb184018b1600f59adea15532256945e8a6080101115c6a282240d7ba6e3433f4d849c9dcada6ac823313c333344b9c41470edfa816bb6f0a4a2d44e844a3698934a3b89c39c29f0af8f5eaaa07363857612e65213f5dfc2b49f30dd2a7534c8624682bc39e191191af89fd391a59080a09598109f2da8ad508b"
);
_reverseCase(
hex"728dfad8694d64d5277f3ca589225c5259028fb36fe6eecdfcbb4eba97d3a0521bbcec06180bb23c05eda3632312edc66f27fa255d0bf899b8f4921c6b99b49efe8bf7f800086cdee8e082a6734c613b6e629f0ec0aeba5227d4fa7f608356fc4b1fe39dac2ce828d0071afa731da5107847d79d7bb7995ab35a95b0fe06ddaccab1a3ca51994a7fbda16c5beee54bfe3e8eb5e94dfe5935ed7b0740f948c8a10b91f7dc3ffc95d17b7666442fdaae58088a4e634939c7f667d9ebafa0d7cfb450402ac583cf2ed485f62e548a45856b44a9202e2b2d516c65d5ac005102ea2daa1ff9fc3073e197cb5d68bec309817b1ce67b2ddf6064f566a2bd6b070146f0cd9e810ded9b4a9db83c32a9d6c2b866176ec53f8019674069add634bdf44fa41659203be211394263947427eb15d73a904e8696c5112ef3335ed27cc9a044b7bc3669ab4212581b90761d21785dec98d004035eefa736c767b7356978d732fdac6dd21cac959dc844564a6985cc251236868b0b5eb619bd1a71cea6da361a5119dbd381d3fb8a6d2999c438f63a958ca89beaf4704121a97d80aa550ab7c734a2dae2db0546272f5d39ff1b8e2b4ee9a302606eef5abd4102d296c278408328fe038a57b8accda134142328251b59fe6f1484ab782be88a9d0e90662fcab8f0687f8f9a76e8e9e6e0986e935fec1eea03b276f43b2bcd4a8393c6e8ed476962742c4a337591e2611c6fac904970cbfe6a6a3b08baf2364c27c646f582f2efd23fbef65d61aa01acf8c5e3449a3d213313e75c024e26e44500fe35f74a924d6c4a05b0904ef957140a65445b00edb37dda753c3c8b9697a21bf0aa57802489734b816dea17645cc239fc8877889f85a20b3c53b7f8993e39097dde7f750e0295ba0c43467968e5c434942381bc0ae97d52aa504f31c6b84c4cd9c84d98d303b046afe468a5adc14acb51d0fb3e607ce69d3a042c423a2e18a114f393fe9b8b22d3a1907ee20ee06623ffd2e49dd729e0ee1ab9cfa1e514d505368ca38ea5fade56bd0854719a83ce46a95be245a67fe99d71bf12c54f2dac8a69ec5fba5108b7dac74b195b96c641bb9add78233db38bf9aab06c491f4954b0",
hex"b054491f496cb0aaf98bb33d2378dd9abb41c6965b194bc7dab70851ba5fec698aac2d4fc512bf719de97fa645e25ba946ce839a715408bd56defaa58ea38c3605d514e5a1cfb91aeee029d79de4d2ff2366e00ee27e90a1d3228b9bfe93f314a1182e3a422c043a9de67c603efbd051cb4ac1ada568e4af46b003d3984dc8d94c4cb8c6314f50aa527de90abc81239434c4e5687946430cba95020e757fde7d09393e99f8b7533c0ba2859f887788fc39c25c6417ea6d814b7389248057aaf01ba297968b3c3c75da7db3ed005b44650a1457f94e90b0054a6c4d924af735fe0045e4264e025ce71333213d9a44e3c5f8ac01aa615df6be3fd2eff282f546c6274c36f2ba083b6a6afecb704990ac6f1c61e29175334a2c74626947ede8c693834acd2b3bf476b203ea1eec5f936e98e0e6e9e8769a8f7f68f0b8ca2f66900e9d8ae82b78ab84146ffe591b2528231434a1cdacb8578a03fe28834078c296d20241bd5aef6e6002a3e94e2b8e1bff395d2f274605dbe2daa234c7b70a55aa807da9214170f4ea9ba88c953af638c499296d8afbd381d3db19511a36daa6ce711abd19b65e0b8b86361225cc85694a5644c89d95ac1cd26dacfd32d7786935b767c736a7ef5e0304d098ec5d78211d76901b581242ab6936bcb744a0c97cd25e33f32e11c596864e903ad715eb27749463423911e23b205916a44ff4bd34d6ad69406719803fc56e1766b8c2d6a9323cb89d4a9bed0d819ecdf04601076bbda266f56460df2d7be61c7b8109c3be685dcb97e17330fcf91faa2dea025100acd5656c512d2b2e20a9446b85458a542ef685d42ecf83c52a4050b4cfd7a0afebd967f6c73949634e8a0858aeda2f4466767bd195fc3fdcf7910ba1c848f940077bed3559fe4de9b58e3efe4be5ee5b6ca1bd7f4a9951caa3b1caacdd06feb0955ab35a99b77b9dd7477810a51d73fa1a07d028e82cac9de31f4bfc5683607ffad42752baaec00e9f626e3b614c73a682e0e8de6c0800f8f78bfe9eb4996b1c92f4b899f80b5d25fa276fc6ed122363a3ed053cb20b1806ecbc1b52a0d397ba4ebbfccdeee66fb38f0259525c2289a53c7f27d5644d69d8fa8d72"
);
_reverseCase(
hex"d5f26cd4262462b0dd4f032907057520b536a428e5716eaaee385b2b0912d79d438595d872ea06b41bb88f7ce4d71ac611afc6e73a2006e072c076be8bbd48200edc9ab6f50a05615b5ffacc12d53d20a636d69019106cf3148292306e7eef21ae18dad485cf4c4c692ced84e073c98e9dc32e98f9fa67d8325e4928f9b887b78db4ca189bceab24450d5e30a32948c7b613735f812bd81e5c6ae69fbd6968b3554f956a3aa9b1a358db80ae06f50b5e242fae7a00cc251e22923afea406535800ad2f6a6c53e3b458507f89e49f99f27d16687f069cbff30719ee6415560f7003d77ec7762f825a517c858f2ea363afc07bd041ea50916cd32750966fc44ff00fdd5110b547301603b21a8167d964f975a0792955c5c8d8011cbf2ff4ba5190f64ecaf09241a90a215255e70216e6f0521df6a8969393206fb14ff0891fba889bab220a20dba2c3d2019775219b66c91314ddd7e362489840bfd419520eac6549cc98ebaad3d05649c5fab136e2a02b7dbe2547d7cf7781074296cf719253b718b56f98b3ddb54c587b40e56c768f01fa35544a502431f334f68ddae3abbe9c52bc69d9f6075c0b19ad22134c0fe6fa11e2a017146ec587b85cf613bf169be9e817a21ee3bb5c040b094bbc58ec92fcdaae1650b37bdc15ad33cd3e02fb04f643804d3363069268f5a849c349987f776b6cec652781711cf0a7efb3386b0d26ed3c04c55fd0f0065aa2610fa1f856efca3b4012dc9453350f7bea6e694c4863098ada9a4d4a9e40b40905484bb0c5447e2b5fd66e03255c753824b88c7bd2d3ced8d618be950f2b7bf0e1280c245cc644164128a6caac",
hex"accaa628411644c65c240c28e1f07b2b0f95be18d6d8ced3d27b8cb82438755c25036ed65f2b7e44c5b04b480509b4409e4a4d9ada8a0963484c696eea7b0f355394dc12403bcaef56f8a10f61a25a06f0d05fc5043ced260d6b38b3efa7f01c71812765ec6c6b777f9849c349a8f568920663334d8043f604fb023ecd33ad15dc7bb35016aedafc92ec58bc4b090b045cbbe31ea217e8e99b16bf13f65cb887c56e1417a0e211fae60f4c1322ad190b5c07f6d969bc529cbeabe3da8df634f33124504a5435fa018f766ce5407b584cb5ddb3986fb518b7539271cf9642078177cfd74725be7d2ba0e236b1fac54956d0d3aaeb98cc4965ac0e5219d4bf40984862e3d7dd1413c9669b21759701d2c3a2db200a22ab9b88ba1f89f04fb16f20939396a8f61d52f0e61602e75552210aa94192f0ca4ef69051baf42fbf1c01d8c8c5552979a075f964d967811ab203163047b51051dd0ff04fc46f965027d36c9150ea41d07bc0af63a32e8f857c515a822f76c77ed703700f561564ee1907f3bf9c067f68167df2999fe4897f5058b4e3536c6a2fad00585306a4fe3a92221e25cc007aae2f245e0bf506ae80db58a3b1a93a6a954f55b36869bd9fe66a5c1ed82b815f7313b6c74829a3305e0d4524abce9b18cab48db787b8f928495e32d867faf9982ec39d8ec973e084ed2c694c4ccf85d4da18ae21ef7e6e30928214f36c101990d636a6203dd512ccfa5f5b61050af5b69adc0e2048bd8bbe76c072e006203ae7c6af11c61ad7e47c8fb81bb406ea72d89585439dd712092b5b38eeaa6e71e528a436b52075050729034fddb0622426d46cf2d5"
);
_reverseCase(
hex"60af327608cb06976f62b5114937f3ab7f9c86212c3be7a53dbe1115700b7791185cbd9d662cbf523112c54f31c939addf37fd347cfab234c421403af227e6fb142c1d183941f600666c8cced3f711f9aed57b63ba0c2f743351a7a7b6b999a36e18afc1d41553606ce4221589a4e0429510bc2b037c87f2601ce1cb9b2e9060426bef237ffd2b444cb8fc580401787467bd1baba41d4e4d785b5bbf4326b82242becc7ae630e70f2a37b14bba4cf01a26a6217ec57c8924271b086c4c2b696c26fc255adb9c012907595c41520bfb3ca6af2c336516bcebc89a16da5ba806198f6ebc26936c076f0fe274e4b618f877fe60a6c52dc74164c73593e10bbf5811428eeec9ffe5d1f9f57fb773075ea8cf1eea8aa1db2650accfed0f8e2fdce68fa3385992c7ea52fab442f42df9243b2e9b28f633d30f5f0137bd4ab948101e71520b28b536118dce8056d995f631b27357867e8d86e939443b7f7d28562c33395688a08e737ee81f56fe3fc1a88748ebe47174958ccc584d5c272c46d3db0e52e9ca5529ee472d7d27f46af56c45475cfad6a5b5d23dc34518ddbcd68e751feff8d80957f4a62fab8030d43c9282ff185b51391df82a391dd2666f3b6cc2db34887d3c08067c591411c2c4f9b2d0b7178a10dbec4fb46f91f151819d521c65a0c7630ff171948f9981bba9a59e7c723aed06ee790826f19ea9d23fbe052a8e08149ae5233e3e2f9259cdbf5d983cfc802327d8d1261b46b5b84475b779fdd88d9969ebd78210cb2f6c190c1c6cf794019a0ce7f715a3c6de4e3295be84ec1018907bea607e446e5f2911058db54f033b53a818d1ebf73ef5a58f2dee237213cfbb65e816a1685632075bf11fda2a3e60316929b0c2c6facbf638b2051334b258aa821a978548b92fd0dfea537e82061806b49b62763c98266b5398045e85097a285dbcdeae8a4ef8c9f7cdb5",
hex"b5cdf7c9f84e8aaedebc5d287a09855e0498536b26983c76629bb4061806827e53eadfd02fb94885971a82aa58b2341305b238f6cbfac6c2b0296931603e2ada1ff15b07325668a116e865bbcf137223ee2d8fa5f53ef7ebd118a8533b034fb58d0511295f6e447e60ea7b901810ec84be95324edec6a315f7e70c9a0194f76c1c0c196c2fcb1082d7eb69998dd8fd79b77544b8b5461b26d1d8272380fc3c985dbfcd59922f3e3e23e59a14088e2a05be3fd2a99ef1260879ee06ed3a727c9ea5a9bb81998f9471f10f63c7a0651c529d8151f1916fb44fecdb108a17b7d0b2f9c4c21114597c06083c7d8834dbc26c3b6f66d21d392af81d39515b18ff82923cd43080ab2fa6f45709d8f8ef1f758ed6bcdd1845c33dd2b5a5d6fa5c47456cf56af4277d2d47ee2955cae9520edbd3462c275c4d58cc8c957471e4eb4887a8c13ffe561fe87e738ea0885639332c56287d7f3b4439e9868d7e865773b231f695d95680ce8d1136b5280b52711e1048b94abd37015f0fd333f6289b2e3b24f92df442b4fa52eac7925938a38fe6dc2f8e0fedcfac5026dba18aea1ecfa85e0773b77ff5f9d1e5ffc9ee8e421158bf0be19335c76441c72dc5a660fe77f818b6e474e20f6f076c9326bc6e8f1906a85bda169ac8ebbc1665332cafa63cfb0b52415c590729019cdb5a25fc266c692b4c6c081b2724897cc57e21a6261af04cba4bb1372a0fe730e67accbe4222b82643bf5b5b784d4e1da4ab1bbd677478010458fcb84c442bfd7f23ef6b4260902e9bcbe11c60f2877c032bbc109542e0a4891522e46c605315d4c1af186ea399b9b6a7a75133742f0cba637bd5aef911f7d3ce8c6c6600f64139181d2c14fbe627f23a4021c434b2fa7c34fd37dfad39c9314fc5123152bf2c669dbd5c1891770b701511be3da5e73b2c21869c7fabf3374911b5626f9706cb087632af60"
);
_reverseCase(
hex"c523bc0e87011d3983799cbf517232d9439268e05d7d388dc5a8027c0d6496149ab6e60fbcd34b58e83ed51ae99692b721a72abbf4ce9f4efdf068849ef1ac7e77953d91555357478943b879c6ce657946c899d1761e0b6c92a6295e2c2e8e3f14d26d0836aebfcd1f5985b05e3dc188bc3c8bc2666c50d798412f340f965edf68730073c79564f457375b4dff47d86d4e076d1cc7f21904b893326b61625b8cc3d44b5cb5551936551e99e92350536c9f542a454e441705f00b194277dd5a6531afd90f968d823942168e1508fd797d1ab9638317cd2c42cf0c6f54585b5f45d6ccd13ff6d2df5795610fb31bc71f6dd5b6a3fb09e10d0aa87a4a4989f33fabd6e87c6f62450d7798535058f423e053139c66b0ac522789002ce53c28deb910c5782fa3a8a1d830d6e6e59c328480c0366c0e7ef951a2b797c3945e0a54e830d2b8068742fcff9141d75a0ca8c7f72430e37fda43ed1a6c3c8f67d330b6b08249e596d9704a14a8377ebbbf941cc9d5f7a9ea722337251ef08e4abda27e3779d32bc1ed91ea29e64ef5515c39",
hex"395c51f54ee629ea91edc12bd379377ea2bd4a8ef01e25372372eaa9f7d5c91c94bfbb7e37a8144a70d996e54982b0b630d3678f3c6c1aed43da7fe33024f7c7a80c5ad74191fffc428706b8d230e8540a5e94c397b7a251f97e0e6c36c08084329ce5e6d630d8a1a8a32f78c510b9de283ce52c00892752acb0669c1353e023f458505398770d45626f7ce8d6ab3ff389494a7aa80a0de109fba3b6d56d1fc71bb30f619557dfd2f63fd1ccd6455f5b58546f0ccf422ccd178363b91a7d79fd08158e164239828d960fd9af31655add7742190bf00517444e452a549f6c535023e9991e55361955b55c4bd4c38c5b62616b3293b80419f2c71c6d074e6dd847ff4d5b3757f46495c773007368df5e960f342f4198d7506c66c28b3cbc88c13d5eb085591fcdbfae36086dd2143f8e2e2c5e29a6926c0b1e76d199c8467965cec679b8438947575355913d95777eacf19e8468f0fd4e9fcef4bb2aa721b79296e91ad53ee8584bd3bc0fe6b69a1496640d7c02a8c58d387d5de0689243d9327251bf9c7983391d01870ebc23c5"
);
_reverseCase(
hex"102e204990fee6dfe0bbbc05783da595193669a66e6f6b74cef0cb5123522e8af3f8ca732ea1f9a9cff8ec89aa97d2bdcbd0d1f1751477c36899d76cd32c670527e8bdca6c68080ef5a43a386d8b361d4642e1e86e1e75f07bec1a63b7313a3af667546510a784c801e32423757003de4306011b4b26f289efcbd0afb757e0c8db2851f8d89764f2f24326208d708fcc67a61d05df75d332113f1f1e202e810eda737a9bc901a79c3846414fb356143ecc8710781057a118be3057ae5a9a366126dc4c0166f0c29762eaa1c168fb340c577debb9f407911fcf242eb768ee1a88e489bfd4a4a1254b6b9c2d3b2cdbc48a7e4ba76c1c84bcd96b899b36e423742a3d544f2e1fe6bd8e792a74b1e8e32ebb266ab687a943cab82482bb50e0d4b4e3d44d8f1222639045462a39a779e82f4986b950779fe0f72498700415ab2aae60a36f19beac730e365da08a47049fe09bf8df5b6727e26dfd4a1a2c2b336d6e1d5d6f459747de9973ad964ecefbf52a9d9f3d8c93a47ac65df79c0d17236e176712c267eb673fae4a6c0150596438720e6fbc1886419b40a5de216781ac0c05a67b17414a0a76a98df273567e92eb7dbd0c72b6af80807bdf09c6116bb2f60a09d8a4fdb1036d28390954f99219345055f040eed22457c8daf8c8fc17ed93ff8368f2c458304b8693bab9ba691c96abbf824347ce6a60196b9975d9caf09db9097f161d83267737c37204174d61a5058f66",
hex"668f05a5614d170472c3377726831d167f09b99df0cad975996b19606ace474382bfab961c69bab9ba93864b3058c4f26883ff93ed17fcc8f8dac85724d2ee40f05550341992f9540939286d03b1fda4d8090af6b26b11c609df7b8080afb6720cbd7deb927e5673f28da9760a4a41177ba6050cac816721dea5409b418618bc6f0e7238645950016c4aae3f67eb67c21267176e23170d9cf75dc67aa4938c3d9f9d2af5fbce4e96ad7399de4797456f5d1d6e6d332b2c1a4afd6de227675bdff89be09f04478aa05d360e73acbe196fa360ae2aab1504709824f7e09f7750b986492fe879a7392a4645906322128f4dd4e3b4d4e050bb8224b8ca43a987b66a26bb2ee3e8b1742a798ebde61f2e4f543d2a7423e4369b896bd9bc841c6ca74b7e8ac4db2c3b2d9c6b4b25a1a4d4bf89e4881aee68b72e24cf1f9107f4b9eb7d570c34fb68c1a1ea6297c2f066014cdc2661369a5aae5730be18a15710781087cc3e1456b34f4146389ca701c99b7a73da0e812e201e1f3f1132d375df051da667cc8f708d202643f2f26497d8f85128dbc8e057b7afd0cbef89f2264b1b010643de0370752324e301c884a710655467f63a3a31b7631aec7bf0751e6ee8e142461d368b6d383aa4f50e08686ccabde82705672cd36cd79968c3771475f1d1d0cbbdd297aa89ecf8cfa9f9a12e73caf8f38a2e522351cbf0ce746b6f6ea669361995a53d7805bcbbe0dfe6fe9049202e10"
);
_reverseCase(
hex"c57dcf2b3c9687021372b3680dc8d71f6c30947b73858d8a5c374c71b3f0f2acf9744ec0732242cc779670bdce",
hex"cebd709677cc422273c04e74f9acf2f0b3714c375c8a8d85737b94306c1fd7c80d68b372130287963c2bcf7dc5"
);
_reverseCase(
hex"7565442dcc234b3ac8d685e3fef93141f8ab1980a91c659a16e58c55f20ed74881611f3243c96395ebc40eaaf35bdcc705fd1b0ac49205d8ec91da1324635f998f33df032ad884b7a5fc1f64f1ec48cf40",
hex"40cf48ecf1641ffca5b784d82a03df338f995f632413da91ecd80592c40a1bfd05c7dc5bf3aa0ec4eb9563c943321f618148d70ef2558ce5169a651ca98019abf84131f9fee385d6c83a4b23cc2d446575"
);
_reverseCase(
hex"039f12e8dc42d05cbd4dd4fb885b28e75115e54c72fb70910d70af14fe18c2227cf56d70a43b8a987e06c4c11a2989ec32ad54e959b6d5370ae0d5b4b7e37a3c38f4d4af36e8129cfa2a14aa62d42ef6e0d3e1aee97a88d9a5bc7e013140e2e262a407824edc1b26a402633153fe17cb7397de1b84b286807082ffcb4fb380f451b5939010eae131a11ebd725f85f2d5ff4c7b1a58eae1b27086fa851037c8f515572b41a56b9077dba87f2c3cd441ccb195b4c5fd68da0aa79aa818e1b3ecd379ffdafa6325a68adf8b165173d6b02ac2deda561b3fa370332d3bc431bb92e75d92a55169f6f1",
hex"f1f66951a5925de792bb31c43b2d3370a33f1b56dadec22ab0d67351168bdf8aa62563fadaff79d3ecb3e118a89aa70ada68fdc5b495b1cc41d43c2c7fa8db77906ba5412b5715f5c8371085fa8670b2e1ea581a7b4cffd5f2855f72bd1ea131e1ea109093b551f480b34fcbff82708086b2841bde9773cb17fe53316302a4261bdc4e8207a462e2e24031017ebca5d9887ae9aee1d3e0f62ed462aa142afa9c12e836afd4f4383c7ae3b7b4d5e00a37d5b659e954ad32ec89291ac1c4067e988a3ba4706df57c22c218fe14af700d9170fb724ce51551e7285b88fbd44dbd5cd042dce8129f03"
);
_reverseCase(
hex"870c7c0f9d743feeb47f211311982711d82374e2eac7af8dcabb035ff3425d6b366a6e21516988d45f00e7721f79b9f8382325fd31dc45945cad92b5f8f2c09b527786efcc6078b9afb2b9bd5e5290813ad099e21d8e2cfd412925a153a15d8945d9c283ad46bd57e13da3f838c8777535df76256a0bd365d22eff3d7a9001c01a79c38fbf32519129827c052905fbeeb2ae2d777db02ab39e1bfaff1234ca85e61eda0ceba96f985dfd2648137b5bee1d5a40cd0c9c4ca07d099ad02eea2644c089c5b07894b448473cbbeaa3a475b9f495209e40d52c0611a26bf8b97013ffcb512f2e3efd58c93b5164869e32a634b19fb9057a3fad9130dc415e84e3b13eb6f9f21c10864092ff5c62c30268f50315ef6691f0dec3bae1fb75954e1cceac6de86e5c28b894f8686d36b3bcff1d9028c085f174d93759",
hex"5937d974f185c028901dffbcb3366d68f894b8285c6ee86dacce1c4e9575fbe1bac3def09166ef1503f56802c3625cff924086101cf2f9b63eb1e3845e41dc3091ad3f7a05b99fb134a6329e8664513bc958fd3e2e2f51cbff1370b9f86ba211062cd5409e2095f4b975a4a3eabb3c4748b49478b0c589c04426ea2ed09a097da04c9c0ccd405a1dee5b7b134826fd5d986fa9eb0cda1ee685ca3412fffa1b9eb32ab07d772daeb2eefb0529057c8229915132bf8fc3791ac001907a3dff2ed265d30b6a2576df357577c838f8a33de157bd46ad83c2d945895da153a1252941fd2c8e1de299d03a8190525ebdb9b2afb97860ccef8677529bc0f2f8b592ad5c9445dc31fd252338f8b9791f72e7005fd4886951216e6a366b5d42f35f03bbca8dafc7eae27423d81127981113217fb4ee3f749d0f7c0c87"
);
_reverseCase(
hex"96e9e89801ea6fa720313404c6095d3c788173bc4b27769ecf9ec10b710c8c2acdb51ebf7c6dad21e1b1de315defc3c02d9846e48b16e24680af0fb8b6d1b3c6145dc7eefaab5ba5225c7de13e79e2e66f83f8859c371d1685d63ebe06923410299f00f31fc8051ed92fa4830a63856bf3ef92802c6b9464e557a475586a4761cab9324e477838eb996ea8c7b05aee4af5e6de1f7a4c239cf2f8c4df17980ec8ccc61a0b9192c48d75704069635cae696c419012d52296141a0fd42fda86287f82b505852357cf71bb0ff295e1122bb0c7f2cd1cb01a656a1587eff34f9f7fa8b2d17461b3aa0b7a89526cd68cd68b1dcc65d14dc52ddaa43af8da66931b545fcb452717489461e262c84026e78e69",
hex"698ee72640c862e2619448172745cb5f541b9366daf83aa4da2dc54dd165cc1d8bd68cd66c52897a0baab36174d1b2a87f9f4ff3ef87156a651ab01ccdf2c7b02b12e195f20fbb71cf57238505b5827f2886da2fd40f1a149622d51290416c69ae5c63694070758dc492910b1ac6ccc80e9817dfc4f8f29c234c7a1fdee6f54aee5ab0c7a86e99eb3878474e32b9ca61476a5875a457e564946b2c8092eff36b85630a83a42fd91e05c81ff3009f2910349206be3ed685161d379c85f8836fe6e2793ee17d5c22a55babfaeec75d14c6b3d1b6b80faf8046e2168be446982dc0c3ef5d31deb1e121ad6d7cbf1eb5cd2a8c0c710bc19ecf9e76274bbc7381783c5d09c604343120a76fea0198e8e996"
);
_reverseCase(
hex"5f4328a642984c1d76e6c79da4e1929555d545b9132ef08f2e8e9aeead7e4db09336a6f957e751821d267b9c18b38057d16a8d0b084e73f0af8bb26f44ac5fbe50af20a40aec59d1ad34a9e6effa7a4b8323c442c02399670681bfd4725807b273c5aae27dee2fb271add21a2cf370eb968d2fe6aa97a88cbf8b0e5f11a56922936d30ff73012029eaf82a35c0453cb567b8e7676f320f87b44bde13a2b6504984646f455474702dcfe8f998844a7f6c8f24f6371c637b02419416610cd9012c879195bf99e68da11a5a376f9deb1d8e62fe4528f0600547508f6d0f2e15b20eb06bff5e656cef33fb76ff5c2ffddaff176d891d6e43325a157398f30c62181f507c5e24cf082ad084dbcf4350a07abe69fcd8e60c2c401ee69b322abebeb16a09f10ee76edda593b4c853f38c9bca16d743f487d042ba647d1ed7bacbe647153460286cd2ed60d4627c9b2642be1385df6511491c3f631674e771a66bacd547b25730a6972c33cfde416870dade386be394cc29c3f6f9ecb5ae88f02b690b810ffa09efa06f16eb4a3ff8a7d4467b2536983128398ac7db049bd618ee52ca56d6407f89aea53b2a059c75876bb82e74d50e89baff5406338447b831b47fe15d2c5116a8e1a9a13b",
hex"3ba1a9e1a816512c5de17fb431b84784330654ffba890ed5742eb86b87759c052a3ba5ae897f40d656ca52ee18d69b04dbc78a3928319836257b46d4a7f83f4aeb166fa0ef09fa0f810b692bf088aeb5ecf9f6c329cc94e36b38deda706841decf332c97a63057b247d5ac6ba671e77416633f1c491165df8513be42269b7c62d460edd26c2860341547e6cbbad71e7d64ba42d087f443d716ca9b8cf353c8b493a5dd6ee70ef1096ab1bebe2a329be61e402c0ce6d8fc69be7aa05043cfdb84d02a08cf245e7c501f18620cf39873155a32436e1d896d17ffdafd2f5cff76fb33ef6c655eff6bb00eb2152e0f6d8f50470560f02845fe628e1deb9d6f375a1aa18de699bf9591872c01d90c61169441027b631c37f6248f6c7f4a8498f9e8cf2d707454456f64844950b6a213de4bb4870f326f67e7b867b53c45c0352af8ea29200173ff306d932269a5115f0e8bbf8ca897aae62f8d96eb70f32c1ad2ad71b22fee7de2aac573b2075872d4bf8106679923c042c423834b7afaefe6a934add159ec0aa420af50be5fac446fb28baff0734e080b8d6ad15780b3189c7b261d8251e757f9a63693b04d7eadee9a8e2e8ff02e13b945d5559592e1a49dc7e6761d4c9842a628435f"
);
_reverseCase(
hex"d47a2b19d363535c401fb7b71993690968ced2c7e08a916effc4c4f7847c688133a8d28bd336c392f2a1840716e784a2b511f2d940134c2dda94f087b33c936cb333534efc617edf37754628648c8191f0a7ec6bdbd17aee25eb60ce9712fa486c563abeeebd7a95c4adf01d389eacec1c254f4f1f146532a41eb9d676bd668ac29515456513d99e9d59f3c318d03677c3c4a8359469c5f182d2cee764555b9873b513fdc848b67fb208283fb7dd6c50697de7e18290a3c344043cdb751d1ea66a718540a1dbf10cfe6622077cb2a41406645b1efee71095e0bbfb61aebf3c0c4f21c5eb4a28b23f5078ac3720fff16deb893f49cb5af4747859db8abbfdbfcaeec59e7fbefdccad29b9fef85f649bc3a49d020f2052a6a7052601c526ba25577308f5479bc3b19876e0603f579c2a8cb460aa25814111cc3eaf2283e0308425335794af227fc880303d6b97ae50bff0cb801831c22cee7d3c8d84f46ced3a61a5aafed620d68ea69821275f88a2917780be8e3318b31fa7156db5ac409cdcc8f21199daaa604b14aa29c6827b16ed8b6c6d66e1732c9b59c0681dd4f4aeeca389f6c65706b3abb01962debc03dfbacb2dd11a4907e9312193bc84c2e8e8e6aeee37f4ba93d3aeb4b9885737b4c3302634a2553cf3529e46edbdf1ab3083ff480db27b4b8f50a156643dfdb8e9a992a55451b959fdc7e49d8bcd0aab92b9ea86c94f2407a515cf51f4f6d21a30d30d54fd35d50e789bc8f648cb24370268f22428ccb2b989394d6ad7ae27b7769f336fd5c4705e615fe30d3111404f44c3923bba0873ba5c29c9f17a950bc5e23f14613c81c1254ffb9c26c6c60e3c5f9cd55ce2128be8b398b75326fc50c4b59e2398d4b21b42b13919de6ff89900425e23cde6e6a825b73831951e674ea8b8bc8ccdcf698661291dd63640cadfc4bf90ac4f126547bd8eb8e9b00d216fe491b4bc7903b35388f1821281fac6bfdc313f816150d6a2d75547de32fc50312216828616ae864b0294aa09cff445b0bdb291e7eee082ac6ad84d03ea2a9c523b722a627a31fa95046ab1c4fbbcdac43a153e",
hex"3e153ac4dabcfbc4b16a0495fa317a622a723b529c2aea034dd86aac82e0eee791b2bdb045f4cf09aa94024b86ae16868216223150fc32de4755d7a2d65061813f31dcbfc6fa811282f18853b30379bcb491e46f210db0e9b88ebd4765124fac90bfc4dfca4036d61d29618669cfcd8cbcb8a84e671e953138b725a8e6e6cd235e420099f86fde1939b1421bb2d498239eb5c450fc2653b798b3e88b12e25cd59c5f3c0ec6c6269cfb4f25c1813c61143fe2c50b957af1c9295cba7308ba3b92c3444f4011310de35f615e70c4d56f339f76b727aed76a4d3989b9b2cc2824f268023724cb48f6c89b780ed535fd540dd3301ad2f6f451cf15a507244fc986eab992ab0acd8b9de4c7fd59b95154a592a9e9b8fd3d6456a1508f4b7bb20d48ff8330abf1bded469e52f33c55a2342630c3b4375788b9b4aed393baf437eeaee6e8e8c284bc932131e907491ad12dcbbadf03bcde6219b0abb30657c6f689a3ecaef4d41d68c0599b2c73e1666d6c8bed167b82c629aa144b60aada9911f2c8dc9c40acb56d15a71fb318338ebe807791a2885f272198a68ed620d6feaaa5613aed6cf4848d3c7dee2cc2311880cbf0bf50ae976b3d3080c87f22af945733258430e08322af3ecc11418125aa60b48c2a9c573f60e07698b1c39b47f508735725ba26c5012605a7a652200f029da4c39b645ff8feb929adccfdbe7f9ec5eecabffdbb8adb597874f45acb493f89eb6df1ff2037ac78503fb2284aebc5214f0c3cbfae61fbbbe09510e7fe1e5b640614a4b27c072266fe0cf1dba14085716aa61e1d75db3c0444c3a39082e1e77d69506cddb73f2808b27fb648c8fd13b573985b5564e7ced282f1c5699435a8c4c37736d018c3f3599d9ed91365451595c28a66bd76d6b91ea43265141f4f4f251cecac9e381df0adc4957abdeebe3a566c48fa1297ce60eb25ee7ad1db6beca7f091818c6428467537df7e61fc4e5333b36c933cb387f094da2d4c1340d9f211b5a284e7160784a1f292c336d38bd2a83381687c84f7c4c4ff6e918ae0c7d2ce6809699319b7b71f405c5363d3192b7ad4"
);
_reverseCase(
hex"56a5d87af4044b762bb533867b7261e20c38480c8becaf00e418daf8d6c0466d028fd4506b736021c4b30fbd13a21a401540d34402d5f939ca7234021e3f51b2f3af7a0028991a5e5c0b22935964953bd9a4601a246b6e0388cd41f7cca322bc40c9254f031a8727e902d99f9093e4b05059f6c4d07dd0194cdeee857a948a774bd88e5c8b2649aedb863e2e15542f63ecc6111a36f26c7eea01b31f6b6ab67091e285956a292dbe62051c9a091b7b4f0fd530f8842b068d7e3d3b4c029f16787aa07de62d62f5f98115c98253d0b5dbb6528177477662b405f66091280bd3c9b9516e2b47ddc8fb1a2305956dbfe422bc01891b9c1d45e3ad876e0e3eb4bd6d5d02d586010971ba4a3c129bf6cddf48dcd46cbead2ee80e61349464c4ba4fc698a984815eb77578ffa18adaf8f3edac3155dcc7641e9d11985578878c0c9e762e8ab5d1361e247d5f5b68c1a9ffa1346a3c87030771d46456d5c68ae66186d632926fbdc684ac48fb1391cc461015b4f98d6c886aab008b9417dcfd2f20650702589c311fe7d23102782b266235904c53a3094c74285d27bc9e9e0527e2c3b9ad37f82ae4bc1042838712063018deb1b82e3760bc9cce8d0fd008a0dd082d31f45c11d01154667a8ffa93fb0c8746ddfc87197d6932bff4edffd95e88647a4158467c8e00f84d819d2326b1a24826b83e8c2ee395c5ce4395ffdd4e2d27cd839b8a9c89b967dfa2d43d401d575ef854bf711a785a81dfcd3e1c2be7e6a0e0480840c2042769775bc9309ba3892237529eb5433ad4e10ff7fb9e8e31d5f95079cfe58f19aa2fc9fa4373e5f6a17288ac8093e29b5d474f1feb40d162acd0f6c9d402dc0b7742b0c98063635e9c5c3c0639c384ac5052f0c8a8701027ba4f38a1594f8ffb8b73e79f40b1405a8c90fa11fafd3541d7c1b5d59141f584b702e912504c745d7d7491ab29678c114bfb2820040ee92a96dc415c6f08fca344f5abcf8c1cff159267906a7cb16718b0bfe241907c9e1d0b816417d50ad40946f959fc627daf2699a7a8912eeccbd7b5c97ff7a1eee912791dabc12e0d3016da2bad0ce0af258dd2788651ac2d9ab3cb81ef43b9ffd023b8389c1d4c49ac55d862484d2d96ee22f37e3597297a924f93f8efde0654e53f03187b1e495becd969d03d3dfe3bb7e4d60a62e303ec74c4565efaa2ff8f3016591b4d245f3698e8afeb6dd462bb1d0630b3bfffdd5f70fb1b01d8a84b5ec13b70acc7492525f718e23e7b68617a9699166b4d426a63feeb016119dab162b7f2dd5542dba6d272b04dbd9aeb91bde867f9afea673d8cc81a4ab333bd738ad475680f4096f6b01474792d73ad0a615fef4bbaa11be727e5c35407eb75cf6e08ab9c9776bfdf6bf9b827e6d1d8c72eddfac9db1b41f62142fbc72d2417494a03bfafb5485515b32e0af9",
hex"f90a2eb3155548b5afbf034a4917242dc7fb4221f6411bdbc9fadd2ec7d8d1e627b8f96bdfbf76979cab086ecf75eb0754c3e527e71ba1ba4bef5f610aad732d797414b0f696400f6875d48a73bd33b34a1ac88c3d67eaaff967e8bd91eb9abd4db072d2a6db4255ddf2b762b1da196101ebfe636a424d6b1699967a61687b3ee218f7252549c7ac703bc15e4ba8d8011bfb705fddffbfb330061dbb62d46debafe898365f244d1b5916308fffa2fa5e56c474ec03e3620ad6e4b73bfe3d3dd069d9ec5b491e7b18033fe55406deeff8934f927a2997357ef322ee962d4d4862d855ac494c1d9c38b823d0ffb943ef81cbb39a2dac518678d28d25afe00cad2bda16300d2ec1ab1d7912e9eea1f77fc9b5d7cbec2e91a8a79926af7d62fc59f94609d40ad51764810b1d9e7c9041e2bfb01867b17c6a90679215ff1c8ccfabf544a3fc086f5c41dc962ae90e042028fb4b118c6729ab91747d5d744c5012e902b784f54191d5b5c1d74135fdfa11fa908c5a40b1409fe7738bfb8f4f59a1384fba271070a8c8f05250ac84c339063c5c9c5e636380c9b042770bdc02d4c9f6d0ac62d140eb1f4f475d9be29380ac8872a1f6e57343fac92faa198fe5cf7950f9d5318e9efbf70fe1d43a43b59e52372289a39b30c95b77692704c2400848e0a0e6e72b1c3ecddf815a781a71bf54f85e571d403dd4a2df67b9899c8a9b83cd272d4eddff9543cec595e32e8c3eb82648a2b126239d814df8008e7c4658417a64885ed9ffedf4bf32697d1987fcdd46870cfb93fa8f7a665411d0115cf4312d08dda008d00f8dce9cbc60372eb8b1de1830061287834210bce42af837adb9c3e227059e9ebc275d28744c09a3534c903562262b780231d2e71f319c58020765202ffddc17948b00ab6a886c8df9b4151046cc9113fb48ac84c6bd6f9232d68661e68ac6d55664d4710703873c6a34a1ffa9c1685b5f7d241e36d1b58a2e769e0c8c87785598119d1e64c7dc5531acedf3f8da8aa1ff7875b75e8184a998c64fbac4649434610ee82eadbe6cd4dc48dfcdf69b123c4aba71090186d5025d6dbdb43e0e6e87ade3451d9c1b8901bc22e4bf6d9505231afbc8dd472b6e51b9c9d30b289160f605b4627647778152b6dbb5d05382c91581f9f5622de67da07a78169f024c3b3d7e8d062b84f830d50f4f7b1b099a1c0562be2d296a9585e29170b66a6b1fb301ea7e6cf2361a11c6ec632f54152e3e86dbae49268b5c8ed84b778a947a85eede4c19d07dd0c4f65950b0e493909fd902e927871a034f25c940bc22a3ccf741cd88036e6b241a60a4d93b95645993220b5c5e1a9928007aaff3b2513f1e023472ca39f9d50244d34015401aa213bd0fb3c42160736b50d48f026d46c0d6f8da18e400afec8b0c48380ce261727b8633b52b764b04f47ad8a556"
);
_reverseCase(
hex"c4471f98acf9709c19c3811c0ae10e374ac4b0ee2894653e0ed84da716a6dea4b0958933d595370cb3c85687df3a808de6b781659cb1b9a7c227513538c674d4aea31d2145f6b65e1f3cbca435575daa953320dcc330f18e7d871f9efeed4ec2ea0152b43dde35e4d13a23cca20c12d90d356c6b4d9991be125b1ff2ed80cbf92239d29e35bd2c3698918f487fb6c4a06f4ca67a9cba133968fe46831387633f0b0d069b342bbd8a299c591c2774c9e8b5dc4cffb48d8f35afd94aa58ca81710eb2eb24c8be7b86cc6db3cf4e698fe212972336da1682950fb3b46773477f836e920b59230264cbb6b94b8e45d3cfebcd0f83a1e1686fa3ef468cf80abd568091597ffc7912820a61bec136c705a915a19d85ba99cb881b48d354027929318a8a2c6c12b79ef8028b22e1e337b18ca0bcf237326de52564e78eb011c85680fbf0a53b71a309131b3cf771eee6945c0c084949ca7e77840fef0917d12a782f3e45047ed0651f8dd44815d8af5a2cfb0b7c5a6ad566dfbb2d0f64e28d1397b295c778618ebcb2ac0ebdfb5e82d0d6930b228a6abe4",
hex"e4aba628b230690d2de8b5dfebc02acbeb1886775c297b39d1284ef6d0b2fb6d56ada6c5b7b0cfa2f58a5d8144ddf85106ed4750e4f382a7127d91f0fe4078e7a79c9484c0c04569ee1e77cfb33191301ab7530abf0f68851c01eb784e5652de267323cf0bca187b331e2eb22880ef792bc1c6a2a81893922740358db481b89ca95bd8195a915a706c13ec1ba6202891c7ff97150968d5ab80cf68f43efa86161e3af8d0bcfe3c5de4b8946bbb4c263092b520e936f8773477463bfb502968a16d33722921fe98e6f43cdbc66cb8e78b4cb22eeb1017a88ca54ad9af358f8db4ff4cdcb5e8c974271c599c298abd2b349b060d0b3f6387138346fe683913ba9c7aa64c6fa0c4b67f488f9198362cbd359ed23922f9cb80edf21f5b12be91994d6b6c350dd9120ca2cc233ad1e435de3db45201eac24eedfe9e1f877d8ef130c3dc203395aa5d5735a4bc3c1f5eb6f645211da3aed474c638355127c2a7b9b19c6581b7e68d803adf8756c8b30c3795d5338995b0a4dea616a74dd80e3e659428eeb0c44a370ee10a1c81c3199c70f9ac981f47c4"
);
_reverseCase(
hex"f78b333e403f706260a801d6b827f83a42b26023785e76e44db3d45f41ba7eff0eb6d10bc2ca3a5b298e37784c5c10ebc329db6c89e04013bb00893b1763592572fc56067c8d2fe33653b6f49ca9e48ce277a0282926acd3c58cfc576626367391052e26af736fc17f087166ada872a4bad819441c6fc0b74618ab8f6c341c68529cf6ea1a621ee8fdcc2b5440d05b020bd1d77f28ae66ccaceb0890b6d8a387d9a849b004db",
hex"db04b049a8d987a3d8b69008ebaccc66ae287fd7d10b025bd040542bccfde81e621aeaf69c52681c346c8fab1846b7c06f1c4419d8baa472a8ad6671087fc16f73af262e05917336266657fc8cc5d3ac262928a077e28ce4a99cf4b65336e32f8d7c0656fc72255963173b8900bb1340e0896cdb29c3eb105c4c78378e295b3acac20bd1b60eff7eba415fd4b34de4765e782360b2423af827b8d601a86062703f403e338bf7"
);
_reverseCase(
hex"dfbb8a3e1bf4f9562357e946a10440f04740a3466effc24c3f46c5135d66bb",
hex"bb665d13c5463f4cc2ff6e46a34047f04004a146e9572356f9f41b3e8abbdf"
);
_reverseCase(
hex"50cac3631cf1cc3761548c0c9fd18a3dba70609aaf4715bf4662d01e2cf82a7d2fc075df3925aa726b1d93649e8d0aa52fe869ddcadcc132221699d95f903bc11f0218ec8dad5804f14545757128095653b500d296b3e0bd86c7794cb999957b01b8a80e0553fbad85f9c951d35d429ba6cacae4cc3e30a1e35732492d2f810aead5082c0bf57077e69752cb86cb6a40dc603805665dc62411cbfecca151d0b37fc8acef4f1526888cfde2403513fdd096ad65bec406d6b0bb3fcfadd090132d4da1f832c4f488069a5520c63e6cac75583f4dbb07bef83fba5fcc92c7d5f4f817014297f082a706bd7bf7d721c71acc26a45f31fc33cdf703fa8e5b9276e7adfa049d6752e2a1073238a277bd8e5373371223daec0a9e720ae6b77354b26827c5ece2e49711b692e0ae98942b1a0df1afaf03a9f1b1aadddeac7a67976b34a1b3dd2af78f87875bcf56a8bd900e36043f08310c19011d36876ff1ed55a55064caa6dfec73ef5b3db6a0a9ed32b276b734932898cdbb998911a1eae2cf174e6f4957cdd21996017ab7ed23969cbb3cd71e458520ca490d1f0f31ba827c66045686ddaf8d8bb88669cc7fe5a472758a0c19728fc9bb5404fc7f001c9e99188b9489c372c0eb061831d1b4e18ac2566a4f9e35ba00a9b007dd94b670f1be067324ca1e0e31952980764b5d776773e1220f282cfb1e3cc4cd18569d050db2646218432808f251190b4159ad36fa9a20664ea65024f6654d94ab306a769d88aa107d5a5ae75628056d821f9ac3cb5c9f5d358f998419c1b2269324abdaced41ef9ce0b23ce44b4e9c9dc1976f1859ed39abca3c5a6a402239ed64e2ea3760793cd40f4ebb9093e6e3152070227b7b442b888dba5e28ccdcbd1d20dfb56f2b81544c2e3c844cafbd7a14b7c438cf56f34fb65257fc97199395398b81748fdd5faa1c9d6607829ee43f9e1253be7952a1c89a3c26f1a0c25ee0cd978b85bab0a328167cfb7b3b955393527db01a60322755d380bfac6ce77afbec263b27a33f2ca001b50bf7c78f02fd56d69d91b3271b78ae0b382ad8ee93ede49e3dc0b8c0bb2daed32b790cfc0025c840d85b7ec32c11ec1311462d97bb1e276752dd14a8188b919a0f796137f05d46edf86d0a878a0f2decb1a1f910c4203f3b00942bedab7ee30393b9c8e11afd7f173e43c14bf8f965c55d329166af9d362c06c7998d84af2d56d79155b69f91c2073a0176fbc71b407353c55abe1b11aeb73df0e1dfcfcea4b8ac50fe4b593d1a150c615ed8133d482ff5f618e528d18d99f42bb1bc7ec371d42c77cc5e71e5c2cc7f3155877ae9cee513ad4c8bcd8aafb748012c1ecfa3f7d668b8e30e40f1ee3620b1bae184360108ea17048444c66aa76a8c48f44ab9792d362685ecd0052f238711715c60a56a7fedd7473fb8f299a429b1c93f84eed0cb2b67fe5895efc4485b9d49b70dba6e28ea20a95181a5631c2a99d570738f9af9fbeb8bccc49b04833dc8692a7fc71c50e96fe603ba07cb2cf4a9f96069237b78410ae2ec81568972ba3dea0e292ae1b9d8af774c7f97a8f36dfef786f901a1e3de948f9609d88263f23fe36538685f187498d172c30ac0b54eaf71c94c1ac91f1592fbb3c5b6f7768a2ea255f88baed7c2538c2b2b63452b4400bcd7630601f3e1dd6d0ad73fb7f3e1f98134169ae7825da313b0127e16de3680a2d9b3d14b0c232c1f10e3a6486ae487daad61ae08a53a4fe2b5e8a393587d114d49761dd73cfd803f833a8bdf17c4bf660aa3727de29a41d58745430c18a0898f7be679b1ed1eb2dfcbf4767db14e7c3dcc3a908ad592d903bc848a24e37890d06d527880b0b16486f8ab3f1b3e7479881e3ce7bf8b25cc0e78f8475406843c22c838a8a9d4538f487a029da2626db271dc8d27edc1eba4268bb34691920bcd607d9d0686812a66046de28a8157d029e25484f73c7a849a2c1570b627a9066cf870a",
hex"0a87cf66907a620b57c1a249a8c7734f48259e027d15a828de4660a6126868d0d907d6bc20196934bb6842ba1edc7ed2c81d27db2626da29a087f438459d8a8a832cc243684075848fe7c05cb2f87bcee3819847e7b3f1b38a6f48160b0b8827d5060d89374ea248c83b902d59ad08a9c3dcc3e714db6747bffc2debd11e9b67bef798088ac1305474581da429de2737aa60f64b7cf1bda833f803d8cf73dd6197d414d18735398a5e2bfea4538ae01ad6aa7d48ae86643a0ef1c132c2b0143d9b2d0a68e36de127013b31da2578ae694113981f3e7ffb73add0d61d3e1f603076cd0b40b45234b6b2c238257cedba885f25eaa268776f5b3cbb2f59f191acc1941cf7ea540bac302c178d4987f185865336fe233f26889d60f948e93d1e1a906f78efdf368f7af9c774f78a9d1bae92e2a0dea32b976815c82eae1084b7379206969f4acfb27ca03b60fe960ec571fca79286dc3348b049ccbcb8be9faff93807579da9c231561a18950aa28ee2a6db709bd4b98544fc5e89e57fb6b20ced4ef8931c9b429a298ffb7374ddfea7560ac615177138f25200cd5e6862d39297ab448fc4a876aa664c444870a18e10604318ae1b0b62e31e0fe4308e8b667d3ffaecc1128074fbaad8bcc8d43a51ee9cae775815f3c72c5c1ee7c57cc7421d37ecc71bbb429fd9188d528e615fff82d43381ed15c650a1d193b5e40fc58a4beafcfc1d0edf73eb1ab1e1ab553c3507b471bc6f17a073201cf9695b15796dd5f24ad898796cc062d3f96a1629d3555c968fbf143ce473f1d7af118e9c3b3930eeb7dabe4209b0f303420c911f1acbdef2a078a8d086df6ed4057f1396f7a019b988814ad12d7576e2b17bd9621431c11ec132ecb7850d845c02c0cf90b732eddab20b8c0bdce349de3ee98ead82b3e08ab771321bd9696dd52ff0787cbf501b00caf2337ab263c2beaf77cec6fa0b385d752203a601db27353955b9b3b7cf6781320aab5bb878d90cee250c1a6fc2a3891c2a95e73b25e1f943ee297860d6c9a1fad5fd4817b89853399971c97f2565fb346ff58c437c4ba1d7fbca44c8e3c24415b8f256fb0dd2d1cbcd8ce2a5db88b842b4b727020752316e3e09b9ebf440cd930776a32e4ed69e2302a4a6c5a3bc9ad39e85f17619dcc9e9b444ce230bcef91ed4cedaab249326b2c11984998f355d9f5ccbc39a1f826d052856e75a5a7d10aa889d766a30ab944d65f62450a64e66209afa36ad59410b1951f2082843186264b20d059d5618cdc43c1efb2c280f22e17367775d4b76802995310e1eca247306bef170b694dd07b0a900ba359e4f6a56c28ae1b4d1311806ebc072c389948b18999e1c007ffc0454bbc98f72190c8a7572a4e57fcc6986b88b8dafdd865604667c82ba310f1f0d49ca2085451ed73cbb9c9623edb77a019619d2cd57496f4e17cfe2eaa1118999bbcd98289334b776b232eda9a0b63d5bef73ecdfa6ca6450a555edf16f87361d01190c31083f04360e90bda856cf5b87878ff72addb3a1346b97677aacdeddaab1f1a903afaff10d1a2b9498aee092b61197e4e2ecc52768b25473b7e60a729e0aecda23123773538ebd77a2383207a1e252679d04faade776925b8efa03f7cd33fc315fa426cc1ac721d7f77bbd06a782f097420117f8f4d5c792cc5fba3ff8be07bb4d3f5875ac6c3ec620559a0688f4c432f8a14d2d1390d0adcf3fbbb0d606c4be65ad96d0fd133540e2fd8c8826154fefacc87fb3d051a1ccfecb1124c65d66053860dc406acb86cb5297e67770f50b2c08d5ea0a812f2d493257e3a1303ecce4cacaa69b425dd351c9f985adfb53050ea8b8017b9599b94c79c786bde0b396d200b55356092871754545f10458ad8dec18021fc13b905fd999162232c1dccadd69e82fa50a8d9e64931d6b72aa2539df75c02f7d2af82c1ed06246bf1547af9a6070ba3d8ad19f0c8c546137ccf11c63c3ca50"
);
_reverseCase(
hex"e6da5698b40773273ad070d5bd6016a268db95334a41acfd60d65e1f44b7000704c68e0de48b1f24b97e1eb9ec129f49084d428c38a1edbb5cf34fdcd18e07701fc9da58de6e8fd6b09a9472133a7aef784621d1fd0768bc90363dc67cdf015495dd6baf55859f63d2992916630a405782c54633c9c4e4f88780a964bd3d1232acf969c23a35b40e89fb141e51a01a74fa540a532d5676e4cc9246a8a1a406554f4640be0320f12120f7e2f362e5df101617cd1c9b51fd06fa020d620d4c0fed2257fbf7b6b403ed63d0f982ff15af397f881c321463072db7e451d0edcfe909272b2818277749b3b45de7a78f1df75520d8134fa8207e76d8144da710a45d645f0aa8cd03fae7e3a0ca046c73c89c71ad6b02a512f4e0eb42f6e16a547cd638bce4bc0edbe9d37cbd737c287a4b0216f63b7a52b7ebd3c59693313bfa050e390969c93ec0d5cb8d6fcfc718b9c9a883267b5fa5db87512940fdfb6625e785d6b0ccde9974c46451a09172294e301551b7dd42d6ba47b9dae5d805e9d35bb0f3b3b7e717634e6fd58d587007ed6efae7dc7689526601ab57dac4d395ad26c55ce1f59d0725b8b3f4f800b714468aceaa1b1ecb7ce2a95a39e8662e514d6514a576b5d9b0464f9a39fc6e24e36e03ee65833a55b589237f2fa0a3d8031c22b555bfa67bee10b7b85996942a3d89335ee42cbb8cf919634e38c3fac8228620cd91fa467e8499bb21192a495444187f7680dd601f341aaa17de4913e5f46f957cce62e90b570a5ba9337ae086b171aaf454a7befaa9663b35ec523f877e8df750628ffc6cc775dbb503018d4d70223af9bcec14f5ec5f15f19b24412bd614d4a6ad726b9d4d893e2e2661390701f962127b4f1b8035f5adf079ea495f071580a8d1ba2a6575e6a72a627ffc8eb142b1e957ed3f246ba698f793a61793e461e4f8ae8ac664798834cc54783d8ea4bcf0ab964bf4b5ee43023eda64139572c39388f86d154c8c873668eb67fe781a14ea45b646ada5f88ac649282d81a5f12289ba9e7ac2d80e1bd395ad00fb42085faa33bcca019f24d5ea1d85716e2b88c1f3ea2c2b6bca4a40b9f8e70d3a3c5c83c2da7dd8c05c81ae95c46aa1ce562a5f7f97933cb97a0e6a63e26852a0efa86ee50bcc090e8ba35f30af82cdf431760be6b656580ae59474543848e39f901cd2382680a93edda4b71fe4991aa9ac3f1de98474eedd9ff115c58f69997560176988fe6e26546e6cc4249fc85b64d702c31f177d51e094916c25b919d83bc89be19cd4f51d2a0ef689a050dd9baf6a345acc0822f44127138c16aeae59d3c3ec4ee8dda1cbb8a30507914de8ef4a20bc178769bc9d23d4f0017dd10c0a378194ed0f31c6eae0df39af7025f1840c864a239a2420243033b190ebf5f4240dec178865ffd532407d674799458fe17ef17768c923fd039a2c3c4e5d115299725bdc188a2d248df696d5c3f2cdd5da3128a6bfb491bfb440e8bdad5e22a79271c0f64b3ea7c1e8d97e9878b1d8644d8ece3e34e28df2b5a0bfe548b865ef84c5c8ee13b098348e75d11d6191e60b4e2ab22c822eb218841d2abf7ae4c30ad5938c1ab047e1b866f304da9b607b68913caa7b9c937a8f94b3e56fb09ad361796f6094cd8aacfb5b0ae8556e06a3b8d1118f097c7c6db24a6fb2d7a195f00eaf53a4b8859f92737bceab715582f43180ef2f97d9f38c3757abde4c8aa0b0db9e542b91dbd728326abe54c29f93052052",
hex"522005939fc254be6a3228d7db912b549edbb0a08a4cdeab57378cf3d9972fef8031f4825571abce7b73929f85b8a453af0ef095a1d7b26f4ab26d7c7c098f11d1b8a3066e55e80a5bfbac8acd94606f7961d39ab06fe5b3948f7a939c7baa3c91687b609bda04f366b8e147b01a8c93d50ac3e47abf2a1d8418b22e822cb22a4e0be691611dd1758e3498b013eec8c584ef65b848e5bfa0b5f28de2343ece8e4d64d8b178987ed9e8c1a73e4bf6c07192a7225eadbde840b4bf91b4bfa62831dad5cdf2c3d596f68d242d8a18dc5b729952115d4e3c2c9a03fd23c96877f17ee18f459947677d4032d5ff658817ec0d24f4f5eb90b133302420249a234a860c84f12570af39dfe0eac6310fed9481370a0cd17d01f0d4239dbc698717bc204aefe84d910705a3b8cba1dde84eecc3d359aeae168c132741f42208cc5a346aaf9bdd50a089f60e2a1df5d49ce19bc83bd819b9256c9194e0517d171fc302d7645bc89f24c46c6e54266efe886917607599698fc515f19fddee7484e91d3faca91a99e41fb7a4dd3ea9802638d21c909fe34838547494e50a5856b6e60b7631f4cd82af305fa38b0e09cc0be56ea8efa05268e2636a0e7ab93c93977f5f2a56cea16ac495ae815cc0d87ddac2835c3c3a0de7f8b9404aca6b2b2ceaf3c1882b6e71851dead5249f01cabc33aa5f0842fb00ad95d31b0ed8c27a9eba8922f1a5812d2849c68af8a5ad46b645ea141a78fe67eb6836878c4c156df88893c372951364da3e0243eeb5f44b96abf0bca48e3d7854cc34887964c68aaef8e461e49317a693f798a66b243fed57e9b142b18efc7f622aa7e675652abad1a88015075f49ea79f0adf535801b4f7b1262f901073961262e3e894d9d6b72ada6d414d62b41249bf1155fecf514ecbcf93a22704d8d0103b5db75c76cfc8f6250f78d7e873f52ec353b66a9fabea754f4aa71b186e07a33a95b0a570be962ce7c956ff4e51349de17aa1a341f60dd80767f184454492a1921bb99847e46fa91cd208622c8fac3384e6319f98cbb2ce45e33893d2a949659b8b710ee7ba6bf55b5221c03d8a3a02f7f2389b5553a8365ee036ee3246efc399a4f46b0d9b576a514654d512e66e8395aa9e27ccb1e1baace8a4614b700f8f4b3b825079df5e15cc526ad95d3c4da57ab0166528976dce7fa6eed0770588dd56f4e6317e7b7b3f3b05bd3e905d8e5dab947bad642ddb75115304e297291a05164c47499deccb0d685e72566fbfd40295187dba55f7b2683a8c9b918c7cf6f8dcbd5c03ec96909390e05fa3b319396c5d3ebb7527a3bf616024b7a287c73bd7cd3e9db0ebce4bc38d67c546ae1f642ebe0f412a5026bad719cc8736c04caa0e3e7fa03cda80a5f645da410a74d14d8767e20a84f13d82055f71d8fa7e75db4b349772718282b2709e9cfedd051e4b72d076314321c887f39af15ff82f9d063ed03b4b6f7fb5722ed0f4c0d620d02fa06fd519b1ccd171610dfe562f3e2f72021f12003be40464f5506a4a1a84692cce476562d530a54fa741aa0511e14fb890eb4353ac269f9ac32123dbd64a98087f8e4c4c93346c58257400a63162999d2639f8555af6bdd955401df7cc63d3690bc6807fdd1214678ef7a3a1372949ab0d68f6ede58dac91f70078ed1dc4ff35cbbeda1388c424d08499f12ecb91e7eb9241f8be40d8ec6040700b7441f5ed660fdac414a3395db68a21660bdd570d03a277307b49856dae6"
);
_reverseCase(
hex"463200fe58f2ca9b67bca1db68af424ce173af2c5faf12fb9d151456cbb0a7d5d63b303823c160d38fb10d760c0948fe5fa7f44d4fb58f261a719863b81528311087877bef1d6700d8a6632f534c06d7a39a01090c8e5c006836fb4beb24254b6b9e29c2a4d759e5305ea7e8ae5ca5cd1f2f43e578e7f33cff5ad7195cba78812a7c75259270f14802acbaa893cb17173177a7c894fae1d47f03f248fe3032c4e9dcf5ccb41b75b567799bee63322e1394f2ad3f2b9a0ff678e85df899ff15c0b0ae4df6e62b7e4e207ec09bc1fb99241e58e4743443208f68e02388278ee1c94e346e707180bb979bbe72332cdc180ef5dbd3f5b339d54fa7d09e9e7ccee25679809d4780eee05dd95790c01ccfc52f940c5cefcf62901d08bdfa7e9d242afc08902ff90086f86cbca81fb5a43ff027899e30aa258ce850e997f8b2a8961cd1a9ef8b44c00ce8ba3bd5258970e13f594a3707deea08813e25ec51f269100374d252e14e55eb580d3697dbf6fb1922ab7e2186b4949174f4c0bb1ecdc1d08befacbdc056f071a703bb08ed8aa1229c647ed80a404529b96a7ac826e7e25ec4571426bf375b186ca08498532abdf8c2bdc5185b756f0c1f8b676138319dbd29883c9a8db41e19a01c98837acd530273b8249ae45e9f9f91774ac2de56618651382085735a2e6be77a00a8ea22c2d50d2dad88edb50ba7dc2a2e1626cf81e3349d8a77fb7cd2bfeb55d60c42075ac45fed76182d9a4de2db96af9e49d1cb882339bb56471e63c20bf3015e7c1734f3c8fc4c7550eadea9ff06142e16",
hex"162e1406ffa9deea50754cfcc8f334177c5e01f30bc2631e4756bb392388cbd1499eaf96dbe24d9a2d1876ed5fc45a07420cd655ebbfd27cfb778a9d34e381cf26162e2adca70bb5ed88ad2d0dd5c222eaa8007ae76b2e5a7385203851866156dec24a77919f9f5ee49a24b8730253cd7a83981ca0191eb48d9a3c8829bd9d313861678b1f0c6f755b18c5bdc2f8bd2a539884a06c185b37bf261457c45ee2e726c87a6ab92945400ad87e649c22a18aed08bb03a771f056c0bdacef8bd0c1cd1ebbc0f4749194b486217eab2219fbf6db97360d58eb554ee152d274031069f251ec253e8108eade07374a593fe1708925d53bbae80cc0448befa9d11c96a8b2f897e950e88c25aa309e8927f03fa4b51fa8bc6cf88600f92f9008fc2a249d7efabd081d9062cfef5c0c942fc5cf1cc09057d95de0ee80479d807956e2ce7c9e9ed0a74fd539b3f5d3dbf50e18dc2c3372be9b97bb8071706e344ec9e18e278823e0688f20433474e4581e2499fbc19bc07e204e7e2be6f64daeb0c015ff99f85de878f60f9a2b3fadf294132e3263ee9b7967b5751bb4ccf5dce9c43230fe48f2037fd4e1fa94c8a777311717cb93a8baac0248f1709225757c2a8178ba5c19d75aff3cf3e778e5432f1fcda55caee8a75e30e559d7a4c2299e6b4b2524eb4bfb3668005c8e0c09019aa3d7064c532f63a6d800671def7b878710312815b86398711a268fb54f4df4a75ffe48090c760db18fd360c12338303bd6d5a7b0cb5614159dfb12af5f2caf73e14c42af68dba1bc679bcaf258fe003246"
);
_reverseCase(
hex"d8af5c5ff41471087467e7e3a9ed66561ae5d974e3a723d18553764934e5b81a638969f01ee6a9b0e18a93db0b30f9a353ed6337e479ea79dc83ed0d82c4ce8f2a2fcd13d4e00ff62a3ad9ae892844a49a3b05c8296bf8ea5b82276ff1e5f5e52c288814a997a46573087d14cd554502fd86a4c2d2f96e118377c6708fd0d62abad06e4ccaad7fbde863af39bde97be9cdbab9bfe0a36c07634911ee3b5a4ebd63",
hex"63bd4e5a3bee114963076ca3e0bfb9bacde97be9bd39af63e8bd7fadca4c6ed0ba2ad6d08f70c67783116ef9d2c2a486fd024555cd147d087365a497a91488282ce5f5e5f16f27825beaf86b29c8053b9aa4442889aed93a2af60fe0d413cd2f2a8fcec4820ded83dc79ea79e43763ed53a3f9300bdb938ae1b0a9e61ef06989631ab8e53449765385d123a7e374d9e51a5666eda9e3e76774087114f45f5cafd8"
);
_reverseCase(
hex"66e0466bf9834f04c1d9fbdbbf93b6b67b3029c3dfcab37d7d3454894b76b26d87d1cbe92ef2da7a71a3a1ce4f511983249c200721819fcb55af9df5e768321401b3e7d44dd3c4de78d7ea94f9f32c1e99259936db995a71cdf688626419a753c2334197ab7b19703c901e83032d10e29f32c7b7ecfc75a376d3d871d44ab4ff2a0d3f3fe8560f0c77d94918dc2dd791937abcbd11f56f4b5b134b81c23c5d2eacde60289c2346ee1ea22f166ba4764316613dce0284a27d0c21c7fb006004074421d903dcc9092ce957316cba44e6a2941de675f4fb4cd5a1b7e20fabec3d9ec87b1c60f81e232994e65f3cd1e6ea53a46b032c63c3a245cce743cd861b1a4930e1ea5277341ff4babebeabafede3de5bf42851ddde6d7a323e03fbc1eeba8e1fb8d3ac1e648d41b35bd2cac01eb5bfbbace06e61634195314e38a81b77b624dd2cbe5b7b6af48492bb7b73d97f0aea1f51d561fcd8545ddce483e65d5719937bf317fa219bf9ea40ad2210b382e18d853c9459c81e043a8f09205e98749e057e004e29d4a56055efa949c5313136ace37fe256d49e593d593be1ee31ef516f19e9f71172d7260cde2200dbb4e9069ebe06cc2abdffbe6492c2294ec64e3024eb1070b4de187ee5aa6d3c117a6eb53543b0ab17a28783c85191254d759776b4581176aecc6026f449f9ffc889f5fbc08f33e1bd2e38eb5603b5ec7aa5b1a2f5422b1a44653c9f91d0fdc25898cebf376225225d2e03accdbf6c2dde0efca3575a55bca4f76a064ac4bf4a4fa205ebb9de022e1491bc815d48fbb84f73c2883f671930afac2ad9cad15ca4071377d11e16ff8744b8b874643bfa711b0a545f3ee96094808a7d08b326a9c0e9ee40bbcc31",
hex"31ccbb40eee9c0a926b3087d8a809460e93e5f540a1b71fa3b6474b8b84487ff161ed1771307a45cd1cad92aacaf3019673f88c2734fb8fb485d81bc91142e02deb9eb05a24f4abfc44a066af7a4bc555a57a3fc0ede2d6cbfcdac032e5d22256237bfce9858c2fdd0919f3c65441a2b42f5a2b1a57aecb50356eb382ebde1338fc0fbf589c8fff949f42660ccae761158b47697754d259151c88387a217abb04335b56e7a113c6daae57e18deb47010eb24304ec64e29c29264beffbd2acc06be9e06e9b4db0022de0c26d77211f7e9196f51ef31eee13b593d599ed456e27fe3ac363131c549a9ef5560a5d4294e007e059e74985e20098f3a041ec859943c858de182b31022ad40eaf99b21fa17f37b9319575de683e4dc5d54d8fc61d5511fea0a7fd9737bbb9284f46a7b5bbe2cdd24b6771ba8384e31954163616ee0acbbbfb51ec0cad25bb3418d641eacd3b81f8ebaeec1fb033e327a6ddedd5128f45bdee3edafabbebebaf41f347752eae130491a1b86cd43e7cc45a2c3632c036ba453eae6d13c5fe69429231ef8601c7bc89e3decab0fe2b7a1d54cfbf475e61d94a2e644ba6c3157e92c09c9dc03d9214407046000fbc7210c7da28402ce3d61164376a46b162fa21eee46239c2860deac2e5d3cc2814b135b4b6ff511bdbc7a9391d72ddc1849d9770c0f56e83f3f0d2affb44ad471d8d376a375fcecb7c7329fe2102d03831e903c70197bab974133c253a719646288f6cd715a99db369925991e2cf3f994ead778dec4d34dd4e7b301143268e7f59daf55cb9f812107209c248319514fcea1a3717adaf22ee9cbd1876db2764b8954347d7db3cadfc329307bb6b693bfdbfbd9c1044f83f96b46e066"
);
_reverseCase(
hex"681f1eb754ce707d20aa1bd3134070131b35b971ca24c6aaa8a5b71cd819417992a81741b4efd9455ffac76eac2df82001ffbe34e274e9346f85d4522bad3003effdf12b9a6261eaf5985ff513d614025614c5ae0f9ac15da0967556e5e7fd589654024a67d19051b22ed9894e29dd75a068eb1f6dbdc932b91621c0ba24163344087eccdaf90363cb850332f112c910a09858a0902d0eec2af74b130100a9233ced6f90434f9c08e638cc2185d34281139fcb8764a4db2b3c3320e606197ae640825dca2361ae72037995046f951c1a8c6db53ff095a56e44360ad7fa2584c42cde43d10fcfb1a978953c34a13098869e31c070b024b216e8946fab7db8ae99075f9fa34a0b82dad326782cf08c3f5ca4d65020682e3c3e99bb9cc660257db3081eb066ad42b08952857766e0dcc888d82eddd87cdcbf64a5a7a879e113932d6183b37c6ca7de8cecff95473c12c17e18fc73f0eb46c53492c24e5076e1378b15d37d706deae523fac3c18dd3f32d5bfd9375f5c7f5ddcc5e0d8106d4cdfd031d42f087826ed1a0645856684def1520b10b5d0d30a94f27f97c5912d0df23a256728dc4ad9140b8135b740955e5879f9db4126ca03508e4f11bfe9501f3cf46802c668d01843714e427e8a0eca354e41d",
hex"1de454a3eca0e827e4143784018d662c8046cff30195fe1bf1e40835a06c12b49d9f87e55509745b13b84091adc48d7256a223dfd012597cf9274fa9300d5d0bb12015ef4d68565864a0d16e8287f0421d03fdcdd406810d5eccddf5c7f57593fd5b2df3d38dc1c3fa23e5ea6d707dd3158b37e176504ec29234c546ebf073fc187ec1123c4795ffec8cdea76c7cb383612d9313e179a8a7a564bfdc7cd8dd2ed888c8dce06677855289b042ad66b01e08b37d2560c69cbb993e3c2e682050d6a45c3f8cf02c7826d3da820b4aa39f5f0799aeb87dab6f94e816b224b070c0319e869830a1343c9578a9b1cf0fd143de2cc48425fad70a36446ea595f03fb56d8c1a1c956f0495790372ae6123ca5d8240e67a1906e620333c2bdba46487cb9f138142d38521cc38e6089c4f43906fed3c23a90001134bf72aec0e2d90a05898a010c912f1320385cb6303f9dacc7e0844331624bac02116b932c9bd6d1feb68a075dd294e89d92eb25190d1674a02549658fde7e5567596a05dc19a0faec514560214d613f55f98f5ea61629a2bf1fdef0330ad2b52d4856f34e974e234beff0120f82dac6ec7fa5f45d9efb44117a892794119d81cb7a5a8aac624ca71b9351b13704013d31baa207d70ce54b71e1f68"
);
_reverseCase(
hex"2cbccefde5f837e4167e1636069e75764f195150d9ffbf4365f838bc2f20d317ef702e7e77ed8f42dd8419994627aed65829a35cbc25f7b4c5b0ec6c1044e7995f0ee0a40622e22959c59341a9fc1839e81fc53c517f40da6c9f54435ebfba1b13c4af27210d5b492a02db2ed41bb880abc9ef76bdd2a20e20b8c0a398d99611dd3a9b1ad20d9dea365f74f7e39ad2be534b1c577fff457e49da574dbbff1470370d7925ac01a939ca84b0ad509502b23957947ac2413ea32295717c30cef8bb00e5eeb815a7eb95ff3c4fc3f033948ea48001ce6793b2d357090c51c58becaff029854689e2ab342e85ae20b203d9682ecf070548df15fa7bd97fea9b0e142e",
hex"2e140e9bea7fd97bfa15df480507cf2e68d903b220ae852e34abe289468529f0afec8bc5510c0957d3b29367ce0180a48e9433f0c34f3cff95eba715b8eee500bbf8ce307c719522a33e41c27a945739b2029550adb084ca39a901ac25790d377014ffbb4d57da497e45ff7f571c4b53bed29ae3f7745f36ea9d0dd21a9b3add1196d998a3c0b8200ea2d2bd76efc9ab80b81bd42edb022a495b0d2127afc4131bbabf5e43549f6cda407f513cc51fe83918fca94193c55929e22206a4e00e5f99e744106cecb0c5b4f725bc5ca32958d6ae2746991984dd428fed777e2e70ef17d3202fbc38f86543bfffd95051194f76759e0636167e16e437f8e5fdcebc2c"
);
_reverseCase(
hex"8e263504a5b460178cf30f695b146db7bf550c4e415483c7de391943a3b474c71b04b221e3499aa087c21ea67835e5a37cc87f5a2a6e956ebe15f20174a2201c",
hex"1c20a27401f215be6e956e2a5a7fc87ca3e53578a61ec287a09a49e321b2041bc774b4a3431939dec78354414e0c55bfb76d145b690ff38c1760b4a50435268e"
);
_reverseCase(
hex"ce7c1674ddebf363f585dff38aff732636e71114c2de65de1d08e3a80363cff4d67a73e40b8a19ff93c301a98e1dc837b1c111e578f4802a2fda092bffbda2fbede186cee8da2e3ea5a0646c72674d640b5389892ad8969cb24efe0bf67be378ccc59e87a82900a7def56ec93fc5696be93bb7c0cfa99fa07331bed5d549c6280e7cb69c48dd605b69314d67f39486b29ca856d3bca7875c7826d607a252b6e78d85ab4540d526415614aec44d611f21b853a59ffbf06a67c740f4e3988b9e4a8213b66f313467611e98aa0ce6a1c5d2322a39b33a66a41691a0ef22f64469dce0faa3f9329485c9e5750026e250786bb66ab172fbb3df51a0ed07a86d30c978b659b433a28f43747e606e879ec50a002d7380ae959db09c589f0b8e8c10d8e17308644b00224bee6669eabff757c62de78aaa88c97ed9e34ad4c80cb316e3ec99e321e924f9dfc009e850355fd78f160d3d615bfe49e7f45a2786007f88d033daf0032354f8802ed6451eed797fcdfaa1fadc379dcf7fdeeb951e527abc6db27877f4bee7f7f4feb4c689ddd4dcb51659f9ed7d316dae3ac8411b8a4e8b47959aa67f3eb6cf029a45315f8414a65c37d729e712c380068cd8063f31219e5e2cb53d66a374615bd55702fc2a16bc3deae6e5ec8ed3f6790d1a05654f4d460bdaa64c9c405135f2a2a4e6e7c6850388375cabb31d91220f67466834c2475177302e3c6e174a4585bcb1c3e3be5e7cf9dd0a7c2ea5c55a0d5595bf59009967a6fe73c50e4e7357dd50b0cb569c1377c57ff20e81bfbf5c161fc107e53cdd0d6e31f6b53c1ccce93b9b9017bc6b4d1cdc1dd29af72791fcdc476afe5ef427a0a35b615c8a2d5397f4f1137db9af87828d45467e3a00b79278439847ef41f943627b8192272dd87c1b4ce193dc31a8e4d046f4aeafd7db060bbf75692810a9573c6c773fd44fd29041fc49e7baf0fa4a60913ad288017e2a7aeca3b6d76da5adc0d80a412ac3513825c2b3bfcac7d292f0d1bf987f0dc5746a9ba1e7ef5ca794120a13fbfdf1c14f0049e873b3aa291cd1646a760eec3074f9da9471d3ff43b0d6d890ec0ff1871f675e59cc6c992d0d56c27d5f393bbfdbf65e27d3b7af2078ab92d96adb898514c6a646c386c121237db7c792b19e3255c19a132dd5c95a698299961febaded",
hex"edadeb1f969982695ac9d52d139ac155329eb192c7b77d2321c186c346a6c6148589db6ad992ab7820afb7d3275ef6dbbf3b395f7dc2560d2d996ccc595e671f87f10fec90d8d6b043ffd37194daf97430ec0e766a64d11c29aab373e849004fc1f1fdfb130a1294a75cefe7a19b6a74c50d7f98bfd1f092d2c7cabfb3c2253851c32a410ad8c0ada56dd7b6a3ec7a2a7e0188d23a91604afaf0bae749fc4190d24fd43f776c3c57a910286975bf0b06dbd7afaef446d0e4a831dc93e14c1b7cd82d2792817b6243f941ef4798437892b7003a7e46458d8287afb97d13f1f497532d8a5c615ba3a027f45efe6a47dcfc9127f79ad21ddc1c4d6bbc17909b3be9cc1c3cb5f6316e0ddd3ce507c11f165cbfbf810ef27fc577139c56cbb050dd57734e0ec573fea667990059bf95550d5ac5a52e7c0addf97c5ebee3c3b1bc85454a176e3c2e30775147c2346846670f22911db3ab5c37880385c6e7e6a4a2f23551409c4ca6da0b464d4f65051a0d79f6d38eece5e6ea3dbc162afc0257d55b6174a3663db52c5e9e21313f06d88c0680c312e729d7375ca614845f31459a02cfb63e7fa69a95478b4e8a1b41c83aae6d317dedf95916b5dcd4dd89c6b4fef4f7e7bef47778b26dbc7a521e95ebde7fcf9d37dcfaa1facd7f79ed1e45d62e80f8542303f0da33d0887f0086275af4e749fe5b613d0d168fd75f3550e809c0dff924e921e399ece316b30cc8d44ae3d97ec988aa8ae72dc657f7bfea6966ee4b22004b640873e1d8108c8e0b9f589cb09d95ae80732d000ac59e876e607e74438fa233b459b678c9306da807eda051dfb3fb72b16ab66b7850e2260075e5c9859432f9a3fae0dc6944f622efa09116a4663ab3392a32d2c5a1e60caa981e616734316fb613824a9e8b98e3f440c7676af0fb9fa553b8211f614dc4ae14564126d54045ab858de7b652a207d626785c87a7bcd356a89cb28694f3674d31695b60dd489cb67c0e28c649d5d5be3173a09fa9cfc0b73be96b69c53fc96ef5dea70029a8879ec5cc78e37bf60bfe4eb29c96d82a8989530b644d67726c64a0a53e2edae8ce86e1edfba2bdff2b09da2f2a80f478e511c1b137c81d8ea901c393ff198a0be4737ad6f4cf6303a8e3081dde65dec21411e7362673ff8af3df85f563f3ebdd74167cce"
);
_reverseCase(
hex"c56cf781c65b09e9f38e3f60d7336df66875db9c0c3afe3c1ea1e84ea01d184ce5d0897931cdd4014e1669ae374de5fd6ad551fd5fa67d9f4aac274d44f0e051eaa347265e067f7cd89cfb6419abb1e8ec62e7f40ae904327b814032dcf0fa1bd517f6524c489c58e082386c90027bb9cb21db23349a0373b405ae10fd1dafc46ac999e832a1e81e1c37292acf",
hex"cf2a29371c1ee8a132e899c96ac4af1dfd10ae05b473039a3423db21cbb97b02906c3882e0589c484c52f617d51bfaf0dc3240817b3204e90af4e762ece8b1ab1964fb9cd87c7f065e2647a3ea51e0f0444d27ac4a9f7da65ffd51d56afde54d37ae69164e01d4cd317989d0e54c181da04ee8a11e3cfe3a0c9cdb7568f66d33d7603f8ef3e9095bc681f76cc5"
);
_reverseCase(
hex"02f49d95d2ea11a3b6a0b03a0ebd3b188f253eb1a2c20ffc64847f2b0edd9bca1e0fc493a858805a6d7021c183fd752413efb32bae53451f9b107bb99ce522870671a025ec55edde2013ed89bd47daeda2dd55363e1cf9440864a8dd11b4be223ddd802629837da2902f4840bf7527402cb5a443a1492f95f2534c6d5e821977c35c93a0f8000e1bd3ac34aaddbde8917edd9d961e443f8b4eaeacdaae63700aacc26647d716af3e34a4f67c4c33d417f10f42820d38d67919be5822066e93ca11b5c014bd51067f898862daa8d225ad653a764b34e2dfaf2498b638756019b46bb7550ec16399a6da4c7f3d4f2707c63cc8d82ab896ddc2e7caa84abe19d8266da0ef7fffb27b8bab0d4e9a5a5d25854e2ba62e0fc0b192fd5f3776fab6849140f6f8b55e3a73f3c9a31103",
hex"0311a3c9f3733a5eb5f8f6409184b6fa76375ffd92b1c00f2ea62b4e85255d5a9a4e0dab8b7bb2ff7fefa06d26d819be4aa8cae7c2dd96b82ad8c83cc607274f3d7f4cdaa69963c10e55b76bb419607538b69824afdfe2344b763a65ad25d2a8da6288897f0651bd14c0b511ca936e062258be1979d6380d82420ff117d4334c7cf6a4343eaf16d74766c2ac0a7063aedaacae4e8b3f441e969ddd7e91e8bdddaa34acd31b0e00f8a0935cc37719825e6d4c53f2952f49a143a4b52c402775bf40482f90a27d83292680dd3d22beb411dda8640844f91c3e3655dda2edda47bd89ed1320deed55ec25a071068722e59cb97b109b1f4553ae2bb3ef132475fd83c121706d5a8058a893c40f1eca9bdd0e2b7f8464fc0fc2a2b13e258f183bbd0e3ab0a0b6a311ead2959df402"
);
_reverseCase(
hex"52448686a27621217274f44b240ff012758ff67bc42fe788c9c76758f5fec5af5ad2a559",
hex"59a5d25aafc5fef55867c7c988e72fc47bf68f7512f00f244bf47472212176a286864452"
);
_reverseCase(
hex"b606275168c5407915147cd74eeebbee4c4c17a14afd101e2f04fad441226fc699bae5474384d37e521aee4356229f7f85113531938dd74ec0b9f9cf8071abd1fe35749d57f05c0862bef051c3920759002116d36a85bfb62a3bd68bbd42f3a3277d77d1480846b5b2e4d5cfd2355568203710b3289f61def831cac7bbdc233abce8af3954d0ed6cdc164b990d539a8b70d41deaf7d5a324b1517440c35959dc7cf371a50afa802d1b7952eb90ae69dee6e98155278251528722fed8917137a27bc4b289b6c636797723ddf6d15bbd7d2d3a1cd0b3e5467a48d9ba19b08418b8f9deead57eaff2ba0243817f015662cda4471e9d673bdcbdbe6aa591184e23bfdf08d2143e42b465cb4973eb847488cb116515ba39f6274409b0b7219e50826b4131fe2026e4d87a6a52db760f031ef9796cd1b3e5d35dd7d8fa725c9929b2d2f0769293ea69c718d0a4a0efccd0544b0b0c43d16d37eda5921f4e23edb03c7ae1c9b6ac41212cbb28723c1062acd921f4ea5459a3da18a2b08e06bf5c8072f8cc774ef385b9d065e5c252d29c3930061a0919bf5db99c5ae1eb032b2ea89e7749f15dc42965716cbdfcec6b81a5e6fe99a537f44abe0aa297a87f34246bde269180ab01867e1dde371efa9d4dc8c32fe5c44734b4cd98999b21b0840032edcc76ddeed027e96502a4f7efe45844f17625b4e5ecac11af5c640e65d1b16e3b379fc021d5cd69f1b2ff6ff912a098b800c512081f1f0406a7b4c18707b878ec0ec2423c71b3db5e0004f3c54fe62c9a10491dbe99d84e8f53739c892e062a048f16594e2c057c9838c53df1418efc3f8724d5edfe0bc32c5937059c8eba164dce29a4490c6cd2aae948a2c869bd2f1217b906b7b85ed1d3d1627254d53d0da0a6e8e581791c473917a5c04463e6c242167cc00c42aa861e50430e8671165c0dcd34a12eb2957d4e06d477d3266692f4cd5a9cd2a37ccd7e1f83d1ee03e5f0248f7c4739599a0201e25a77",
hex"775ae201029a5939477c8f24f0e503eed1831f7ecd7ca3d29c5acdf4926626d377d4064e7d95b22ea134cd0d5c1671860e43501e86aa420cc07c1642c2e66344c0a51739471c7981e5e8a6a00d3dd5547262d1d3d15eb8b706b917122fbd69c8a248e9aad26c0c49a429ce4d16ba8e9c0537592cc30bfeedd524873ffc8e41f13dc538987c052c4e59168f042a062e899c73538f4ed899be1d49109a2ce64fc5f304005edbb3713c42c20eec78b80787c1b4a706041f1f0812c500b898a012f96fffb2f169cdd521c09f373b6eb1d1650e645caf11acece5b42576f14458e4eff7a40265e927d0eedd76cced320084b0219b9998cdb43447c4e52fc3c84d9dfa1e37de1d7e8601ab809126de6b24347fa897a20abe4af437a599fee6a5816becfcbd6c716529c45df149779ea82e2b03ebe15a9cb95dbf19091a0630399cd252c2e565d0b985f34e77ccf872805cbf068eb0a218daa35954eaf421d9ac62103c7228bb2c2141acb6c9e17a3cb0ed234e1f92a5ed376dd1430c0b4b54d0ccefa0a4d018c769ea939276f0d2b229995c72fad8d75dd3e5b3d16c79f91e030f76db526a7ad8e42620fe31416b82509e21b7b0094427f639ba156511cb887484eb7349cb65b4423e14d208dfbf234e1891a56abebddc3b679d1e47a4cd6256017f814302baf2af7ed5eadef9b81884b019bad9487a46e5b3d01c3a2d7dbd5bd1f6dd23777936c6b689b2c47ba2377191d8fe2287525182275581e9e6de69ae90eb52791b2d80fa0aa571f37cdc5959c3407451b124a3d5f7ea1dd4708b9a530d994b16dc6cedd05439afe8bc3a23dcbbc7ca31f8de619f28b3103720685535d2cfd5e4b2b5460848d1777d27a3f342bd8bd63b2ab6bf856ad3162100590792c351f0be62085cf0579d7435fed1ab7180cff9b9c04ed78d93313511857f9f225643ee1a527ed3844347e5ba99c66f2241d4fa042f1e10fd4aa1174c4ceebbee4ed77c14157940c568512706b6"
);
_reverseCase(
hex"52a2dfc931eacdb0f5f48e53d6838696d1bcb63319dddb9fb462974c4b78e91bae732936b4e02d9f2d4b2a4b9d499d4e28c496e69dc8220cc6f7e31fc8f47272e6266d5da8b60fccbb31cc613571a337762eb3f48489b27a4ef568a6ac70d5d66ef1f620c875cec397fd301dd112ec1edcd5b78bfa57e1942732d2f0ca1f0d652c7f12485a333c461c2084366e3928a923ea024edff544e8f9b295cbaf77b657d28a21e18536fc88d0a9d5e1d6019666ac9c7a224ae5833d4fd9f500a2f9b9d414bd562b67eb14ee65f02f2a7f42a1a58394a92a116cd8a0665d964f1d0255ae3503f5af65f727dfde022800922dd61f7e682589bd0e6b27d29da8a61866391a52510e43c36bbc6951c4a703dc5812bcc5a9df327882141b6821445500983016a51e94634582612a1730c5eb5f69a401bec62c68730a1bf05bd15c5264b867a5a7235ca160b8ca1ec30d970cfa20331f8d853f48fe08e6bf0c0c61f9df6bc79b025f6ba3562a05b048f4f23df269c94a3489d8bd78edba196f0eb5aa972544a291d954a529176301b7c3f9ce8239ab7711a20e98a35fb916e99ec9a8bbdd993189ae36f455656661da9b017f7af33d3a55a6caedea098963b50ae3ee64c06fff39f285c57786aee0e537a7d4d2c383212c0e42811759526f118100d5953b57d19aeac88722e28216ec73d66050503d4436e3f94919fcf655853aca3b9f69cc27bd31da66396e67109b65357d200738f5cd1813f4f26198691dd72d316bad35410bbce55de7889a3154c66c8e6bc3691266c40b72c93a3628ed9df58a4815ab03f2eb3cfb342022fe8e12bbf99805332749e76400630789df3a153a20153e5919cb58c8dcde14d459048231e0775390c5f24bbe23b952c8138438ca2a5cbd9206884a66d52663c0bd85f6b0a0f711fdcf9c662db92db38f02ca338b4203538d6bcb5b733701657b9de4f1ba6070543ac74a55ac6af9617b8800d912acebd1ff2f5fc14d66851b8913ee7ab804f738e59355ca22f94e4875b3978dc4287f1f54cbb3c38fc101777ec96eb2764050ce3c78f94155b04a035281bab107d624cd702cbd0cff1baf2029b730ed7aca97d8313606ae8b8fae85ff8bbfa2f43375268e0f7fe0185542205099cde9ab3b274b9a046860468677d3c5e4baf57ad1565e96a516b4c9d03589bbbb8d0011f41b068ce7616689cd4374fef2dfc6dd2c58d47fd14806d97ceae685b40dacd0e7",
hex"e7d0ac0db485e6ea7cd90648d17fd4582cddc6dff2fe7443cd896661e78c061bf411008dbbbb8935d0c9b416a5965e56d17af5bae4c5d37786466068049a4b273babe9cd995020425518e07f0f8e267533f4a2bf8bff85ae8f8bae063631d897ca7aed30b72920af1bff0cbd2c70cd24d607b1ba8152034ab05541f9783cce504076b26ec97e7701c18fc3b3cb541f7f28c48d97b375484ef922ca5593e538f704b87aee13891b85664dc15f2fffd1ebac12d900887b61f96aac554ac73a547060baf1e49d7b650137735bcb6b8d5303428b33ca028fb32db92d669ccffd11f7a0b0f685bdc06326d5664a880692bd5c2aca388413c852b923be4bf2c5905377e031820459d414dedcc858cb19593e15203a153adf8907630064e74927330598f9bb128efe222034fb3cebf203ab15488af59ded28363ac9720bc4661269c36b8e6cc654319a88e75de5bc0b4135ad6b312dd71d699861f2f41318cdf53807207d35659b10676e3966da31bd27cc699f3bca3a8555f6fc1949f9e336443d505060d673ec1682e22287c8ea9ad1573b95d50081116f52591781420e2c2183c3d2d4a737e5e0ae8677c585f239ff6fc064eee30ab5638909eaedcaa6553a3df37a7f019bda61666555f436ae893199ddbba8c99ee916b95fa3980ea21177ab3982cef9c3b701631729a554d991a2442597aab50e6f19baed78bdd889344ac969f23df2f448b0052a56a36b5f029bc76bdff9610c0cbfe608fe483f858d1f3320fa0c970dc31ecab860a15c23a7a567b864525cd15bf01b0a73682cc6be01a4695febc530172a61824563941ea516309800554421681b14827832dfa9c5bc1258dc03a7c45169bc6bc3430e51521a396618a6a89dd2276b0ebd8925687e1fd62d92002802dedf27f765aff50335ae55021d4f965d66a0d86c112aa99483a5a1427f2a2ff065ee14eb672b56bd14d4b9f9a200f5d94f3d83e54a227a9cac669601d6e1d5a9d088fc3685e1218ad257b677afcb95b2f9e844f5df4e02ea23a928396e3684201c463c335a48127f2c650d1fcaf0d2322794e157fa8bb7d5dc1eec12d11d30fd97c3ce75c820f6f16ed6d570aca668f54e7ab28984f4b32e7637a3713561cc31bbcc0fb6a85d6d26e67272f4c81fe3f7c60c22c89de696c4284e9d499d4b2a4b2d9f2de0b4362973ae1be9784b4c9762b49fdbdd1933b6bcd1968683d6538ef4f5b0cdea31c9dfa252"
);
_reverseCase(
hex"256f381ed384275726227b7d36752c8bbdac04fea560b3cbdcef39dcbdbb80c916831b20f863ff29bdfe49bf2a6af7b9f4468d48d06e7fa1d60970bb1c5d13718a829e1c8ebd74f8d4787b7227395e5e438060d9be8343f1708ff2be12aecaea188b63931f7dfbd6d6b3f305289bd4b9bb069db611f903e12b9908e0ad38d56df2f1cc42bba9fe59fc4865e735fced0a9db28e64ecf68d6fbd354553d4d13dc0f7d15acd51d27904409499f4b3b0eb",
hex"ebb0b3f49994400479d251cd5ad1f7c03dd1d4534535bd6f8df6ec648eb29d0aedfc35e76548fc59fea9bb42ccf1f26dd538ade008992be103f911b69d06bbb9d49b2805f3b3d6d6fb7d1f93638b18eacaae12bef28f70f14383bed96080435e5e3927727b78d4f874bd8e1c9e828a71135d1cbb7009d6a17f6ed0488d46f4b9f76a2abf49febd29ff63f8201b8316c980bbbddc39efdccbb360a5fe04acbd8b2c75367d7b2226572784d31e386f25"
);
_reverseCase(
hex"884eccfb00e745636748296b19d2af4f038e5bfeb0f74f3ec89455c1a6449441a45be950fc07729e4bc04f99f50cea96e0ad6ee46b045a62d909e4536b8716823a5d3e856c6e978a49762799b8da769da7290caed9311be7789a08ce4df03d67bac7c3d72353d8e4b6caab595eaa9be07c4e8c542d70925ea4be4e62fef08438d39766fe6706d0689fb6f76ca5736def161de603630b66bc29024193ae134ca500d3b187d9bfd097b21a10fd0ed35037b4dae7b459f3d922bd92572aab5c01f6066025d18c6ef22934528a2e8bb4caf3385b0f75f2a331c1d6b18305c6920b926fd6065a5d6284b37d45e159b792b4b4035670bd0c703d0a70cc96381fbe8818bada613c7a123568346eb44a22b345aa8b437f2484951b95d40dbe1bf0d35af58823dec0de3ba1d6c480f705d31ffbf55e2e834d9d499eae4eb52c7e5a4109c1fb343b9c5defe9e0dd1cab2bac6c76099dc95ed67c408c50464996a5e273f47938de58ab276d663ee043bfa5ee8ae58294ac4a882f44a45ba4420f6736f15450676f6b283b59d6b833d2815e3edc335d9da81dbe57a93c68619a6ee352bf349136b00cb551fd3151a46e5057bbbc7b9980bb965555b3d43dd091c681abb4c82a3a48c86e955e05b36c392b870f98b8c5b13ef4e6b10ca37b44fe386b8f038c0e6fb03aa939cf8aa86a3b10c3a6c73572278816c5057b799f730bd8ec32f86fbcf04cbc2174906e2fc193c6ff01c527fd171c12d4a3eb9ba801f7a688d88b04825ecc5b370522efff0d5f1d7dae509d580b09321714682e2ac5ab1ad4f7a7f0033bc94df3dc9d77b59df9fb7efecbbbb5cc0e33becdac9a8139fb4b4691ee7c8e5ed50c87f8c97916ff475343334b0d53ae8313368a81fc299237108a5c80bbfc37bb0e20205579",
hex"795520200ebb37fcbb805c8a10379229fc818a361383ae530d4b33435347ff1679c9f8870cd55e8e7cee91464bfb39819aaccdbe330eccb5bbcbfe7efbf99db5779ddcf34dc93b03f0a7f7d41aabc52a2e68141732090b589d50ae7d1d5f0dffef2205375bcc5e82048bd888a6f701a89beba3d4121c17fd27c501ffc693c12f6e907421bc4cf0bc6ff832ecd80b739f797b05c51688277235c7a6c3103b6aa88acf39a93ab06f0e8c038f6b38fe447ba30cb1e6f43eb1c5b8980f872b396cb3055e956ec8483a2ac8b4ab81c691d03dd4b3555596bb80997bbcbb57506ea45131fd51b50cb0369134bf52e36e9a61683ca957be1da89d5d33dc3e5e81d233b8d6593b286b6f675054f136670f42a45ba4442f884aac9482e58aeea5bf43e03e666d27ab58de3879f473e2a5964946508c407cd65ec99d09766cac2bab1cdde0e9ef5d9c3b34fbc109415a7e2cb54eae9e499d4d832e5ef5fb1fd305f780c4d6a13bdec0de2388f55ad3f01bbe0dd4951b9584247f438baa45b3224ab46e346835127a3c61daba1888be1f3896cc700a3d700cbd705603b4b492b759e1457db384625d5a06d66f920b92c60583b1d6c131a3f2750f5b38f3cab48b2e8a523429f26e8cd1256006f6015cab2a5792bd22d9f359b4e7dab43750d30efd101ab297d0bfd987b1d300a54c13ae93410229bc660b6303e61d16ef6d73a56cf7b69f68d00667fe6697d33884f0fe624ebea45e92702d548c4e7ce09baa5e59abcab6e4d85323d7c3c7ba673df04dce089a78e71b31d9ae0c29a79d76dab8992776498a976e6c853e5d3a8216876b53e409d9625a046be46eade096ea0cf5994fc04b9e7207fc50e95ba4419444a6c15594c83e4ff7b0fe5b8e034fafd2196b2948676345e700fbcc4e88"
);
_reverseCase(
hex"0e37e673220e36b5df1ce3010cebf18b62528ab639d2f15bc38bc49481341eff83cd4bb153798c1a8d46c4102f2dbbd11309c7200c166f628e79356b195daf7983201009f13fc3a436d6af731489861e1ffc970c3c23fc5e92c49f376498e2c3957108ee0d9bc420a0f75a5dd67d40d5c7a589277765e46ab4d43420e383f90296594565b8ad0f048dc77dc5795ac384110fd28237e932c49c6024e43ee48210d44b49f9a8d8255be5b4a7876a16580a5e67e7bd9d020a27361a5cb1321bb9f37121a7e003a2a330b8e1b8f1585cc6b1ea120075c8fc30a15ed2826709d4c5502d81ca6da51af350ba851222c3647c67b2ca2f498be2a944997bd80aff4edf5b00b0fbdb7c75c7142fcb8f45fbca68e78f71308a42f94769f7e5287ca82d046e99724efc6228bea5b312fa187f8c8d7c6c13a6dbe9d4bedbadf99d2b289b24f4b9eb597f1a68e06d7306b1246beead5aec3f197fcc5bfc",
hex"fc5bcc7f193fec5aadee6b24b106736de0681a7f59ebb9f4249b282b9df9addbbed4e9dba6136c7c8d8c7f18fa12b3a5be2862fc4e72996e042da87c28e5f76947f9428a30718fe768cafb458fcb2f14c7757cdbfbb0005bdf4eff0ad87b9944a9e28b492fcab2677c64c3221285ba50f31aa56dca812d50c5d4096782d25ea130fcc8750012eab1c65c58f1b8e1b830a3a203e0a72171f3b91b32b15c1a36270a029dbde7675e0a58166a87a7b4e55b25d8a8f9494bd41082e43ee424609cc432e93782d20f1184c35a79c57dc78d040fadb86545599602f983e32034d4b46ae465772789a5c7d5407dd65d5af7a020c49b0dee087195c3e29864379fc4925efc233c0c97fc1f1e86891473afd636a4c33ff10910208379af5d196b35798e626f160c20c70913d1bb2d2f10c4468d1a8c7953b14bcd83ff1e348194c48bc35bf1d239b68a52628bf1eb0c01e31cdfb5360e2273e6370e"
);
_reverseCase(
hex"a7c548b6bd9094826c76783ba3273a9fdfa7d765b89706b94f9098d6e0285dd6c5b8cd045387a02373d352a1b624c93d2bdd8b675c04fa814576785ab46b1e961a6d03f690469bd1ac6bf37af6b5b1804a3b552d42d179417c3fc876252d39bc82a319fc80be0879240cf5133e34c5db43287c36d0d70a4e91927479a0e792544e8c9e44cd10d3f0c0c7ab90c80ae9a2a8ad0d224747b0c79856ed4364fee1e5092d2ec61ac280a04bf2f8e5d5efb8cec49f93112e97130f1375e6c43d7a9d88e225ce5c52810ad5fc305e2b48c7d8e9295dd0681286fcb1f766713e5cbc90a4071afa79d66a727cbfce8a8450f9459ee8a92349dff9d6357f7cce92f622cbd8a94a4d9a3d8909656b664afe44505c",
hex"5c5044fe4a666b6509893d9a4d4aa9d8cb22f692ce7c7f35d6f9df4923a9e89e45f950848acebf7c726ad679fa1a07a490bc5c3e7166f7b1fc861268d05d29e9d8c7482b5e30fcd50a81525cce25e2889d7a3dc4e675130f13972e11939fc4ceb8efd5e5f8f24ba080c21ac62e2d09e5e1fe6443ed5698c7b04747220dada8a2e90ac890abc7c0f0d310cd449e8c4e5492e7a0797492914e0ad7d0367c2843dbc5343e13f50c247908be80fc19a382bc392d2576c83f7c4179d1422d553b4a80b1b5f67af36bacd19b4690f6036d1a961e6bb45a78764581fa045c678bdd2b3dc924b6a152d37323a0875304cdb8c5d65d28e0d698904fb90697b865d7a7df9f3a27a33b78766c829490bdb648c5a7"
);
_reverseCase(
hex"a4bc9f3e22077ccc26727aecf619cbdaa7a7983cbff2c5e3730a2c895ce2b37c83ea0ebebac694804f8d979fb98976b5bbb30d65389403c5f7f2ff987ccbf1aec31c3a01dd71408a0a35b3e78a7b7b7e9c44424dc54b3cdb6ab6287b82d3491db1dbfeb1f2dfd49d78c17be99f4163c1ed5606066b2e90960688863b5c1812b3f9ea80e59da2a2dd4b03bae4da45cffc138e00cfc7ae64278af9e5472ff983317f33d71c8b9c13a2881d387ce94d8be4ecb75c3dc12d241c6d725b289c8a5b2fbd06978c11962571c2c2835705317ae250123e3dc6f9d0dbfe1ff7c54451a882a9dc2c0acd0202f9c22fcffea7f7f61c0a68a25caa57f74f0d75b235a6c675fe60d0d354695037e60f216735e5d73e9e12722ed22cd91cce9937010ff8f221a4f825d4b15acd888b0aa16e7faf527eac6ce32d838660c6f55535388445e9a25a12e2a67f3d347fb562c2fca6dfffa70057a84cc96f37f6d43d3031437d0092d2c557863447786439fe36709c908f392683afa52368402a1aa2fc3ce9d79c290e6781e13d3c49d944056093dc18af402a9d5776f916dbaf07230bad18631e25a058a5d1f5bc1284519d9c205e91b02d24d8fcca3d489bb235e8b57ab0d406bedc025553a6c5a68ffb728e8ba7d4ebbc8470e647c739d076bb1002c02ab245963224a570899f2c8eef201e4289a854d53923c8057ddb1bfbd75f3d07a2f5323dc79fec89d0c357a92d227d391fb376e0272d4583e828bc04cf36030bb30ce41dcf2e1ee8c92882bc870bc855c41bfe0e1d470e518302036f1b789b846ed59d954d76c671728aa6c58202ffe5ba1783448c79e89f677c493ebd023fd3169937683d260a5e6cdd6b322d0eb3b161acb3bf759c12b1904fb5df22541f95cc61e87a87ed516f53f02e0e3febcda9113c0c5be4f9554a2fe0ba2daaa4c8e7d84de62de1cad3c815a095bd06afc98d75ad4d6913d99e64ce7e258750e53c4d764e0564ff00b7ea30982420554af30ecae82bf013185655666d0d02d4ad1012de8b5b353886f02a42ef199cd4778577add6211a626ffb6f270ba72089c0399bed48d84daeb9c677f8362db67b33754e75fd12fe4701b40b02dd94dc0b9dd4649a538e93083893c34ea6dfa8e3087396072523ad50d1de6f611a29d503403234efc5fbb9cf4ba3067594946e01dec8ae6ca68904dc413f331635135da20657d595e452e593ce3d25013fbb1a0fec34b08ecb774c675d402cb28446ff6330c983279157ef5bc29756eb189c1bc5b42739dba1fc67ac3815254db8e139d112eb028981163b6b34dfa6f50071f321a3af1c8604c4856f998bcd38f616d582e8df1bb42d1baf24a0021fa0363a61194c1ebc7c3203a0d012ed5e2b759d201f421e27bba919d927829f75d86584f64a52134fdd0115767963efffbad42bc81e3affece0ed559af11d56745d230ac733130740b74cedc1f80cd5873892f3d93ed3ee746d5647be9bdf242c44e686e6895c518e5ec297788d493202a18e8bc0e241e0295cc347",
hex"47c35c29e041e2c08b8ea10232498d7897c25e8e515c89e686e6442c24df9bbe47566d74eed33ed9f3923887d50cf8c1ed4cb740071333c70a235d74561df19a55ede0ecff3a1ec82bd4baffef6379761501dd4f13524af68465d8759f8227d919a9bb271e421f209d752b5eed12d0a003327cbc1e4c19613a36a01f02a024af1b2db41bdfe882d516f638cd8b996f85c404861cafa321f37100f5a6df346b3b16818902eb12d139e1b84d251538ac67fca1db3927b4c51b9c18eb5697c25bef57912783c93063ff4684b22c405d674c77cb8eb034ec0f1abb3f01253dce93e552e495d55706a25d133516333f41dc0489a66caec8de016e94947506a34bcfb9fbc5ef34324003d5291a616fded150ad232507967308e3a8dfa64ec3933808938e539a64d49d0bdc94dd020bb40147fe12fd754e75337bb62d36f877c6b9ae4dd848ed9b39c08920a70b276ffb6f621a21d6ad778577d49c19ef422af08638355b8bde1210add4020d6d6655561813f02be8ca0ef34a5520249830eab700ff64054e764d3ce55087257ece649ed913694dad758dc9af06bd95a015c8d3cae12de64dd8e7c8a4aa2dbae02f4a55f9e45b0c3c11a9cdeb3f0e2ef0536f51ed877ae861cc951f5422dfb54f90b1129c75bfb3ac61b1b30e2d326bdd6c5e0a263d68379916d33f02bd3e497c679fe8798c448317bae5ff0282c5a68a7271c6764d959dd56e849b781b6f030283510e471d0efe1bc455c80b87bc8228c9e81e2ecf1de40cb30b0336cf04bc28e883452d27e076b31f397d222da957c3d089ec9fc73d32f5a2073d5fd7fb1bdb7d05c82339d554a889421e20ef8e2c9f8970a524329645b22ac00210bb76d039c747e67084bcebd4a78b8e72fb8fa6c5a6535502dcbe06d4b07ab5e835b29b483dcafcd8242db0915e209c9d518412bcf5d1a558a0251e6318ad0b2307afdb16f976579d2a40af18dc93600544d9493c3de181670e299cd7e93cfca21a2a406823a5af8326398f909c7036fe39647847348657c5d292007d4331303dd4f6376fc94ca85700a7ffdfa6fcc262b57f343d7fa6e2125aa2e94584383555f5c66086832de36cac7e52af7f6ea10a8b88cd5ab1d425f8a421f2f80f013799ce1cd92cd22e72129e3ed7e53567210fe637506954d3d060fe75c6a635b2750d4ff757aa5ca2680a1cf6f7a7fecf2fc2f90202cd0a2cdca982a85144c5f71ffedbd0f9c63d3e1250e27a31055783c2c2712596118c9706bd2f5b8a9c285b726d1c242dc13d5cb7ece48b4de97c381d88a2139c8b1cd7337f3183f92f47e5f98a2764aec7cf008e13fccf45dae4ba034bdda2a29de580eaf9b312185c3b86880696902e6b060656edc163419fe97bc1789dd4dff2b1fedbb11d49d3827b28b66adb3c4bc54d42449c7e7b7b8ae7b3350a8a4071dd013a1cc3aef1cb7c98fff2f7c5039438650db3bbb57689b99f978d4f8094c6babe0eea837cb3e25c892c0a73e3c5f2bf3c98a7a7dacb19f6ec7a7226cc7c07223e9fbca4"
);
_reverseCase(
hex"d2f59c0c2c04693866b6a0f41b1ee19ca72124e65b6981b3daab5f4cbe7bc413cd2dc8575fd174e33103bd8b3f8b8797bdbe68d93f0c13326a65cf86250d6052263bce5d834c409a19eb0e6460e060280c0e3b21f59fa161799444b4beb7178e14e0122f4923301f0fb5a0014ecbdc2c80bfde9040c737c970c8eb41c8d95463eb23fc1c1cc91e5fe17da17eddfa13edbd4c3ecd51d36625e8da28ef894e66f6dd27fb1629e0548d9433498cd75eb5b366ffb24689dc94137480deb07637d205d76a18e357818e9e2d40389675b525c8f5a0df2c20b1721c75a448d61070cddb2b4adc65fe0e67fe8dd402c6c5a473ff49c6d27d7deba03809b1475cda98b8ddc57abcaa579ca37a7a6e618c1718ddcd177de8790e961fff0a19d0ad388b03cd61c22619d860f67f63b080558c06b6d94a0131deb2b034edade6b6dad5848bc3c0cc119c3bdb900595cae322d8b7872fba0fa0abcb9f60ba9697618431fc78faa967956edf75a30b420c99b6093c320ccf186e000707f66a0cb75f99431037dbc893184f9959bcb1879c8a0c392f597baf7cd7255b7b9549fd80a5e3f7e12cbce824facc9b994fc22b57cb6402997cf929db09bd4cfc93ac9fa31c00ba32ad6f01e421c6314732ccbacd50ff323ee0507e147c6895444fac97de445e030a3a5b58117f7535f2e2dd11ae548b65758259ac8d3d301e0859f826996feab514f5f6ca1678a826ef4a642911f76fcbfa77e5e6947f486319cd2640985dd1f2663df3e69c683faaa2b8cdc7d9ad932d794838af34c22bca62f76d83841a5fe92811ff81f353775597bb8a19aeefea67847b30d27e7dfa6a542801a73844fb8a1fc0c24ca952b94c4ab6af5353cbb49e495dcf6a341d3ae1ea344cc9952b56c99676d86ba1f5f40f3d3ad85e156a202439a78d680283824bb2ca9b471249a4beb875a8919fa7ecaf20d3917335abf7c419c199f3c311b89199b3654bc56342e6e19d04813841556e5662181a4e8b9c9f5d01ce8d5c2bbd05959829d49056e358a02adc197052637923aabef4084e7e57034f2de3598cf1cf76a78292023901e77676cebe9b25d9f39c551b7b80e0ec3b5328b8dac34a9a7cd3bd08debf73f737248914ab195398fba6ed0f90792fa5b072c1a8e2f3cb40af009744f52facedaf7c493df039d526661a647945958ecb4627dd2c801c25390c6072a6b1d9e8dd54e030c9899e220bcbff1d9ba24644d2e5e7d86e594a001459d0129f02bfd0197dbfbe21f81c508f01ed492b07e78e4c15124ae7fe24fdb46382053d253210cd536a338f4f570903f4f30db45ebd8af473959b09c9161380f7b2f7f9dbd3d0978720d1b41a76429aea09bfda1f1443dd3afc98ec542ab85bb0295d22548ef5a835c7508613b6f4ebf190b66d65a1011d9c51d719766d30aa2f47f88500b0c8f8403173e994b88d215f647da5c2838baf6f46674cf1e73cfbbc8216fd78346eed693fefd007b7d69b6613d92c21f5b87d5db842f742ad65167b37691cd16503d7005d65af464b6f253e58da37739391890962e45e214433703c96ec5c9b5f64387635c0916c3d7b7e3b8180bf2e80cb95c93b4d7530588030d56bfa84ec64b63d79251b2e633ff26df63737cc181d58f32c5f952d78aaf87642b09879fb7d45a45e4ac91f4bbecaafa5859ece59e4ef715d51dec0b6eb585b27cf4496e5db940e81433c1e5baa33414c0ce123d104006ea041f751335bbf9da61555c57d346ecdfcc2e746b2a82127e5ceef47cf63a8d32b326135625bf17e1e53dc49a507f862dfe251a45fd846fb04ec3b05fb3ba67c886fb79cf3f68a3a8dc67b41a25fb09cface17386f5ff9a3cee572fd6cfe059c6a493de1eb779777d1f2f742505be3c14ae258691b22fbba524554c6530939315022fc9f7a198950096b86225abc5a73735d75d563ef397832c230037053250cd4dcb10f1fdebe4fb12a2851ae6f41c5d0cfb37ada7b5f24244a9f538736748190dc0fad060eec2572baa3610554f214d938f7217bd8cd99e59c4012d4aa8330600f003b6655bc3f1128480a5253d6f5c29c84af822c0a08be3938b3ae50dcac084c83d783a49cb12ae99c0a1b1e683a0d8053f75375c92344ef731cfb9e7935cf08c6a7d59280f54ac544f9d4f0577bfc898487afdc6b1879f4391a029eaaa2c4b505688f630275c7aeb4f0e6d4ad57fb9a0c0ad30ab3f0a21752706b080c4b0316b75e56a45eed4a2fe9b2edb6bd9e6ced8b159e",
hex"9e158bed6c9ebdb6edb2e92f4aed5ea4565eb716034b0c086b705217a2f0b30ad30a0c9afb57add4e6f0b4aec77502638f6805b5c4a2aa9e021a39f479186bdcaf878489fc7b57f0d4f944c54af58092d5a7c608cf35799efb1c73ef4423c97553f753800d3a681e1b0a9ce92ab19ca483d7834c08acdc50aeb33839be080a2c82af849cc2f5d653520a4828113fbc55663b000f603083aad412409ce599cdd87b21f738d914f2540561a3ba7225ec0e06ad0fdc9081743687539f4a24245f7bda7ab3cfd0c5416fae51282ab14fbede1f0fb1dcd40c2553700330c2327839ef63d5755d73735abc5a22866b095089197a9ffc225031390953c6544552bafb221b6958e24ac1e35b5042f7f2d1779777ebe13d496a9c05fe6cfd72e5cea3f95f6f3817cefa9cb05fa2417bc68d3a8af6f39cb76f887ca63bfb053bec04fb46d85fa451e2df62f807a549dc531e7ef15b623561322bd3a863cf47efcee52721a8b246e7c2fccd6e347dc55515a69dbf5b3351f741a06e0004d123e10c4c4133aa5b1e3c43810e94dbe59644cf275b58ebb6c0de515d71efe459ce9e85a5afcabe4b1fc94a5ea4457dfb7998b04276f8aa782d955f2cf3581d18cc3737f66df23f632e1b25793db664ec84fa6bd530805830754d3bc995cb802ebf80813b7e7b3d6c91c0357638645f9b5cec963c703344215ee462098991937337da583e256f4b46af655d00d70365d11c69377b1665ad42f742b85d7db8f5212cd913669bd6b707d0ef3f69ed6e3478fd1682bcfb3ce7f14c67466faf8b83c2a57d645f218db894e9733140f8c8b00085f8472faa306d7619d7519c1d01a1656db690f1ebf4b6138650c735a8f58e54225d29b05bb82a54ec98fc3add43141fdabf09ea9a42761ab4d1208797d0d3dbf9f7b2f7801316c9099b9573f48abd5eb40df3f40309574f8f336a53cd1032253d058263b4fd24fee74a12154c8ee7072b49ed018f501cf821bebf7d19d0bf029f12d05914004a596ed8e7e5d24446a29b1dffcb0b229e89c930e054dde8d9b1a672600c39251c802cdd2746cb8e954579641a6626d539f03d497cafedac2ff5449700af40cbf3e2a8c172b0a52f79900feda6fb985319ab14892437f773bfde08bdd37c9a4ac3dab828533bece0807b1b559cf3d9259bbece7676e70139029282a776cff18c59e32d4f03577e4e08f4beaa237963527019dc2aa058e35690d429989505bd2b5c8dce015d9f9c8b4e1a1862566e55413881049de1e64263c54b65b39991b811c3f399c119c4f7ab357391d320afeca79f91a875b8bea44912479bcab24b828302688da73924206a155ed83a3d0ff4f5a16bd87696c9562b95c94c34eae13a1d346acf5d499eb4cb5353afb64a4cb952a94cc2c01f8afb4438a70128546afa7d7ed2307b8467eaefae198abb97557753f381ff1128e95f1a84836df762ca2bc234af3848792d93add9c7cdb8a2aa3f689ce6f33d66f2d15d984026cd1963487f94e6e577facb6ff71129644aef26a87816caf6f514b5ea6f9926f859081e303d8dac598275658b54ae11dde2f235757f11585b3a0a035e44de97ac4f4495687c147e50e03e32ff50cdbacc324731c621e4016fad32ba001ca39fac93fc4cbd09db29f97c990264cb572bc24f999bccfa24e8bc2ce1f7e3a580fd49957b5b25d77caf7b592f390c8a9c87b1bc59994f1893c8db371043995fb70c6af60707006e18cf0c323c09b6990c420ba375df6e9567a9fa78fc3184619796ba609fcbaba00fba2f87b7d822e3ca950590db3b9c11ccc0c38b84d5dab6e6aded34b0b2de31014ad9b6068c5580b0637ff660d81926c261cd038b38add0190aff1f960e79e87d17cddd18178c616e7a7aa39c57aabc7ac5ddb898da5c47b10938a0eb7d7dd2c649ff73a4c5c602d48dfe670efe65dc4a2bdbcd7010d648a4751c72b1202cdfa0f5c825b5759638402d9e8e8157e3186ad705d23776b0de80741394dc8946b2ff66b3b55ed78c4933948d54e02916fb27ddf6664e89ef28dae82566d351cd3e4cbded13fadd7ea17de15f1ec91c1cfc23eb6354d9c841ebc870c937c74090debf802cdccb4e01a0b50f1f3023492f12e0148e17b7beb444947961a19ff5213b0e0c2860e060640eeb199a404c835dce3b2652600d2586cf656a32130c3fd968bebd97878b3f8bbd0331e374d15f57c82dcd13c47bbe4c5fabdab381695be62421a79ce11e1bf4a0b6663869042c0c9cf5d2"
);
_reverseCase(
hex"b8515bd56124bbf28910501daf43fcda4b632f76ef1752aec489cdb5",
hex"b5cd89c4ae5217ef762f634bdafc43af1d501089f2bb2461d55b51b8"
);
_reverseCase(
hex"a0a3c4ceb924ccedb94ce97c961c71c043daa52d5e4e9dd8b06e6573dbe8130e2bd8b9eb511e8bc488a0588b6556215f38de4a7f5ff80b66028aec8acff76c1a395262b05e397161a6b9105032516e0e86f597b38efde52ab321b0fe22918562ca173f9657217157a4dbec3d23fe99ec7a0c9040fc961b07b304ea99741fbf53376d381886c20d82f01ec440ac2f0b130d6ad11f754ff4db79d9f73634b3ebaa42fb1dd66d29e32ba962d1737bbb0944c87453511ef68022a20476b2a6a6d570388ab7cca20e4e98e5cbdbb8a1bcd83e70c6b073b3e56c067af9399f949b307f496b9c45c00b99d0c389cb4ae93732203f56601321a20b5c58b6e1ecfaf7cfff1f1c53c9f557e708775c99a925055493a0bf59269df06987a32cfadd88532fe46c28a29f5108f70c6fd4ce4b088ee2e5efad94f88d7ea53ce8a0b187013e9a88ed3991ca5ef10c7a5846026c7c9094116cabad89feb48c1c80262edeb51ab5dad8d58dae8589234379fe78dd0e7774514b0577e26201726fdd68ceb98b68853489196e00f29d000e964272940f515bc72e1eee7804c6613cc1a254b3c7ebc8ffa25c0b341580dc84b1f09688aca8596aeba4d06cfb95afe20f09ee3b9576fd5cec3c9ea03c979e34f31f4f99360d38de2435cdfa4029aa68156e0860a2cdab7b8105e065d18f739b0b9d498e93cbcb0075cce55b0b2a209165a25234db2adcc43445a446a2b0ab93008d79e77ae3853f80dbef65de83f1edab5cbb33d9d0f0c3a076308cbe054f935ac3488fe2900c33c8e05540839ff9b8303f5f69f99d132498c96d9e822bd38457b70714ea5e16fd3d7e32c048490f140dabbf2c2c28cd47b11dd391b1a7a103c334d15e71cbad3ac6ac1275b8aa033f265c3113241138a130e51be3723cbd766ffce13ab4e8165cd978d9fd2cec7f164ab9a3e16c67a413764dd56a6bcbb008210ba00cc8612837e29c91a5b4233a098bd8a521d96b4733633cdd31906fbccf6bf053990ab2cd5c05f12cae0dd9e8955da8636611d4e026af461a32eefb088ad4b36a550980f85d5191a7b9db32215ef7593e3925240b6fc160b23b5734d3a846633b726e0205730ab5c544360026ec6ca841681cf1f1ac9e",
hex"9eacf1f11c6841a86cec26003644c5b50a7305026e723b6346a8d334573bb260c16f0b2425393e59f75e2132dbb9a791515df88009556ab3d48a08fbee321a46af26e0d4116663a85d95e8d90dae2cf1055ccdb20a9953f06bcfbc6f9031dd3c6333476bd921a5d88b093a23b4a5919ce2372861c80ca00b2108b0cb6b6ad54d7613a4676ce1a3b94a167fec2cfdd978d95c16e8b43ae1fc6f76bd3c72e31be530a138112413315c263f03aab87512acc63aadcb715ed134c303a1a7b191d31db147cd282c2cbfab0d140f4948c0327e3dfd165eea1407b75784d32b829e6dc99824139df9695f3f30b8f99f834055e0c8330c90e28f48c35a934f05be8c3076a0c3f0d0d933bb5cabedf183de65efdb803f85e37ae7798d0093abb0a246a44534c4dc2adb3452a26591202a0b5be5cc7500cbcb938e499d0b9b738fd165e005817babcda260086e1568aa2940facd3524de380d36994f1ff3349e973ca09e3cec5cfd76953bee090fe2af95fb6cd0a4eb6a59a8ac8896f0b184dc8015340b5ca2ffc8ebc7b354a2c13c61c60478ee1e2ec75b510f947242960e009df2006e19893485688bb9ce68dd6f720162e277054b5174770edd78fe7943238985ae8dd5d8dab51ab5de2e26801c8cb4fe89adab6c1194907c6c0246587a0cf15eca9139ed889a3e0187b1a0e83ca57e8df894adefe5e28e084bced46f0cf708519fa2286ce42f5388ddfa2ca38769f09d2659bfa093540525a9995c7708e757f5c9531c1fffcff7faece1b6585c0ba2211360563f203237e94acb89c3d0990bc0459c6b497f309b949f39f97a066ce5b373b0c6703ed8bca1b8dbcbe5984e0ea2ccb78a3870d5a6a6b27604a22280f61e515374c84409bb7b73d162a92be3296dd61dfb42aaebb33436f7d979dbf44f751fd16a0d130b2fac40c41ef0820dc28618386d3753bf1f7499ea04b3071b96fc40900c7aec99fe233decdba457712157963f17ca62859122feb021b32ae5fd8eb397f5860e6e51325010b9a66171395eb06252391a6cf7cf8aec8a02660bf85f7f4ade385f2156658b58a088c48b1e51ebb9d82b0e13e8db73656eb0d89d4e5e2da5da43c0711c967ce94cb9edcc24b9cec4a3a0"
);
_reverseCase(
hex"5512c4ff16bd1dd00fa16ca0b692d7113f59a5ae9f513f24cf592ac0af3ff6b5e2aaa5a6f893ecfa6a22396cc292fdbeb7506717bb49a2969c16170f9149dc5e1297daa82172db1bf8a4220b994d970962d889f8acca7086ba85038adc2dd70ddabdc25c4aa0d141eba55dd6f0e68d14442fb5a10058bdaa449cdac66a06910254b8e49ce70a4efb4f39b09463cfb32cd82b5ad2acc2e19a3f0a982e1bbbbb351149acb9707544193ba7611dbb8b63d14915adcf108d3d21bedd20acb65d416ba2dd55821b42f4ec7dbbfb7b960b07e8e14149e979075e07468f87801b85d0074f738002365198948bce4956adb73309231f759c3ea72c5e345341fe5131d169f931f63624a0fc42f95eb9e9e22f19ab83e99f5ae3d00eef8760c0a1a3c729559954c7f4e6f8c1e2348388e651ad1c4b4e713af0a69f8c21fe8c6bcb77d5f91cee0e4a31297988b85acc82037c54284bc46427c4c98f8d8fe650a04cb6e9adfe3c36e5111fe86d9c5cbd7597a8dc27fff0c25be0fc03456a366ed6273bb6a11d164d588699611854bb75f1c35146a301e3c0e562493cc529c471ca16171a3bc7993bb113e88fd0fb6291741db9cc10dbaccdae812a02b87bf5f8724063854169bc208b3865403bfc5bd67f5b6a10bd657918f63fe7b2b51d46ddb8e35dd00d3945ebe23867f3402f51903ed1a6f64031473d6e02a39287a4f6a016897c02ea766ec3945d765aa844f124cbc402fc3914942a1f0a7436285fea263b329af4ade58e649ac675d119bea485f5f3d64c17444f27c2cdf921d8669156b5418978893ce8b0002b3ba0a99b5ac2b32dca47b175bad508a80824c59b0d604d1b3b2321cbaa85bc8963f04a85ddb7add22f9807a5e34907b66996cb5016c1c7bbbff6f30b6dbd942acbac226922b0803cae09206e0aa5d8e5bc404d6a6544e6233477a359af67f79f94edaecc8838d1bca6aa1860c356b3b7244598cd57aca808fae876a8ab4d3a21c26db2621c75e185ddc7f5616064af558345e998dce9f6b9ae4de6173dc61935040eb4f7954fc00fb474881b7fe086c0201c71728469721290ea769b889ae3edc5f4ac044438638ce25e58f712ddb2cfb5fca5e1537d586a39949de3b0f68f68aefedd0e5202c7d91c88dc4d1672d2eb7b0502eb47b0525efbdf9362cb624f8c1ba6449308e3824f86237b277692756394744dd5aa44d3ad332603762063d85e821e97f4104d6e7077c6f5769611715bb736acf58b2328a74db5327e5ae6160e369804b5d4f21dcb1ddc2e36e4224382836d35d829b8ee479444e3fedb9561347e5d3d7407cfa7476f3693cd2cc143290f489c2c2356397000a2a2151049c2ae456f920095882a8b690c0cf47ae7ecb39d317908f1d921d536e4c57e071d42b9930a9fc66a735d007d553aea6ed49dc6fd39b7afd8ed3bae5b05f05410e0702774a49ca605250d001831efbb0434cc64aae9b431564e8d203020436ea6bf17604d3cd02eba51ac4d1eee1680a03b5051de2a73fc454fc309151c10b5f2aa78fba2c6175e79bb8dd487f23738dde1af4d91f3af69dff683700a987d8f67d8a5a96aec13a0242119dfc00b30be26643aaaab0f5d81a14fcc2f88608d6b6542f17c6fb16f1f318c28526199e51293a738c0d02815164772cb245cfebb1f40bf297a86090d0faac210f8e9f1fdfd8bfe6808589167282f3f27f8d904dd84b849b846fbfdd035211d093a3b97c892d7f8f20d65613ffc30b85646b03b88428ef58bdd57022f5d08ee93002630dee984e82ca8ea2bf17f3cf752958b17efd4c78985c9b4f348e50d03313255cd2400ca405cd8dcc9e3b8e6e32e84b8b40ac12dd0c562ce6bee640d75a8bb1071e45cd5dc4a035990d5efd8525f698e4eaacf534b74527f2931f54a9b834fd54d5bbc5e41ea550629e4a4a4bed4c82ad49c96392ad69cd0982c8b75d974f25271f9a9ec1af761af6961eb8810df19c2b915246bafb2ef79f7917bdd7c32f2b1b7e050d9af5d8638204fcabbff1ffa8858a42f90a0129a55ae5585ab2965e89d14746daf76697412341aa48e7b7d4693cd0bfccd4e5f07d9a1c2b5d9238196272b36dbe07f8a653be7585198a030e7a4fd3e6e5db57c38256fcc2d8fe5f94e8b0c0e992332a804540e949b9067821a8a4036e839d1571b7905ea1ccfd5d7a7cb2ff92acd79038e12056d63139bb3e4439c32eea7a2508a0191071f83870e97801b1debfab27321d26a019912474e422b7918bd50af5883a1691debdc9d41d6bfd824e94a6230225dc190bcf19dcec2a5f8eda21e5df8cfc7a93f600f3fa28a70",
hex"708aa23f0f603fa9c7cff85d1ea2edf8a5c2ce9df1bc90c15d2230624ae924d8bfd6419ddceb1d69a18358af50bd18792b424e471299016ad22173b2faeb1d1b80970e87831f0791018a50a2a7ee329c43e4b39b13636d05128e0379cd2af92fcba7d7d5cf1cea05791b57d139e836408a1a8267909b940e5404a83223990e0c8b4ef9e58f2dcc6f25387cb55d6e3efda4e730a0985158e73b658a7fe0db362b27968123d9b5c2a1d9075f4ecdfc0bcd93467d7b8ea41a3412746976af6d74149de86529ab8555ae559a12a0902fa45888fa1fffbbca4f2038865dafd950e0b7b1f2327cdd7b91f779efb2af6b2415b9c219df1088eb6169af61f71aeca9f97152f274d9758b2c98d09cd62a39969cd42ac8d4bea4a4e4290655ea415ebc5b4dd54f839b4af531297f52744b53cfaa4e8e695f52d8efd59059034adcd55ce47110bba8750d64ee6bce62c5d02dc10ab4b8842ee3e6b8e3c9dcd85c40ca0024cd553231030de548f3b4c98589c7d4ef178b9552f73c7ff12beaa82ce884e9de30260093ee085d2f0257dd8bf58e42883bb04656b830fc3f61650df2f8d792c8973b3a091d2135d0fdfb46b849b884dd04d9f8273f2f286791580868fe8bfdfdf1e9f810c2aa0f0d09867a29bf401fbbfe5c24cb7247161528d0c038a79312e5996152288c311f6fb16f7cf142656b8d60882fcc4fa1815d0fabaa3a6426be300bc0df192124a013ec6aa9a5d8678f7d980a7083f6df69aff3914dafe1dd3837f287d48dbb795e17c6a2fb78aaf2b5101c1509c34f45fc732ade51503ba08016ee1e4dac51ba2ed03c4d6017bfa66e432030208d4e5631b4e9aa64cc3404bbef3118000d2505a69ca4742770e01054f0055bae3bedd8afb739fdc69dd46eea3a557d005d736ac69f0a93b9421d077ec5e436d521d9f10879319db3ece77af40c0c698b2a889500926f45aec2491015a2a200703956232c9c480f2943c12ccd93366f47a7cf07743d5d7e346195dbfee3449447eeb829d8356d83824322e4362edc1dcb1df2d4b50498360e16e65a7e32b54da728238bf5ac36b75b71119676f5c677706e4d10f4971e825ed8632076032633add344aad54d749463759276277b23864f82e3089344a61b8c4f62cb6293dffb5e52b047eb02057bebd272164ddc881cd9c702520eddfeae688ff6b0e39d94396a587d53e1a5fcb5cfb2dd12f7585ee28c63384404acf4c5ede39a889b76ea901272698472711c20c086e07f1b8874b40fc04f95f7b40e043519c63d17e64daeb9f6e9dc98e9458355af646061f5c7dd85e1751c62b26dc2213a4daba876e8fa08a8ac57cd984524b7b356c36018aaa6bcd13888ccaeed949ff767af59a3773423e644656a4d40bce5d8a50a6e2009ae3c80b0226922accb2a94bd6d0bf3f6bfbbc7c11650cb9669b60749e3a507982fd2adb7dd854af06389bc85aacb21233b1b4d600d9bc52408a808d5ba75b147ca2db3c25a9ba9a03b2b00b0e83c89788941b5569166d821f9cdc2274f44174cd6f3f585a4be19d175c69a648ee5adf49a323b26ea5f2836740a1f2a941439fc02c4cb24f144a85a765d94c36e76ea027c8916a0f6a48792a3026e3d473140f6a6d13e90512f40f36738e2eb45390dd05de3b8dd461db5b2e73ff6187965bd106a5b7fd65bfc3b4065388b20bc694185634072f8f57bb8022a81aecdacdb10ccb91d749162fbd08fe813b13b99c73b1a1716ca71c429c53c4962e5c0e301a34651c3f175bb5418619986584d161da1b63b27d66e366a4503fce05bc2f0ff27dca89775bd5c9c6de81f11e5363cfeade9b64ca050e68f8d8fc9c42764c44b28547c0382cc5ab8887929314a0eee1cf9d577cb6b8cfe218c9fa6f03a714e4b1cad51e6888334e2c1f8e6f4c754995529c7a3a1c06087ef0ed0e35a9fe983ab192fe2e9b95ef942fca02436f631f969d13151fe4153345e2ca73e9c751f230933b7ad5649ce8b949851360280734f07d0851b80878f46075e0779e94941e1e8070b967bfbbb7decf4421b8255dda26b415db6ac20ddbe213d8d10cfad1549d1638bbb1d61a73b19447570b9ac491135bbbb1b2e980a3f9ae1c2acd25a2bd82cb3cf6394b0394ffb4e0ae79ce4b8540291066ac6da9c44aabd5800a1b52f44148de6f0d65da5eb41d1a04a5cc2bdda0dd72ddc8a0385ba8670caacf889d86209974d990b22a4f81bdb7221a8da97125edc49910f17169c96a249bb176750b7befd92c26c39226afaec93f8a6a5aae2b5f63fafc02a59cf243f519faea5593f11d792b6a06ca10fd01dbd16ffc41255"
);
_reverseCase(
hex"b2bacfe6f337292e95e3d766e679a70fdb50871c4f0d9d41d61b6c5dffc85e886f583f442ab45414161a940c3834c70602779c2c6fee4f38d9bc573c8dd494b3bd7119b37242bd6dfed92b03b622b9a8ba6e57a032e31c6870cecbb53e55068d515a3fa75140c77e93e175530a93d0c35831a93fd9ce19e739cc8e5a832ea0b3f7570952a514778efcba7c353d7087b6faa6cd022f2d965af11c22c62a660711338b5badc0e0ed12894344be6795685e7df0edeba2843955c727755d82def39220a1da58a34a86ce27ac9c1bc59bff446098f03d3510faab5af8e26332e1b334657858e52e17e627c6f7187270e4aaa70900245fe6629ded55018f9c0e45bf28768700b7a952632faba22ec4bf873dcdd71bbe76ac162de720763b81988f19c53500ae77b8e5191e1137a6ecff94eea774749564f4c9ff3f38febbc5f2dade879fb9372a7baaf0ec21e508767f13cebb38bfd4528deaf15a58ae2e31ccde1dab7a2aa2beb58c3843f1c08a81fe5ebab6e875e82f28afc101b0c9705a3b9c1fd2d7c04b39805fc0d4b164aae1ee784c0610c4889e7e57b63af7fa71ce052f91828ae974bbafcd805be12ca7a6b45e7398bb444fbc0335aebdd9c6ea236a9a6e4f9cc44f661857a662283d14261a48d3bdfc423f49ed0e7a444a769afa317135592f4c3c4f8eb0058669a63811d30823208e5b1f40a0d5e65ed29680f3a4a7f5b4fc858ea207ce635354fea2cbac3906f20e178cb3b3bcee9ec8c6a1ce990afe85bf88c101b4f6b50ea4e1f83a5a8ec269268136a2d631542f0bc70b89b9e78e4117ff3b15e5a7f294bb6b23431cdce64dd88b84c67743",
hex"4377c6848bd84de6dc1c43236bbb94f2a7e5153bff17418ee7b9890bc70b2f5431d6a236812669c28e5a3af8e1a40eb5f6b401c188bf85fe0a99cea1c6c89eeebcb3b38c170ef20639accba2fe545363ce07a28e85fcb4f5a7a4f38096d25ee6d5a0401f5b8e202308d31138a6698605b08e4f3c4c2f59357131fa9a764a447a0eed493f42fcbdd3481a26143d2862a65718664fc49c4f6e9a6a23eac6d9bdae3503bc4f44bb98735eb4a6a72ce15b80cdafbb74e98a82912f05ce71faf73ab6577e9e88c410064c78eee1aa64b1d4c05f80394bc0d7d21f9c3b5a70c9b001c1af282fe875e8b6ba5efe818ac0f143388cb5bea22a7aab1ddecc312eae585af1ea8d52d4bf38bbce137f7608e521ecf0aa7b2a37b99f87dedaf2c5bbfe383fffc9f464957474a7ee94ffeca637111e19e5b877ae0035c5198f98813b7620e72d16ac76be1bd7cd3d87bfc42ea2ab2f6352a9b700877628bf450e9c8f0155ed9d62e65f240009a7aae4707218f7c627e6172ee558786534b3e13263e2f85aabfa10353df0986044ff9bc51b9cac27ce864aa358daa12092f3de825d7527c7553984a2ebedf07d5e689567be44438912ede0c0ad5b8b331107662ac6221cf15a962d2f02cda6fab687703d357cbafc8e7714a5520957f7b3a02e835a8ecc39e719ced93fa93158c3d0930a5375e1937ec74051a73f5a518d06553eb5cbce70681ce332a0576ebaa8b922b6032bd9fe6dbd4272b31971bdb394d48d3c57bcd9384fee6f2c9c770206c734380c941a161454b42a443f586f885ec8ff5d6c1bd6419d0d4f1c8750db0fa779e666d7e3952e2937f3e6cfbab2"
);
_reverseCase(
hex"8a4c6130a7531d28045d89142aacca97cf796813e029fec6345c1f24e3ca78fef3568cb0c777dc9da7990ebdb892622019fa29f18e754ffd3fc9b6be44bce700346d1f43950ef62074b6446e1ea020d9902b912c99670c3819079d647ac397ea1f97699a0c7f1960487e50255cea9396e53228529729ce5c6a37034a1fe09a445c2e98681edf3c10aeeb8bd0b013ca3d9b3a7a6c0045c531154eb959fa756007f28747fd92869b15c9bfb22f20b7c7e40ca81f385b31f2acc9c39432f1839f7fba144fbdee3a16510d51c1ea34ac6bc9f789d9fbc4e83316681dcdfb81e23ff89f3e02d126c8f01a99b691790fed91d4c0eb58b581ecd0eb85d78ce0df9e7885ce38e20ae6f46967e48b583ccdb8e8391a408c5133bbb4c943cb646f2e3f3c13fcdb85541f29176dbded5a65a3155e9c9d304b1d50619399b436b376aa14451cb05dde1bf665e437a7781a12a500e0630cad0d9394ccb4ecaa55ec7f2e6757db2fec70cdddeadddfec906b90a395790c340285173d3503f1b2a106b46c82f2031b977838d69ad849985cfe015d5004991eb9821442db535e4a05c6298979aa8e910e4616a67d5445c0156fff6ae1ea37efbd99002bb6ad4716876bfe162065793506e45a134f9c4bb5ccbe1601bfd7ebbb29881dd3bedddb544ecbc6234cbeb036ca0d058be5855178f4dcbbe3d662834715961e7f05702722e7e2924c500c0482eea8fb0932ab4ccdcdc0e83fb7dab2907256b3222d99b6cff5b66a7cad77af0bcdfd7060e25c162943876ff7eee440236b7cb83e5d083d63d97f6ce301cfe9e35aad70e426aa7c4508605957086a3e30fd9c3a7380291352847f039e4a7b9691394c8eb572ae20232e9d8b60298b5dbc908cc742393df83948f2b52c9ef6a2e9390fbcbee7737b7513e2847914fdde169d4e6d6772402b91547e67fa4279e3afc271ec3084edf7f98dbef83bc67585454aaf99907f6c16a36f626f6dcaf092d293b3646ce63efcfe3695dfd710f6b3119f92bbee4eb03c5dd36baa72c3d2e365570cce50c18403d6400482755602009aaf34257a62db6ec3683cd03e9aa8bc169676dff8efd84c947fb526fcfa7b363ceba825fb3d025bc3d69ec81d1b465473a73db86cb10f7ee23b8218f25c15d40df1b20bc3c8754470d0e0e77a2ba187b8dcf52b42c6233ba002995fcdd45346a6d1cc7731259a81b5aedf86acd5c163b91a6edeb02522e21c3c65b355e765318e7c40b37c41ea116d98b202757fccb90b",
hex"0bb9cc7f7502b2986d11ea417cb3407c8e3165e755b3653c1ce22225b0de6e1ab963c1d5ac86dfaeb5819a253177ccd1a64653d4cd5f9902a03b23c6422bf5dcb887a12b7ae7e0d0704475c8c30bb2f10dd4155cf218823be27e0fb16cb83da77354461b1dc89ed6c35b023dfb25a8eb3c367bfafc26b57f944cd8eff8df769616bca89a3ed03c68c36edb627a2534af9a00025675820440d60384c150ce0c5765e3d2c372aa6bd35d3cb04eeebb929f11b3f610d7df9536fefc3ee66c64b393d292f0ca6d6f626fa3166c7f9099af4a458575c63bf8be8df9f7ed8430ec71c2afe37942fa677e54912b4072676d4e9d16defd147984e213757b73e7bebc0f39e9a2f69e2cb5f24839f83d3942c78c90bc5d8b29608b9d2e2320ae72b58e4c3991967b4a9e037f8452132980733a9cfd303e6a0857596008457caa26e470ad5ae3e9cf01e36c7fd9633d085d3eb87c6b2340e4eef76f874329165ce26070fdcd0baf77ad7c6ab6f5cfb6992d22b3567290b2dab73fe8c0cdcd4cab3209fba8ee82040c504c92e2e7222770057f1e9615478362d6e3bbdcf4785185e58b050dca36b0be4c23c6cb4e54dbddbed31d8829bbebd7bf0116beccb54b9c4f135ae4063579652016fe6b871647adb62b0099bdef37eae16aff6f15c045547da616460e918eaa798929c6054a5e53db421482b91e9904505d01fe5c9849d89ad63878971b03f2826cb406a1b2f103353d178502340c7995a3906b90ecdfddeaddcd70ec2fdb57672e7fec55aaecb4cc94930dad0c63e000a5121a78a737e465f61bde5db01c4514aa76b336b4999361501d4b309d9c5e15a3655aedbd6d17291f5485dbfc133c3f2e6f64cb43c9b4bb33518c401a39e8b8cd3c588be46769f4e60ae238ce85789edfe08cd785ebd0ec81b558ebc0d491ed0f7991b6991af0c826d1023e9ff83fe281fbcd1d681633e8c4fbd989f7c96bac34eac1510d51163aeebd4f14ba7f9f83f13294c3c9acf2315b381fa80ce4c7b7202fb2bfc9159b8692fd4787f2076075fa59b94e1531c545006c7a3a9b3dca13b0d08bebae103cdf1e68982e5c449ae01f4a03376a5cce2997522832e59693ea5c25507e4860197f0c9a69971fea97c37a649d0719380c67992c912b90d920a01e6e44b67420f60e95431f6d3400e7bc44beb6c93ffd4f758ef129fa19206292b8bd0e99a79ddc77c7b08c56f3fe78cae3241f5c34c6fe29e0136879cf97caac2a14895d04281d53a730614c8a"
);
_reverseCase(
hex"d2262f43d9965a91b53e2143fe9d762a6f48ca51d288a0a92ecd0a788957f11169db82f364ccc3cb64b4cb17bbc16b3ec89dad5634d3327c88",
hex"887c32d33456ad9dc83e6bc1bb17cbb464cbc3cc64f382db6911f15789780acd2ea9a088d251ca486f2a769dfe43213eb5915a96d9432f26d2"
);
_reverseCase(
hex"722364e05ebad4c114a1796cfd8d9b6d2fa72982a222480625453db410940920e63790afe1e05d18b2a4c3a31383779d04e76c34d75e21f5d2a5b39ecaa19f6ec45416c1b3814f78d5a5dfe3dc86b3aa42aed4925ac9f536f734c04548748c139ed98c0f27225c69e0b2603615701c3f594bd4b55d13823659504b60c03a2ba61896f8212e70ef2794e6e80405264b42ae725275b949b46214cef35d75137a02752f8f61096112f3deaab5f3b4621fc6ff62b32b590e6a2a7547a8b8e592a4fee933c3db444d0001ed760f93627581cea28230c61fc458cfa22b8e2a0c986c263f60a727e138c26f7522eefb417d833cc312dbde496eff37f1f5ec71e14e9e721393b59aeb1dc798e49d4cdc303c26a95959cc02e10fa4bdb9bd7f8fe6399712e51107d6f33a61dc2bcc5d3380c021932a6df2b6fe8b775030801f3f41d51edd9dacd401f3ed79442940806a4b1cfb2d8582e50cb0bf1699681026c20dbf056739422fd118c6be4a29e88e8e9874e289b2361bdbeb44f54876b0bf41a8c30e6de91530bbf02a878fe257499ef40e27bdf13610c8a815d0138ff5fab7e7e13853894bda4eec6c529570c741fa3926a327337217bc3ffa65a8dfbbf8336944cfe83849005472d495ebdc0177fb2d94410e4a0ad7328ac9185421045b2ec298c2cccd896d97c13ed47abee34fa6e5d5fad93bc6b11ea8af3105fdbfa42f97033f1f87614bf61be55e1e0d65d5193b329e542e27e29a15afef21f605a6a800c011ab744c44f5398a1d95966a012d3eea5f5f336d2bf5831762dadbb34d3392ada3da",
hex"daa3ad92334db3dbda621783f52b6d335f5fea3e2d016a96951d8a39f5444c74ab11c000a8a605f621efaf159ae2272e549e323b19d5650d1e5ee51bf64b61871f3f03972fa4bffd0531afa81eb1c63bd9fad5e5a64fe3be7ad43ec1976d89cdccc298c22e5b04215418c98a32d70a4a0e41942dfb7701dceb95d47254004938e8cf446933f8bbdfa865fa3fbc17723327a32639fa41c77095526cec4eda4b895338e1e7b7faf58f13d015a8c81036f1bd270ef49e4957e28f872af0bb3015e96d0ec3a841bfb07648f544ebdb1b36b289e274988e8ee8294abec618d12f42396705bf0dc22610689916bfb00ce582852dfb1c4b6a8040294479edf301d4ac9ddd1ed5413f1f803050778bfeb6f26d2a9321c080335dcc2bdc613af3d60711e5129739e68f7fbdb9bda40fe102cc5959a9263c30dc4c9de498c71deb9ab59313729e4ee171ecf5f137ff6e49dedb12c33c837d41fbee22756fc238e127a7603f266c980c2a8e2ba2cf58c41fc63082a2ce817562930f76ed01004d44dbc333e9fea492e5b8a847752a6a0e592bb362ffc61f62b4f3b5aadef3126109618f2f75027a13755df3ce1462b449b9755272ae424b260504e8e69427ef702e21f89618a62b3ac0604b50593682135db5d44b593f1c70153660b2e0695c22270f8cd99e138c744845c034f736f5c95a92d4ae42aab386dce3dfa5d5784f81b3c11654c46e9fa1ca9eb3a5d2f5215ed7346ce7049d778313a3c3a4b2185de0e1af9037e620099410b43d4525064822a28229a72f6d9b8dfd6c79a114c1d4ba5ee0642372"
);
_reverseCase(
hex"85b325181709547212876220aa4881451ca6b4",
hex"b4a61c458148aa20628712725409171825b385"
);
_reverseCase(
hex"ee90e60ff3f8829224a9143b4d6e19e5fd73400ca7f767e3627e3a7b3c5e658781d03ee8c6bcc689b8bb2db3c665802209caa885dc1249e004fa060941604fd33f973157186aa48bfd1763ac27586c6e2518cd413ca56a0257c14901d4d37ec77e53f10635ba704b7c5cd33e17b12fb3a1edca21438af40f5cbd065a6152092ffcd7c753d8b365ac96511ef57c5c94df81351eeef8a9fcd8523f018dd4d082ff2e06d0fa07212a92b08b9301356e445a727e6e93c4d9b8da4dd9f89fdd60cb9bd1084ccff839013ebea302bd2fda8da1dd31ad21f585f36c09dcd84c1302bf1348dd95c80e4558d2395eea5e95ec81282048384c69cee4f39c8e5a92734c7e1933ec07eeac9e55a2cbfc35a6d1855d8a755d337745648c1021860c2bc9f05b7e1002f74be08a69a5fc3d6f126408e910915d050cdae8b6430983ebd6aa3777a967d45ab10e62a07c017d869cc29431d74c4d048e5220adf1cf3af11ef4ff1fb26dc3256199267909ad48fee93eef8ed31207355760669203a2657ed83d670690141560a6d373fc5864f11d75a5ca7e9b768fbbac5efd9686e10e331de05e32122fec1e",
hex"1eec2f12325ee01d330ee18696fd5eacbb8f769b7ecaa5751df16458fc73d3a66015149006673dd87e65a20392666057350712d38eef3ee9fe48ad097926996125c36db21ffff41ef13acff1ad20528e044d4cd73194c29c867d017ca0620eb15ad467a97737aad6eb830943b6e8da0c055d9110e90864126f3dfca5698ae04bf702107e5bf0c92b0c8621108c644577335d758a5d85d1a635fccba2559eacee07ec33197e4c73925a8e9cf3e4ce694c3848202881ec955eea5e39d258450ec895dd4813bf02134cd8dc096cf385f521ad31dda18dda2fbd02a3be3e0139f8cf4c08d19bcb60dd9ff8d94ddab8d9c4936e7e725a446e3501938bb0922a2107fad0062eff82d0d48d013f52d8fca9f8ee1e3581df945c7cf51e5196ac65b3d853c7d7fc2f0952615a06bd5c0ff48a4321caeda1b32fb1173ed35c7c4b70ba3506f1537ec77ed3d40149c157026aa53c41cd18256e6c5827ac6317fd8ba46a185731973fd34f60410906fa04e04912dc85a8ca09228065c6b32dbbb889c6bcc6e83ed08187655e3c7b3a7e62e367f7a70c4073fde5196e4d3b14a9249282f8f30fe690ee"
);
_reverseCase(
hex"a6102170d9fee6a0b7cffd37114bd629c8595ec845925278fe1970786aab659aec2c031741f21384ff992c399153ee82bcaa947eb43dea0e43aeea7987f78df1e205242eb7c4ff705246444e6a5fc60bdea2e1a157efddd66b58eeab6a947007ba824c441bd003e42eb60d5e9ac86ac66f5b03faa969eaedc1becf3163ab570f00f215c8cf85272a86a93eecd4d8174b02a078dbec96bed77e76759c9adbdeaac3d519a4aa00cc8e9f2744beddd66e12ee4b2264788008575b228eaa4f2445c1151fc6b8d9bed7f485766e8c8466ec08a621757871085574b655ddf45dc6892c2a0e66d853bf274a3f12c5965bed8aec7b040ed162ca42e34b4e54c6a9b4afa4d0293dd0c8ee8ecc0603ca7e8c1e62419a4a6f12de863ddc083e52af4e46b2d2bafe229ee1050d6616bf1644a576a622c10e06083c00a1edb2f488b185ac69955028e998c759fb1e196e0bc4273e0368fe5770352a9b094966468f4b0c1349a4c1d0b6c04c8f7c667edef02d5086a54a702971f3d5944b2f9f9bd13837bfb40558a83dc23c152bcbb864c5bb888356d611e52381b37b5929ba3032bcaa12fa79e384320dd5beb558772b35d28771723413fc4ad2fb1b95e3dd752a1578fb602f26acc81a5a147f5f2d81e9b722e08d7e46d4742d527041eacc53c99b5c41c79a95522e61ad668eeabef716ca4fcb3891ec444d9298b7c36e56d466778d3faafdf2ecd13e9dbd67b903cd140f6aa0a0f42a202a735b0f807445f02269f6b0796c906dcbc939d22811a5a85cb143f3b2c888dab8154d47cb6cc2d43be8842ef28d721b871357759b3f1b00da6181b6d747ba972a250fad23cc20d9e783a40b8ea3db822997126f41e7fe9045feb0663c2551bd7d42da622aa3a1d70b2bdf10b6d9d23a6dc1",
hex"c16d3ad2d9b610df2b0bd7a1a32a62da427dbd51253c66b0fe4590fee7416f12972982dba38e0ba483e7d920cc23ad0f252a97ba47d7b68161da001b3f9b755713871b728df22e84e83bd4c26ccb474d15b8da88c8b2f343b15ca8a51128d239c9cb6d906c79b0f66922f04574800f5b732a202af4a0a06a0f14cd03b967bd9d3ed1ecf2fdaa3f8d7766d4566ec3b798924d44ec9138cb4fca16f7beea8e66ad612e52959ac7415c9bc953ccea4170522d74d4467e8de022b7e9812d5f7f145a1ac8ac262f60fb78152a75dde3951bfbd24afc1334727187d2352b7758b5bed50d3284e379fa12aabc3230ba29597bb38123e511d6568388bbc564b8cb2b153cc23da85805b4bf3738d19b9f2f4b94d5f37129704aa586502df0de7e667c8f4cc0b6d0c1a449130c4b8f466649099b2a357057fe68033e27c40b6e191efb59c798e928509569ac85b188f4b2eda1003c08060ec122a676a54416bf16660d05e19e22febad2b2464eaf523e08dc3d86de126f4a9a41621e8c7eca0306cc8eeec8d03d29d0a4afb4a9c6544e4be342ca62d10e047bec8aed5b96c5123f4a27bf53d8660e2a2c89c65df4dd55b674550871787521a608ec66848c6e7685f4d7bed9b8c61f15c145244faa8e225b5708807864224bee126ed6ddbe44279f8ecc00aaa419d5c3aadedb9a9c75767ed7be96ecdb78a0024b17d8d4ec3ea9862a2785cfc815f2000f57ab6331cfbec1edea69a9fa035b6fc66ac89a5e0db62ee403d01b444c82ba0770946aabee586bd6ddef57a1e1a2de0bc65f6a4e44465270ffc4b72e2405e2f18df78779eaae430eea3db47e94aabc82ee5391392c99ff8413f24117032cec9a65ab6a787019fe78529245c85e59c829d64b1137fdcfb7a0e6fed9702110a6"
);
_reverseCase(
hex"7782d616ad0decf57a2ac92e42",
hex"422ec92a7af5ec0dad16d68277"
);
}
function _reverseCase(bytes memory _in, bytes memory _expectedOut)
internal
{
(bool success, bytes memory retData) = reversooor.staticcall(_in);
assertTrue(success);
assertEq(
retData,
_expectedOut,
string(abi.encodePacked("meant to reverse: ", _in))
);
}
}
#define constant NEG1 = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
#define macro GET_CALLDATA_BYTE() = takes(1) returns(1) {
calldataload 0xf8 shr
}
#define macro MAIN() = takes(0) returns(0) {
calldatasize not_empty jumpi
returndatasize returndatasize return
not_empty:
calldatasize
returndatasize
copy_bytes_iter: // [i, j + 1]
swap1 // [j + 1, i]
[NEG1] add // [j, i]
dup2 dup2 // [j, i, j, i]
dup2 GET_CALLDATA_BYTE() // [cd[i], j, i, j, i]
dup2 GET_CALLDATA_BYTE() // [cd[j], cd[i], j, i, j, i]
swap2 // [j, cd[i], cd[j], i, j, i]
mstore8 // [cd[j], i, j, i]
swap1 mstore8 // [j, i]
swap1 0x1 add // [i', j' + 1]
dup2 dup2 lt copy_bytes_iter jumpi
calldatasize returndatasize return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment