Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php namespace yiiunit\framework\base; use yii\base\Security; use yiiunit\TestCase; clas..
Decoded Output download
<?php
namespace yiiunit\framework\base; use yii\base\Security; use yiiunit\TestCase; class SecurityTest extends TestCase { const CRYPT_VECTORS = "old"; protected $security; protected function setUp() : void { parent::setUp(); $this->security = new ExposedSecurity(); $this->security->derivationIterations = 1000; } public function testHashData() { $data = "known data"; $key = "secret"; $hashedData = $this->security->hashData($data, $key); $this->assertNotSame($data, $hashedData); $this->assertEquals($data, $this->security->validateData($hashedData, $key)); $hashedData[strlen($hashedData) - 1] = "A"; $this->assertFalse($this->security->validateData($hashedData, $key)); } public function testPasswordHash() { $this->security->passwordHashCost = 4; $password = "secret"; $hash = $this->security->generatePasswordHash($password); $this->assertTrue($this->security->validatePassword($password, $hash)); $this->assertFalse($this->security->validatePassword("test", $hash)); } public function testEncryptByPassword() { $data = "known data"; $key = "secret"; $encryptedData = $this->security->encryptByPassword($data, $key); $this->assertNotSame($data, $encryptedData); $decryptedData = $this->security->decryptByPassword($encryptedData, $key); $this->assertEquals($data, $decryptedData); $tampered = $encryptedData; $tampered[20] = ~$tampered[20]; $decryptedData = $this->security->decryptByPassword($tampered, $key); $this->assertFalse($decryptedData); } public function testEncryptByKey() { $data = "known data"; $key = $this->security->generateRandomKey(80); $encryptedData = $this->security->encryptByKey($data, $key); $this->assertNotSame($data, $encryptedData); $decryptedData = $this->security->decryptByKey($encryptedData, $key); $this->assertEquals($data, $decryptedData); $encryptedData = $this->security->encryptByKey($data, $key, $key); $decryptedData = $this->security->decryptByKey($encryptedData, $key, $key); $this->assertEquals($data, $decryptedData); $tampered = $encryptedData; $tampered[20] = ~$tampered[20]; $decryptedData = $this->security->decryptByKey($tampered, $key); $this->assertFalse($decryptedData); $decryptedData = $this->security->decryptByKey($encryptedData, $key, $key . "\0"); $this->assertFalse($decryptedData); } public function notestGenerateVectors() { $bin1024 = "badec0c7d9ca734e161a1df6ca4daa8cdbf6b3bbb60ec404b47a23226ec266b1\xa 3837ffc969e9c23e2bbba72facb491a6a3271193a35026a9ebc93698d689bf7b
84fc384f544cc5d71c2945c8c48ae6348c753322fcaf75171b7d8f1e178e8545\xa 3d5c79f03bae6d9705cabbe7004ec81e188812a66313297fcf5d4c61a48614d2
1b5379fae60736f88bc737257bc1cfbef7016108dd1f3a537aaa681544f5bb20\xa c2d352212d6a2e460311ab7b93b611218b30c7402709bff89ecf814310c2db97
81f4142a54d6d41f82c33208c188a023c70befd697b496efb7c7b8569474a9d5\xa 025a8ea8311c831b3de2b81800f28589b6aef537f6ada2e3d92a1ddd39cfd6b4
8113c8b36be890b099ca4e08655db0e9b5c211e706af052b776924233321412c
b1b540f08d88acd664c55854b05e31a15d4b0dc93b4514f62a88c3d4a451fe34\xa 74d2fbaee742f232959b5f6c2b71a8b6ad95a0d5362f39309aca710f37a4dae2
228e27d35f4d3fc87ee6ece4538587fad7835f9803f5ca64dfd856ae767a3482
c2f315c69f20ec7ae391fc6c2de85281d54c97f74981b4efec0f5e4606765c04
0f1f45386bed4fdb9f998b0e7027c7414bea667b1205027c55eed9273644463b\xa 1832bc5338e3a7e10bf24d8e69f167b94551b6240f65b416feebd28599334aa4
d998a599053cd477f54fc0af62a8ef75eb91096b153751b201b8374c4956508c
6c82ea2ceb0265e74c96032787fe01139b578c3a14fd4e32a85195375b25da60\xa 4f21187ee01df6042971d7c2b9dd8b611527377f28f933559f6b2edfe7bd8896\xa 00627830bcdffcb884989013585cc6da726c7cc57c69e8664a244d234465f2a5\xa e736512a65e563a2a726915b50247aff165190c75d151139f2b31211a3acf94e
236d27b441fe64e88a443778359d57ba0fed8edbb01cc60a116f9599da4e47bf\xa e96850ac12d1199a080f1b591c60eae613fba444f9fe31fd42ee333678532556\xa 07fbfeef02cdbb2d0a8d2329adc7fba22aa4cd124c6e66e0b0aca796ba6aeb69\xa f8e76a9d1aaabe351bc42fefa6054977859b51158ba7143980d76db5b2cc6aec\xa 9f83eac5edf79357632fb60cb4811e71892436e582375860faf8d8c518ee33ca
e08b18af7faa227d97196d7b041bcb366118751fbeaa92d80f86324ce8711cfd
65005cad0ce30878f508eb1ea2735e212ef3e42a78467d4f31b483087c3c63a3\xa 2fa62f2ae92e2acdfc3cf21b3419acc347ff51ccb17161e829cc4a24965fd930
b983d63153b9c13dd85340d7184bf01734d4357c1aabfbdc9711193ffa974832\xa 4f88cf801f35708db0901ffaa55415ca4334678633dda763b5fbfba7cfd51dc5
79149ec9284a4db2349dbc5264d5fca7a72034261716d90a996cb57ba09f7d07\xa 29a2f10cc58eec98d86e9306a3fbf2e711046e86b5a86cc0eed7625be1a01ebf"; $bin1024 = hex2bin(preg_replace("{\s+}", '', $bin1024)); $inputs = array("0", "0123456789", "0123456789abcde", "0123456789abcdef", "0123456789abcdef0", mb_substr($bin1024, 7, 5, "8bit"), base64_encode(mb_substr($bin1024, 269, 11, "8bit")), mb_substr($bin1024, 383, 97, "8bit"), $bin1024); foreach (array("Key", "Password") as $method) { $keygen = "generateRandom" . ($method === "Key" ? "Key" : "String"); $encrypt = "encryptBy" . $method; $decrypt = "decryptBy" . $method; foreach ($inputs as $data) { $key = $this->security->{$keygen}(16); $encrypted = $this->security->{$encrypt}($data, $key); $keyHex = $method === "Key" ? bin2hex($key) : $key; $dataHex = trim(chunk_split(bin2hex($data), 64, "
\x9")); $encryptedHex = trim(chunk_split(bin2hex($encrypted), 64, "\xa\x9")); echo "[\xa '{$keyHex}',
'{$dataHex}',
'{$encryptedHex}',\xa],\xa"; $key2 = $method === "Key" ? hex2bin(preg_replace("{\s+}", '', $keyHex)) : $key; $data2 = hex2bin(preg_replace("{\s+}", '', $dataHex)); $encrypted2 = hex2bin(preg_replace("{\s+}", '', $encryptedHex)); $this->assertEquals($data, $this->security->{$decrypt}($encrypted2, $key2)); $this->assertEquals($data2, $this->security->{$decrypt}($encrypted2, $key)); } } } public function dataProviderEncryptByKeyCompat() { $mcrypt = array(array("b86b7529a525d148cc73798da528d8a0", "30", "4fb4765bea6beb208ba9395bf6d7497f37626463323730396362366338376536
3236656535613035373835323061343031613764393062353439623834353135
376435383635393065393636656663378807b00020ea10101bbfc2ef0dfee082\xa fcbc1927daee7e6d061bc7a7c8d8e877"), array("7e214bb6b27108918c007c0f9e1bdd8a", "30313233343536373839", "98981d39f0c985aca577e2eb9472059339623332343335646634613630616335
6133323639663336633533313032353164393562303434623533326331653561
6566346561643066643331393437623366e93fe0ef0a220ef1228be9f9195475
eb303b841b6371841126c13ed419d931"), array("c139f67915206b7296bc6ab383a2786c", "303132333435363738396162636465", "5773028f2be0df720cb3be2cb989e9e161616430393538363437623862326264\xa 6436336133643738333866353339393932326432356433306630663062613331\xa 386666313033626661333065313031623d5e980deacb6369592c90e7afca6e6b
06736654378cc93b2d238e6360969956"), array("910c052157953194d552e3a3f0061ab7", "30313233343536373839616263646566", "3141c48cc0b73ee43d5cd9ae5c8a153f66343039333638396632653239623434\xa 3162616664636331316238336265626536336231653764663732396638336138
34636438616265376138613539656164b004dd4ebddba049ae068936643dd475
c07696b0cc173c2eb4c2d7bc3364845e6e3656b463b04e2271cb10824f1365ec"), array("28d0ad09ce367ca8e0772bbeeea6c40d", "3031323334353637383961626364656630", "1f19013959a0985cf0235c4ff46a20c135626235633437383532343736613963\xa 3765646334666263323832643438663361323266303264383337613736363133
666432373632343236313331656362354de2203149f8b4f348c06ea4e2eb94e5
de4deaf1d198e14e7c448421002bdfa9ed979502d86750d70aebaa1c727ae79e"), array("b658ac4b9fa13c3c1d40699aba886b7b", "4e161a1df6", "154015ebb822a55869721a0b1c22497762653266663264333631373938653539
3465316466396535343966373738666663646232656163383733633739323334\xa 316363623562353462363133623134643d118216985ac7e3f6888a95552b6a67\xa 6ff70daf8dfb65b4d5f62a936b7f64d7"), array("baeb43072f20af0f85c6252aa9f0d472", "5862447074634952357761764253733d", "beb6dcd0fb444cbf759a241bd0ea26e537336135333532656136653262303736\xa 3061656635326136376230333132663839626431366265363565643064616362
39633830313066356330653466613232dd9cfe4f4495f34a971a25d881dd48a3\xa 12093a6307a87e4544e217cf9d39dd536a5882d2b9867abefef5c1dad127447e"), array("d527f854e8f37c49c71b82c48d8b4775", "82c2f315c69f20ec7ae391fc6c2de85281d54c97f74981b4efec0f5e4606765c\xa 040f1f45386bed4fdb9f998b0e7027c7414bea667b1205027c55eed927364446
3b1832bc5338e3a7e10bf24d8e69f167b94551b6240f65b416feebd28599334a\xa a4", "baa84c2c05b2ac8efd9fc8f9824efb5d63306366393939626532323532646433\xa 6539346265383936336262303339336635333164383339326436376631353366
6433616639653638393063376137626574bd7aa8c5f313e2d8b7a4ca4af35090
9695845c9d62cd91c486307d3ae0701e4abd1fa69a255aab1e6ac2874fa1bc0a
065340418a6669427bcdec751300ce7666a38d17d850f7dae4ea9567045356e8
f347941226bf7b2d4dd3a21c8aa0b381f8ad06c3a55a7d2cb967ad148142c287\xa f12a563f9cd2c6224e7efb8fdd130bb9"), array("01025bfec21dda4342809cf20382de29", "badec0c7d9ca734e161a1df6ca4daa8cdbf6b3bbb60ec404b47a23226ec266b1
3837ffc969e9c23e2bbba72facb491a6a3271193a35026a9ebc93698d689bf7b\xa 84fc384f544cc5d71c2945c8c48ae6348c753322fcaf75171b7d8f1e178e8545\xa 3d5c79f03bae6d9705cabbe7004ec81e188812a66313297fcf5d4c61a48614d2\xa 1b5379fae60736f88bc737257bc1cfbef7016108dd1f3a537aaa681544f5bb20
c2d352212d6a2e460311ab7b93b611218b30c7402709bff89ecf814310c2db97\xa 81f4142a54d6d41f82c33208c188a023c70befd697b496efb7c7b8569474a9d5
025a8ea8311c831b3de2b81800f28589b6aef537f6ada2e3d92a1ddd39cfd6b4
8113c8b36be890b099ca4e08655db0e9b5c211e706af052b776924233321412c\xa b1b540f08d88acd664c55854b05e31a15d4b0dc93b4514f62a88c3d4a451fe34\xa 74d2fbaee742f232959b5f6c2b71a8b6ad95a0d5362f39309aca710f37a4dae2
228e27d35f4d3fc87ee6ece4538587fad7835f9803f5ca64dfd856ae767a3482\xa c2f315c69f20ec7ae391fc6c2de85281d54c97f74981b4efec0f5e4606765c04
0f1f45386bed4fdb9f998b0e7027c7414bea667b1205027c55eed9273644463b\xa 1832bc5338e3a7e10bf24d8e69f167b94551b6240f65b416feebd28599334aa4\xa d998a599053cd477f54fc0af62a8ef75eb91096b153751b201b8374c4956508c\xa 6c82ea2ceb0265e74c96032787fe01139b578c3a14fd4e32a85195375b25da60
4f21187ee01df6042971d7c2b9dd8b611527377f28f933559f6b2edfe7bd8896
00627830bcdffcb884989013585cc6da726c7cc57c69e8664a244d234465f2a5
e736512a65e563a2a726915b50247aff165190c75d151139f2b31211a3acf94e
236d27b441fe64e88a443778359d57ba0fed8edbb01cc60a116f9599da4e47bf\xa e96850ac12d1199a080f1b591c60eae613fba444f9fe31fd42ee333678532556
07fbfeef02cdbb2d0a8d2329adc7fba22aa4cd124c6e66e0b0aca796ba6aeb69\xa f8e76a9d1aaabe351bc42fefa6054977859b51158ba7143980d76db5b2cc6aec
9f83eac5edf79357632fb60cb4811e71892436e582375860faf8d8c518ee33ca
e08b18af7faa227d97196d7b041bcb366118751fbeaa92d80f86324ce8711cfd
65005cad0ce30878f508eb1ea2735e212ef3e42a78467d4f31b483087c3c63a3
2fa62f2ae92e2acdfc3cf21b3419acc347ff51ccb17161e829cc4a24965fd930\xa b983d63153b9c13dd85340d7184bf01734d4357c1aabfbdc9711193ffa974832
4f88cf801f35708db0901ffaa55415ca4334678633dda763b5fbfba7cfd51dc5\xa 79149ec9284a4db2349dbc5264d5fca7a72034261716d90a996cb57ba09f7d07\xa 29a2f10cc58eec98d86e9306a3fbf2e711046e86b5a86cc0eed7625be1a01ebf", "08ad33a166a9b39ba7522ccf5414123062643565356136373131666663323763
3636343466313761356339656234343064626331343366346432343062626634\xa 3264393630336535353431613338653717747da97dd4d63e215dc8bb9ce231d5\xa b3cc9c287dfadb1b5acce0d4da2816de16114665271204188d91b642cdfdb494
66a89caa29a9139354f69c4c188d76d88d36d14004268f327c98f4736ba31728\xa a46d8f50d1665bcf157e3164d756286eceac4ce81ba3ffd1b79ff0862f5f529b\xa d44f0e2fbcb88c388095cb894fd4ce059ba8f5436f0a15b2fa9a40acd6645ad1\xa c6f16365250715cb0552dcfc220e844ba67e2a1206b1725a6bbb8f0e87b7067f\xa b51fc0226cd963bddf549227d5eaf5f996061d9c3b7e3306bd9be1114aed6199
6e44ee1144bebfca9a1064d40419837e54006f54161dd028b2702faa5cde214c
bc11ed1c77d4042b333e772473f4764fcdfcabdd0319f33d96ad0ab904cd2620
31683afc4c96dc27fde0570aaedc922a552d46687a606bb579b6ab8050f418f8
f6a3fc33ef5eeba8dbf54b5a90a1034ff8a68d9ea691d9a1d6b8f41376735bec
6c0f541f927cf107f2184f96235a6fca6d1db013966d8527389f8a79f4afd7bb
297c85d56f74faaa069679edc78b16b17ab8d72de3788f2ac2fe8a2e15ddfb3f
14ffd9ef18c95acf340f702a974b580cac93928417650b8f9e7409619774e483
af66b18ec7547f744099e2bb4125905e5dd553beca90d03fa7d7bba201ab97ac
92506c305ff79afe9c99a73cb20b9048464beeb100df0ecfb40161f95dd8708a\xa 6fd09e1b166f1e27429b1ca50f990a45425dec25b2a29dcde4fd1c23b0d660ba
10241bc20cdc59c3609a7d6b094538d56b878c62dca3a54fbc53d815ae0549f6\xa 978ea37a644add2bd2720b37a3502d683b0a8b9ce269bb3db8a44f3e8c3ba507
7759de171e1d040dfe5c9a610e21e3b41d95403654122ed7b75111622f14bb50\xa fd7a3e637bba73fc8c4e22702b52329c224860a9e04b38b8c23527c732a281dc\xa f92103d71decf673b3fa83feab2c1937811e0b41163019e1b45e664d4acc570c
2d4b24dc138285478c3898b0567c026a1651bbada0fb62ab5ce0d96e3601aec1
c6f04ecb1b53f1d852893edb971703dcd919c2dd883d0851e2fc491cf9abf1b7\xa c1652bac73a5a9e9bdbf164db948cc5b8299fd7f5535fa927130dc4e183ef35e\xa bb08723625e4cf62f253111e6f016e6cfba2e9cec30e273e4b2dcefa80d1c528\xa 82c91609acf5989eec18afbefc25c898763c50d2a5cc54250d2672a39758f948\xa 1866c26d260bf774db05280697d2b1a95b0481afa2b80bb205186ac290bc3770\xa b19a652dc2f5d6611363cd851d921edad36851d64f4cac6ff67299455e120cee
65a0d9471d1c952d7e81ba5e67e0a8a41a9a68f50d88a2b62151b564ffc2e435
8373e55df6cad337589a89054c050f93b4b252aa65466029313bf7311ae735a5\xa 26cd2bac41af846c069ed614485cf62bd66c939dfeb27ecaaa197aa344a5488b\xa b3a2dca884c7fdc4ac08816b2b5ba3b7414f7ff7a06a3a6fe75e20c9eb97a881\xa ac130616f176d1f26ae24bf4392e0a0e")); $openssl = array(array("67ae7370e4a144523543f1e3edf35b26", "30", "706e1670ec6beb91c565299710e4f43231336530323838313435653933623539\xa 3238313639623066323530646630653236313832333361346664623132393436\xa 34326131663964636634366665306439e6142bf3d0e6a5952231d8bfabbacd83\xa ff04c61400529385d63a4b8f8696982d"), array("5d4bae62bea3c8f4c49dd1a38a4e1b2a", "30313233343536373839", "4c9a34e1977dd656fd3e18d4bc2b00c762353830326262373135396530643235
3332643937653632353331626532373336653761643866646233336365323233
30633138663034313665653038306161eb77ac98344a0bf946f98e892e6e15db
b9e221a7c25135a36562c3ecb2981fcd"), array("6832851af3c63a1e303bdf1bca38dd9c", "303132333435363738396162636465", "d09d2faa163e774abd020bf8cd623f8962646233313330626133613964353834\xa 3436663631383139653438326563623537373830663962303531366130383130\xa 3333303531613337386534626136636415db7a6885b67f69d9974f5879ae7497\xa 08811fc036508f23f55f3f9d16b9ff9d"), array("e8a9799f4254b26484ea447918dcaad4", "30313233343536373839616263646566", "1a76a05af572abe9b4e7a67d7f64baff39666636363332323133373034386531\xa 3761353236333263643965313139303666636535343862363737333032323331
313136366562336535663033316231303811542783f13798b17d40aa7ec9b489
34404ab50784ad1722f5f4d4462f702d3a625ef712635b274a970a47b516b137"), array("27cbf5a7c4327582393b2ec277cfe957", "3031323334353637383961626364656630", "60e2e14b404c5bd55b192ef2f1c7131c32356261636361313131336265323534
3439623033346337346133346239363337633736663831343632626638303038
64653361396366356165633061666538d2137b2defca383668827b6983f86254\xa bd849c3e8c9a44b6e1ed203491d73b4cb0cb83658240a89baa9261755d707879"), array("7b157beb08e8a8ac7d74f789ccbacae5", "4e161a1df6", "a17ca346c4a88404b8a345b1d075173a66356137326335343137393136353762
3930636535636466336534316438376437376639366535666636313235653262\xa 38393464663134313430333633343232b319ce688676fde03d092d73df75705f
bde594d9b2bfe41580a458555982dc70"), array("88704df5b4881d2246388dc7c68066cc", "5862447074634952357761764253733d", "9069fbdd47ee81faf34eff40f8fee94333393037333936333439653537636132\xa 6561613863336165333336323562353161636330366438633264376461626563\xa 3836363462646536323261333034643070e4b0a3d196f36a4afb92a7ae4ef7b8
eb44e9db29638fa32140e379ae7aa6b7e68f454635ade137165383fd3a5c049b"), array("1d203fba1cd2a7b92abb8f40eb985538", "82c2f315c69f20ec7ae391fc6c2de85281d54c97f74981b4efec0f5e4606765c
040f1f45386bed4fdb9f998b0e7027c7414bea667b1205027c55eed927364446\xa 3b1832bc5338e3a7e10bf24d8e69f167b94551b6240f65b416feebd28599334a
a4", "fade5d841aa10a29a2ef5236371ffc2964343165383664636264393666383364\xa 6165646139316438666531633230306537343364336166666463656466306564\xa 63326239653938303332656464346463136bd6dd0b7530490b91024ed944bc3e
3fc4050d20ce05a9ed992ede75f62bdd2523d0cbc93493baf07ef98c895a353b
5baaf26200572aa2e5bd22508db227556c5ee9eb7425418e9852c595e6ac0e61\xa 37c186e04a3f19d855d8c4b8a8e6ad1be179ea5c816fe461a4cec212297873c8
5f96ee5c024cd88d1c32975fd95acd73"), array("1f93719d7a66a724c3841835fbcb33fd", "badec0c7d9ca734e161a1df6ca4daa8cdbf6b3bbb60ec404b47a23226ec266b1\xa 3837ffc969e9c23e2bbba72facb491a6a3271193a35026a9ebc93698d689bf7b
84fc384f544cc5d71c2945c8c48ae6348c753322fcaf75171b7d8f1e178e8545\xa 3d5c79f03bae6d9705cabbe7004ec81e188812a66313297fcf5d4c61a48614d2
1b5379fae60736f88bc737257bc1cfbef7016108dd1f3a537aaa681544f5bb20\xa c2d352212d6a2e460311ab7b93b611218b30c7402709bff89ecf814310c2db97\xa 81f4142a54d6d41f82c33208c188a023c70befd697b496efb7c7b8569474a9d5
025a8ea8311c831b3de2b81800f28589b6aef537f6ada2e3d92a1ddd39cfd6b4
8113c8b36be890b099ca4e08655db0e9b5c211e706af052b776924233321412c
b1b540f08d88acd664c55854b05e31a15d4b0dc93b4514f62a88c3d4a451fe34
74d2fbaee742f232959b5f6c2b71a8b6ad95a0d5362f39309aca710f37a4dae2\xa 228e27d35f4d3fc87ee6ece4538587fad7835f9803f5ca64dfd856ae767a3482\xa c2f315c69f20ec7ae391fc6c2de85281d54c97f74981b4efec0f5e4606765c04\xa 0f1f45386bed4fdb9f998b0e7027c7414bea667b1205027c55eed9273644463b\xa 1832bc5338e3a7e10bf24d8e69f167b94551b6240f65b416feebd28599334aa4\xa d998a599053cd477f54fc0af62a8ef75eb91096b153751b201b8374c4956508c\xa 6c82ea2ceb0265e74c96032787fe01139b578c3a14fd4e32a85195375b25da60
4f21187ee01df6042971d7c2b9dd8b611527377f28f933559f6b2edfe7bd8896
00627830bcdffcb884989013585cc6da726c7cc57c69e8664a244d234465f2a5
e736512a65e563a2a726915b50247aff165190c75d151139f2b31211a3acf94e\xa 236d27b441fe64e88a443778359d57ba0fed8edbb01cc60a116f9599da4e47bf\xa e96850ac12d1199a080f1b591c60eae613fba444f9fe31fd42ee333678532556\xa 07fbfeef02cdbb2d0a8d2329adc7fba22aa4cd124c6e66e0b0aca796ba6aeb69\xa f8e76a9d1aaabe351bc42fefa6054977859b51158ba7143980d76db5b2cc6aec
9f83eac5edf79357632fb60cb4811e71892436e582375860faf8d8c518ee33ca\xa e08b18af7faa227d97196d7b041bcb366118751fbeaa92d80f86324ce8711cfd
65005cad0ce30878f508eb1ea2735e212ef3e42a78467d4f31b483087c3c63a3\xa 2fa62f2ae92e2acdfc3cf21b3419acc347ff51ccb17161e829cc4a24965fd930\xa b983d63153b9c13dd85340d7184bf01734d4357c1aabfbdc9711193ffa974832\xa 4f88cf801f35708db0901ffaa55415ca4334678633dda763b5fbfba7cfd51dc5\xa 79149ec9284a4db2349dbc5264d5fca7a72034261716d90a996cb57ba09f7d07\xa 29a2f10cc58eec98d86e9306a3fbf2e711046e86b5a86cc0eed7625be1a01ebf", "712929635f5be013159aec81296b96ec36333734373565366166383031313734
3331623863663837343237633863376539643865643339383531363139396566\xa 34313731633765393462663264316130de90698e64fa4abc91639e72baee83bc\xa 2caf85f91318e0cbd0db5fa08c4ffb582ec55ca43de53a43f2844af35d5f87b9\xa 8faa623107aee2e083f1c7aeedcb0472c93bb9eacbd39d839d5bf94c44658d7f
d70817f5d6b120f91ef86880f93e99151bc1ed13ed263a3ccc7243e5ea97f39f
1ce2ce6b05a2b78f05c5d72041e35466068f52fb3d2ba3afa7594d7bc0981c54
8b31ae7e5b7e7e0e6f2fac9a336e6516d7e4b5cc658e1fe634daf9ad097715be
14d54ef19adc381db31db78714a09e997dc7732853d39885566e41a2c0ecb08d\xa ef8ab56359a0e312446d9f1555539ad29e13080d438d6817280d4dbfe6cd4ab9
4a357dbddcea1bc90e0d0fa6d556b1ba75c23a1d3818ea91e0fa5b8005b8020e
f7a80ed2ee60aa8ee588e101dbf3b64bf6a3dca5b1d5bcb96eed5c594bab1dcf\xa c1f61d74ad3ff0f5fdf176a327e8de33d123cdd61c6c4dc946429c566ac0f77f
48215d5889365fa664a879babd4758fb4d824cfb9e4bf6500ffec0e4ebefe4f6
2e521a7cd563fc954a9161047461e4054f324c5cf4f9e949566c9ac17c45aac1\xa abf98caed42242c51aa0d81d732c538e437c4024e8f04eeeab6619aed46599e7
f66c2041e0c346affab1f79cd7352a66686fac2b38615f8fc172ab0967fd4435
9dea9f41b57ba5a752e20456f2254e8eef576867ebda0f48fe47a2e91fc8d8af\xa dc1bf98a8d3530b4b02996fe4b05ec3dab200f9e79a4261c233caa9a33762f1f\xa 4b3482ab6f16f5dbd7bd87ed17e21c30140ce61fc2468c054ce51dded2683d7c
375d69d662729d6fb8629b8dc25dcc5596f87f627a2138a3ef368a2a1591902f\xa 84ffc457bd556a346815986f153fd3a99ef169444436ac81853b318c0908cb33
cf332edadfb870cab419365312c18aeda418b8b571783a6b2d8c397c33a22b31
55958cef153f4d9cfc3a1c6288ff17bfdd92132e1f1e5fe8041e30a383084811\xa fe892d7fc33abff10dd20db07277677b16e7f90137adfc3cb36dd85de3618769
bf8f3ce13642f9ea430f455d388281208190b335915e256320274a904ecd0938
d3c34d99c88e3186a132777fc7b74b43efab1a08376035061de56a4fb6de611c
41d2139c77a516c4f8144b123696356b4b9a752a9cd857630af4ef02339172e6
361a2fd6a18e3baaf8a3f7e9811ad5fb61abba7ae893b1e7748df2c5b7704eb9\xa 65606b0253cba6a0561b0e70593c724f99e07d3e9a857aef894a64a35969b354\xa 4726d35504d7b8c0c06cbf9106c5d504674daa879b39328d2c83e0f4e5622ea1
4fb742458214b410e2736d8cefabfb125c4769701711c15ab870b5ff192d4c71
e805ac5100352e33227b162ebae123e20c477719c52c59e192c2e3731806404d\xa d4359f840b11ad495357210e259e6b9e8fe5e8f600e8746fe1a483d45b694324\xa 0809649ed7320b0022a5ef7b414635933d6d18ec7218f829121d12dcb573ed77\xa 79ab0519d2df17dbd8988b32ac0711ef")); return static::CRYPT_VECTORS === "new" ? $openssl : $mcrypt; } public function testEncryptByKeyCompat($key, $data, $encrypted) { $key = hex2bin(preg_replace("{\s+}", '', $key)); $data = hex2bin(preg_replace("{\s+}", '', $data)); $encrypted = hex2bin(preg_replace("{\s+}", '', $encrypted)); $this->assertEquals($data, $this->security->decryptByKey($encrypted, $key)); } public function dataProviderEncryptByPasswordCompat() { $mcrypt = array(array("LtogIEhy59ve0Huy", "30", "83325c8abe8dc0afd801acb7785dc29c32393439653930663266396466653862
3965303964653935326238343065363734346264633932376364376430653933\xa 37303963376232336634306339396136e6f4e7dc3e2fd23be186f037e4caa6d0
4ae8cb894d80c08bb790417af9cc176f"), array("1_VTumNNc7VV463t", "30313233343536373839", "a247ac24f3aa60e894904f58954ce8bf39386530366165343538336132616231
6532353066663430646432383531333465373336646333386437323733633763
646665346232623635393962626162323a44a150a556addd97addfb43a32f600\xa aa2c479664682a308e6cdd523967cb4a"), array("DBpoIPndKRm2Rfem", "303132333435363738396162636465", "9ed20f30824312032e5e34e2c5ab61e333313930616634396137623261363863\xa 3334323832333664626265663435643633323033383862613865633961356261\xa 30353634393536636465643833633531b62ce156f34b92790b2d26312f3fd7d0\xa 0a646da4d636f6998f1b0d859f255dc6"), array("s1e1oRE1iM_oortb", "30313233343536373839616263646566", "5b03427dba481b5af8760edc3788fa0e66666663623539353163346466663761
6434663337383566366265663931303662366530653633663235303532373763\xa 37346330393537646630616535373230c98134da00d77753741c1f0bb483f109
622a889f950310cd51d7d48d63202b20d378eac85f7d0c851fc9905d322aef96"), array("i1E7JvOQaESAKoeH", "3031323334353637383961626364656630", "7cf2ed4612d07de3ecfd54ac0e576e8539613861656439333965623533626238
3361653764663438643330383130313462613961636462383836383862313962
346439313666343336313766366538637bd566b1eecb0b1e0896eb1fd0fd11d9
dcb9eee5cc3d90c4046a6849e8ad152caf85e8f96de3b24b4d523a2d60533e0b"), array("QUN24gpNGodXurMM", "4e161a1df6", "49fc2d51b3e6325d86334ea8872699ef31613661333031373065373834643033
3863343734366435343035316562643438636133306233373431323066333330\xa 32613330623364326162326434306637042f9b4a005ed3b9532181d020378800\xa deefcfa36d77ed4abdf35546c0bb4aec"), array("1COt9D8ZsfclCic2", "5862447074634952357761764253733d", "c4d5f90054faf3699d983795f44bdb1430643734643832343265323064323434
6535346565323733323764376266646539366431353266666639386231626438\xa 653237646165393461626435656332332b4244fccb47ad8cdea56109c7d5a417
13b3844d9857507db59d0000037b169f7b67cf0ea793c0254bffc55342d8e4c7"), array("eUqmv4chMnO1H5cq", "82c2f315c69f20ec7ae391fc6c2de85281d54c97f74981b4efec0f5e4606765c\xa 040f1f45386bed4fdb9f998b0e7027c7414bea667b1205027c55eed927364446\xa 3b1832bc5338e3a7e10bf24d8e69f167b94551b6240f65b416feebd28599334a
a4", "31435e0bf8c0be9a395791288f6d058839336130623938343839626436636433
6664373131666361383739633163373130323936653730306331663836373263
656135303466323439326564626162378298df437dab821e8b2f7086962ffeb1\xa 7a674022ee498470e5e8fdff8905aed39e424588ecee69965bb6856f0356860e\xa aa978ffa42ccfef6d4fb00026014e107736f3ee9b2206a2cd52b18e3068cf6aa\xa 077c7304128a3cd92d4fc29dfa7c180eaf85feec791618db1ed01695536cf8ec
7923c0b3fb974fd0ff92faa62723e94f"), array("3Cl5v2Lmn61PiQ3H", "badec0c7d9ca734e161a1df6ca4daa8cdbf6b3bbb60ec404b47a23226ec266b1
3837ffc969e9c23e2bbba72facb491a6a3271193a35026a9ebc93698d689bf7b\xa 84fc384f544cc5d71c2945c8c48ae6348c753322fcaf75171b7d8f1e178e8545
3d5c79f03bae6d9705cabbe7004ec81e188812a66313297fcf5d4c61a48614d2\xa 1b5379fae60736f88bc737257bc1cfbef7016108dd1f3a537aaa681544f5bb20\xa c2d352212d6a2e460311ab7b93b611218b30c7402709bff89ecf814310c2db97\xa 81f4142a54d6d41f82c33208c188a023c70befd697b496efb7c7b8569474a9d5\xa 025a8ea8311c831b3de2b81800f28589b6aef537f6ada2e3d92a1ddd39cfd6b4
8113c8b36be890b099ca4e08655db0e9b5c211e706af052b776924233321412c
b1b540f08d88acd664c55854b05e31a15d4b0dc93b4514f62a88c3d4a451fe34
74d2fbaee742f232959b5f6c2b71a8b6ad95a0d5362f39309aca710f37a4dae2
228e27d35f4d3fc87ee6ece4538587fad7835f9803f5ca64dfd856ae767a3482
c2f315c69f20ec7ae391fc6c2de85281d54c97f74981b4efec0f5e4606765c04\xa 0f1f45386bed4fdb9f998b0e7027c7414bea667b1205027c55eed9273644463b\xa 1832bc5338e3a7e10bf24d8e69f167b94551b6240f65b416feebd28599334aa4\xa d998a599053cd477f54fc0af62a8ef75eb91096b153751b201b8374c4956508c
6c82ea2ceb0265e74c96032787fe01139b578c3a14fd4e32a85195375b25da60
4f21187ee01df6042971d7c2b9dd8b611527377f28f933559f6b2edfe7bd8896
00627830bcdffcb884989013585cc6da726c7cc57c69e8664a244d234465f2a5
e736512a65e563a2a726915b50247aff165190c75d151139f2b31211a3acf94e
236d27b441fe64e88a443778359d57ba0fed8edbb01cc60a116f9599da4e47bf
e96850ac12d1199a080f1b591c60eae613fba444f9fe31fd42ee333678532556\xa 07fbfeef02cdbb2d0a8d2329adc7fba22aa4cd124c6e66e0b0aca796ba6aeb69\xa f8e76a9d1aaabe351bc42fefa6054977859b51158ba7143980d76db5b2cc6aec
9f83eac5edf79357632fb60cb4811e71892436e582375860faf8d8c518ee33ca\xa e08b18af7faa227d97196d7b041bcb366118751fbeaa92d80f86324ce8711cfd\xa 65005cad0ce30878f508eb1ea2735e212ef3e42a78467d4f31b483087c3c63a3\xa 2fa62f2ae92e2acdfc3cf21b3419acc347ff51ccb17161e829cc4a24965fd930\xa b983d63153b9c13dd85340d7184bf01734d4357c1aabfbdc9711193ffa974832
4f88cf801f35708db0901ffaa55415ca4334678633dda763b5fbfba7cfd51dc5
79149ec9284a4db2349dbc5264d5fca7a72034261716d90a996cb57ba09f7d07\xa 29a2f10cc58eec98d86e9306a3fbf2e711046e86b5a86cc0eed7625be1a01ebf", "0c5164ead7f48c5d95f5907399c146a261353462323734323738656231323164\xa 3962333166373062373734636630623932616638626236393339363861646366\xa 35643933393537303331343436303330a927c7a879272f81e1032d57530b5e69
60f70e14b7607e8e17583aa8197f547e375e07b7a9d6c11be406f5e01aac59e2
7e54bb3c33662ea294cfbd0e7bb8e5eb886edee341509a752fc3b9706807a948\xa 00edd0bff8e624275420bff50995de70d2692a052e1710a0b9135f9f44abcb02
24a189f1bb414e4d73fb539728d40b47ebc34fdb5ec2fa61848bb828de5179a1
e799eb09367bda9b59b3bdc51d3f92c1bd7dacf751b9324059869bf6adc3d88d\xa 226a153a75cae1a2426ea187ef62c97bbd35e97450da87d4da9aed08ebf30a3c
a3369cc65a17acebb8a6ff8ff698743a3782990bc5e8cd03a6882c0f7c50868c\xa 6b3ce967c9ea317555eb972e9bb7beb7b3215160a0bcca8c7f92a085beca256e
4484b1cdcaee495917d8aa4dbf7675806f7f57e77a770ea7db6e080150b43f56
15709b371a303e89b032eac7fec3ee954ea52940a2e59343fd0fd59ac2d4f095\xa 74d2863eed13774c63a94e87f7ccdbf0741a56074a7210e2f022809ca48637d8
057d80fb190f339ddee2b6f7aaef3f2c1848026bd33e377ac554e2b29dede4fc
11e040b3837c24e6cd93430c2f9c19138cd1b505681958a09f223f65e6d7b123
43e426e204ee32411b1590133d58fbc4806ff784db93cd0205a7b4a1f4b96ee4\xa 02b06ac00520118c89a7c4f1dfb4ac941a3d6f839e9312ee8cd9c3c02ef5cf2a
29d266fcfd29c24b994bcd3c67000999486bad6b060f87d5c843f3f132be5a7c\xa 6ab2aab2091a83f0673efc4bf658e6c181c800a2eab5272c9cc8e9bdcf4ee061
de613989f107f1755385697ad64cd1c613f1f742a980c48e27638b8423b82eba
555c59020ee5794099377e816e8983a7579fc97178e5ac0f98bdda6dbf3f38f1\xa 3f8b2d12cc792e729468a8408482985ac73e831a6ca5f67176f68bf216b77147
fe4743ae60f628defa590b0b0b7d8c39d24ef6980ffc0c47882fa0e3f04ed3e5
6d8654e11a0f25a2b3dd03e900e3d59922fa7ccd544f98a04828a34826fd9bfe
e8c841ca6146cc96443ab2cbed3f846f5241d27b15f81df80e2b35219044e933
4967334529fe949604a19f7cad76842a16928066a01fb9ec750e78ae68ddcb4f
833b5e89377ea31c7c87666c300f36f7583383f783f979cedbd05585c50caade\xa 73f9f38dfcc5f915106573694ce497a0787ce3fecf9678a75b62f258aea300e8
2176e5c51009ea1fbdf266606cfb93cc62f9abd6c056625df053da8d9e175d63
ca716f148365a41796889e6d24e6c9a6ee6ac57bf7c35b45d4000ec638d191e5
54fe6b031f87b82f6076e9672f7162de1dafedb9fed9d38adeb999c7fc46f801
cd546342404315b06faff51d549b2eb94390d40a9ad826c1595add3f11afb909
16dc20173f13010008bc12a6355d582205897e7eb885f526a08bee072dabbb15
3b1777d8e7d96b31db8b64d64404ae82b3506f10ef198fad6321aa8cf04b5f54\xa d5236014d4b5ce20fbfba77f090d3573")); $openssl = array(array("3DZsVH4gt5xBueho", "30", "e19edc37d284b77a5a4600334b67317662393266323434393038666330653031
3730313664646137663830626366383363336239313664336637653133313933
306133613836363563643538396163642b6c12f20e7e1ae97422ee659914cc57
e99c7c97c7a4957e78ab957b18be4551"), array("CVALyUpDdMOSaxJN", "30313233343536373839", "a2535797ac0c83932fd9a2b8d6b2602662663439623337616631623434333233
3033343439313063656162373231666330333261383561356632393932386462
3631666364313236303962373636316296930828e0e154a0e8d262846835f242\xa e42de861cba81df69fe6fe5a5970fdf7"), array("wBZcBIhNSFiaCWE8", "303132333435363738396162636465", "d77b5d334d2820b5b5a54c5f71fce21130373832656561636661623564383766\xa 6338343636626662346566623035333461653566353366656438303063376561\xa 32643033343166376162376333373166c6cf828b68ff940e8de977e3471d1d51\xa 2e51bab7ee0f976dd6d87727b508f7cf"), array("PYeAhK5nWPIxGD2F", "30313233343536373839616263646566", "0c2b35c26794c55b94228af98ba7378133326361353835323130363730333039
3531343463653763663366386462363733666537646466326339303439373730
64343038313234393232313362653639dbec4d9abb2dcffbf186366476df34d2
500744fd27eda1e0ea0e54280b091d32ebd1e786402507cb3c591503e27f195b"), array("B9u8Tl9tRBgmnSHk", "3031323334353637383961626364656630", "8401d45dbce698cf9342152c75cd8f5164356231643534643561646636316462
6331373265623831373165363336616165343432383161633962646333373932
3139323034393665303863356331363743e5873d38758489b9d5800aabf31f3e
cf36e1e47955f5c96acdf8dc6cc7280c825949d46546796ec5a114985f5fe598"), array("cLHX5BvVQcdlozS6", "4e161a1df6", "e04aed1dc385788c3c777bc7b3cfa20c32656633363730393363366138643831\xa 3866303330613461666664623039326437623739613236333566353762333461
34653132366163653031303134353161eefebead8d190e854c05f598adfb8d7b\xa ef30c86c7cc7003f261b8ce26c62da55"), array("r8EZMeBVex-LC3c5", "5862447074634952357761764253733d", "ae03ee587e7df6407a17d43e3381b76563616366633165613463383063353930
6163613736656635663234613263323833393131363661333737333133356366
3963313236356663373035323264623224b4aa1536a8deba1dfa026efa614fb9
4915763a2629a00fe5ff8f1afc894f1b644f9b08ebc7baefc06229f177b5e446"), array("TRS5GvlQ2WCoEzHY", "82c2f315c69f20ec7ae391fc6c2de85281d54c97f74981b4efec0f5e4606765c\xa 040f1f45386bed4fdb9f998b0e7027c7414bea667b1205027c55eed927364446\xa 3b1832bc5338e3a7e10bf24d8e69f167b94551b6240f65b416feebd28599334a
a4", "f05611e02a2cccbfea4679e8110087a061396332303030396562663732626138\xa 3530363534313362373731316330363964393564653831636566646261363265\xa 38323536366666633438396566323939bce309f535fca3d1fb23e8503f8cf3b8
bca4c4bcfb4021592268f88070b5203f5023a6a39034e34048bc944c22e037fd
e6ca8ca17e2bdc8169d1e714830de6932cfe0dcdd1728e8bf848a6f4f7154d1c
0f8c650e0ef650ba3b90372eb6d13e93e3c79610291a523a3967a3049b04f1d4
c899e1554b04f906c2e6408a16702d19"), array("x_a2LHnyqH8WAwkZ", "badec0c7d9ca734e161a1df6ca4daa8cdbf6b3bbb60ec404b47a23226ec266b1
3837ffc969e9c23e2bbba72facb491a6a3271193a35026a9ebc93698d689bf7b
84fc384f544cc5d71c2945c8c48ae6348c753322fcaf75171b7d8f1e178e8545\xa 3d5c79f03bae6d9705cabbe7004ec81e188812a66313297fcf5d4c61a48614d2
1b5379fae60736f88bc737257bc1cfbef7016108dd1f3a537aaa681544f5bb20
c2d352212d6a2e460311ab7b93b611218b30c7402709bff89ecf814310c2db97
81f4142a54d6d41f82c33208c188a023c70befd697b496efb7c7b8569474a9d5
025a8ea8311c831b3de2b81800f28589b6aef537f6ada2e3d92a1ddd39cfd6b4
8113c8b36be890b099ca4e08655db0e9b5c211e706af052b776924233321412c
b1b540f08d88acd664c55854b05e31a15d4b0dc93b4514f62a88c3d4a451fe34\xa 74d2fbaee742f232959b5f6c2b71a8b6ad95a0d5362f39309aca710f37a4dae2
228e27d35f4d3fc87ee6ece4538587fad7835f9803f5ca64dfd856ae767a3482\xa c2f315c69f20ec7ae391fc6c2de85281d54c97f74981b4efec0f5e4606765c04
0f1f45386bed4fdb9f998b0e7027c7414bea667b1205027c55eed9273644463b\xa 1832bc5338e3a7e10bf24d8e69f167b94551b6240f65b416feebd28599334aa4\xa d998a599053cd477f54fc0af62a8ef75eb91096b153751b201b8374c4956508c\xa 6c82ea2ceb0265e74c96032787fe01139b578c3a14fd4e32a85195375b25da60
4f21187ee01df6042971d7c2b9dd8b611527377f28f933559f6b2edfe7bd8896
00627830bcdffcb884989013585cc6da726c7cc57c69e8664a244d234465f2a5
e736512a65e563a2a726915b50247aff165190c75d151139f2b31211a3acf94e
236d27b441fe64e88a443778359d57ba0fed8edbb01cc60a116f9599da4e47bf\xa e96850ac12d1199a080f1b591c60eae613fba444f9fe31fd42ee333678532556\xa 07fbfeef02cdbb2d0a8d2329adc7fba22aa4cd124c6e66e0b0aca796ba6aeb69\xa f8e76a9d1aaabe351bc42fefa6054977859b51158ba7143980d76db5b2cc6aec
9f83eac5edf79357632fb60cb4811e71892436e582375860faf8d8c518ee33ca
e08b18af7faa227d97196d7b041bcb366118751fbeaa92d80f86324ce8711cfd
65005cad0ce30878f508eb1ea2735e212ef3e42a78467d4f31b483087c3c63a3\xa 2fa62f2ae92e2acdfc3cf21b3419acc347ff51ccb17161e829cc4a24965fd930
b983d63153b9c13dd85340d7184bf01734d4357c1aabfbdc9711193ffa974832
4f88cf801f35708db0901ffaa55415ca4334678633dda763b5fbfba7cfd51dc5\xa 79149ec9284a4db2349dbc5264d5fca7a72034261716d90a996cb57ba09f7d07\xa 29a2f10cc58eec98d86e9306a3fbf2e711046e86b5a86cc0eed7625be1a01ebf", "5d841d0cb575fdb8c7e2cc48be47021d38646237366663323933346163643933
3861336335396666356139383066663033336333303731336263663262626136
643635333333393362306631333266320d73812258a45d90f8240d59c4e39e87\xa 8d4d999f36403a6f0b1d69ab9416792c5e8f2cf427af8423c8213a885fde488c
db95217c64c542f5e2be6b4375ff82e5c72a9f165049546b38295006f50665b1\xa 354350de4a68b5f16a18f7df53e0999f4f7ba5ba0676e416a0444d5b7accda8b\xa 093ae31a23e3cb63b6f404c437071435b8143f282c4cb4403a2b538af5a0d94f\xa 1e582c3bb9d5379ba5d576643854c232d74f303dcac91a711bf440fb24e7ab2a
70ef69008ffb59ad2455d4f1482e77114489a3b5a250384b24062f546f86073a\xa 91fdd85d34bd7814b4ce70ec8d6ea34f98067d7101050f3800f9f1fd92003856
223f8ca142749c2ef4c8d1991a62b0ff86623bf9afce65d55fb5efe80089cee4
e4f12e94e1748c5740f075a94a2290ba2dc892fdfde516ebc190a4db63e77f93\xa 54a3bec5ef695572dddcc9d7c43609724c73bc5bfe79d5f322890e4f39a31e6b\xa 3fb9388c78e133c58e395ca03eca2e8ab9520e4d2e5421e0d9a1f781a564dda7
720d56f413312762da078e0226053672983ecf5bdf18086a6f617071814d61e4\xa 27e6f02167b8d38e381607e4238f21c0b6e6d9222f1cc6348b9f7d6fb084cc3b\xa 306b7acbb94f4b3ab6b66fe539865fb804899d3f64c8bca6bd02ee5509022a50\xa 03d63e259bb414391fc10ae9b2e42c68a2be743488b69ca77c70741820aaeeb0\xa da2ff00c07787a39ec613e665d78c30b5f57a14fcbe24f00cf55eeb174e23dac
a9eb3587bc8dc8fdf5ef062b7f1659b45c48246055fda699b6ae8b9fcc46a380\xa ebc6b648662ef5fed1a4fe16c9aa310cc16f5ad642b80549262f5c77335f5435\xa a43d30459297b754350a9dd635b0ca5342fc798d369225f6d692eea0c901eb72
fd10af1199b7847ffc1a0c5915902fe339772183727c31497c752e3beb1cf010\xa 2c97ab270def6628bdae630172d73a9fc0afed1d893870003828f64518512886\xa 57d62ba52c8d325aa8409b0a40754dc3f84d1c8898e01e20c03464b83d2dae5d\xa 3d9f279778fb1161ac5d8f9c466fd0c6bdd6a21553ea9252ff018ae99b0d4425
0e55d177fb1e0275da97474ea052d85d96b7432c1be840e5994b127b147d1a0c\xa 64f1cea9115a37225c8b49960e0693680ee5593c81784c850811e1f10ce4f9a3\xa 365e3d2d240e0eef8da6404d5a93ebd000a98d5d33dd5a238327e88dfdad2744
ed0c4321a543c1a3231e53550e816c531b73bafec21e32daeecd199c7a2be75f
450ce4d39e10ad81a7ca74877e1661376d7cce557a1d4dde53b503e1512efef6
d607d5074ca8ba29db067454e529aec867907c6eded03ce90835d72974cddcc5\xa 83628bd2948a78a2d666ed89889f59b1dd5b05704b7e68a801ad9f93809e0d8a\xa ae72a72923883d4de81d867bf639eb5dc581429041ca78763235fe11251254c8
cca8bfe10e8810035e4cce023b6527744d0ea839bb035db99adc3ce742a5491d
c446220a6cb416a0bd3362b424dcdf3e")); return static::CRYPT_VECTORS === "new" ? $openssl : $mcrypt; } public function testEncryptByPasswordCompat($password, $data, $encrypted) { $data = hex2bin(preg_replace("{\s+}", '', $data)); $encrypted = hex2bin(preg_replace("{\s+}", '', $encrypted)); $this->assertEquals($data, $this->security->decryptByPassword($encrypted, $password)); } public function randomKeyInvalidInputs() { return array(array(0), array(-1), array("0"), array("34"), array(array())); } public function testRandomKeyInvalidInput($input) { $this->expectException(\yii\base\InvalidArgumentException::class); $this->security->generateRandomKey($input); } public function testGenerateRandomKey() { for ($length = 1; $length < 64; $length++) { $key1 = $this->security->generateRandomKey($length); $this->assertIsString($key1); $this->assertEquals($length, strlen($key1)); $key2 = $this->security->generateRandomKey($length); $this->assertIsString($key2); $this->assertEquals($length, strlen($key2)); if ($length >= 7) { $this->assertNotEquals($key1, $key2); } } $length = 1024 * 1024; $key1 = $this->security->generateRandomKey($length); $this->assertIsString($key1); $this->assertEquals($length, strlen($key1)); $key2 = $this->security->generateRandomKey($length); $this->assertIsString($key2); $this->assertEquals($length, strlen($key2)); $this->assertNotEquals($key1, $key2); } protected function randTime(Security $security, $count, $length, $message) { $t = microtime(true); for ($i = 0; $i < $count; $i += 1) { $key = $security->generateRandomKey($length); } $t = microtime(true) - $t; $nbytes = number_format($count * $length, 0); $milisec = number_format(1000 * $t, 3); $rate = number_format($count * $length / $t / 1000000, 3); fwrite(STDERR, "{$message}: {$count} x {$length} B = {$nbytes} B in {$milisec} ms => {$rate} MB/s\xa"); } public function testGenerateRandomString() { $length = 21; $key = $this->security->generateRandomString($length); $this->assertEquals($length, strlen($key)); $this->assertEquals(1, preg_match("/[A-Za-z0-9_-]+/", $key)); } public function dataProviderPbkdf2() { return array_filter(array(array("sha1", "password", "salt", 1, 20, "0c60c80f961f0e71f3a9b524af6012062fe037a6"), array("sha1", "password", "salt", 2, 20, "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957"), array("sha1", "password", "salt", 4096, 20, "4b007901b765489abead49d926f721d065a429c1"), getenv("GITHUB_ACTIONS") == true ? array("sha1", "password", "salt", 16777216, 20, "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984") : null, array("sha1", "passwordPASSWORDpassword", "saltSALTsaltSALTsaltSALTsaltSALTsalt", 4096, 25, "3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038"), array("sha1", "pass\x0word", "sa\0lt", 4096, 16, "56fa6aa75548099dcc37d7f03425e0c3"), array("sha256", "password", "salt", 1, 20, "120fb6cffcf8b32c43e7225256c4f837a86548c9"), array("sha256", "pass\x0word", "sa\x0lt", 4096, 32, "89b69d0516f829893c696226650a86878c029ac13ee276509d5ae58b6466a724"), array("sha256", "passwordPASSWORDpassword", "saltSALTsaltSALTsaltSALTsaltSALTsalt", 4096, 40, "348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9"))); } public function testPbkdf2($hash, $password, $salt, $iterations, $length, $okm) { $this->security->derivationIterations = $iterations; $DK = $this->security->pbkdf2($hash, $password, $salt, $iterations, $length); $this->assertEquals($okm, bin2hex($DK)); } public function dataProviderDeriveKey() { return array(array("Hash" => "sha256", "IKM" => "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", "salt" => "000102030405060708090a0b0c", "info" => "f0f1f2f3f4f5f6f7f8f9", "L" => 42, "PRK" => "077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5", "OKM" => "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865"), array("Hash" => "sha256", "IKM" => "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f", "salt" => "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf", "info" => "b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", "L" => 82, "PRK" => "06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244", "OKM" => "b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87"), array("Hash" => "sha256", "IKM" => "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", "salt" => '', "info" => '', "L" => 42, "PRK" => "19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04", "OKM" => "8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8"), array("Hash" => "sha1", "IKM" => "0b0b0b0b0b0b0b0b0b0b0b", "salt" => "000102030405060708090a0b0c", "info" => "f0f1f2f3f4f5f6f7f8f9", "L" => 42, "PRK" => "9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243", "OKM" => "085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896"), array("Hash" => "sha1", "IKM" => "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f", "salt" => "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf", "info" => "b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", "L" => 82, "PRK" => "8adae09a2a307059478d309b26c4115a224cfaf6", "OKM" => "0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4"), array("Hash" => "sha1", "IKM" => "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", "salt" => '', "info" => '', "L" => 42, "PRK" => "da8c8a73c7fa77288ec6f5e7c297786aa0d32d01", "OKM" => "0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918"), array("Hash" => "sha1", "IKM" => "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c", "salt" => null, "info" => '', "L" => 42, "PRK" => "2adccada18779e7c2077ad2eb19d3f3e731385dd", "OKM" => "2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48")); } public function testHkdf($hash, $ikm, $salt, $info, $l, $prk, $okm) { $dk = $this->security->hkdf((string) $hash, hex2bin((string) $ikm), hex2bin((string) $salt), hex2bin((string) $info), $l); $this->assertEquals($okm, bin2hex($dk)); } public function dataProviderCompareStrings() { return array(array('', ''), array("0", ''), array("0.00", ''), array('', "\0"), array("\0", ''), array("\x0", "\0"), array("0", "\x0"), array("user", "User"), array("password", "password"), array("password", "passwordpassword"), array("password1", "password"), array("password", "password2"), array('', "password"), array("password", '')); } public function testCompareStrings($expected, $actual) { $this->assertEquals(strcmp($expected, $actual) === 0, $this->security->compareString($expected, $actual)); } public function testMasking($unmaskedToken) { $maskedToken = $this->security->maskToken($unmaskedToken); $this->assertGreaterThan(mb_strlen($unmaskedToken, "8bit") * 2, mb_strlen($maskedToken, "8bit")); $this->assertEquals($unmaskedToken, $this->security->unmaskToken($maskedToken)); } public function testUnMaskingInvalidStrings() { $this->assertEquals('', $this->security->unmaskToken('')); $this->assertEquals('', $this->security->unmaskToken("1")); } public function testMaskingInvalidStrings() { $this->expectException(\yii\base\InvalidArgumentException::class); $this->expectExceptionMessage("First parameter ($length) must be greater than 0"); $this->security->maskToken(''); } public function maskProvider() { return array(array("1"), array("SimpleToken"), array("Token with special characters: %d1 5""), array("Token with UTF8 character: \342\200\240")); } } ?>
Did this file decode correctly?
Original Code
<?php
namespace yiiunit\framework\base; use yii\base\Security; use yiiunit\TestCase; class SecurityTest extends TestCase { const CRYPT_VECTORS = "\x6f\154\144"; protected $security; protected function setUp() : void { parent::setUp(); $this->security = new ExposedSecurity(); $this->security->derivationIterations = 1000; } public function testHashData() { $data = "\x6b\156\157\167\x6e\x20\x64\141\x74\x61"; $key = "\163\x65\x63\162\145\164"; $hashedData = $this->security->hashData($data, $key); $this->assertNotSame($data, $hashedData); $this->assertEquals($data, $this->security->validateData($hashedData, $key)); $hashedData[strlen($hashedData) - 1] = "\101"; $this->assertFalse($this->security->validateData($hashedData, $key)); } public function testPasswordHash() { $this->security->passwordHashCost = 4; $password = "\x73\x65\143\x72\x65\x74"; $hash = $this->security->generatePasswordHash($password); $this->assertTrue($this->security->validatePassword($password, $hash)); $this->assertFalse($this->security->validatePassword("\x74\145\163\164", $hash)); } public function testEncryptByPassword() { $data = "\153\156\157\167\156\40\144\x61\x74\141"; $key = "\163\x65\x63\162\145\164"; $encryptedData = $this->security->encryptByPassword($data, $key); $this->assertNotSame($data, $encryptedData); $decryptedData = $this->security->decryptByPassword($encryptedData, $key); $this->assertEquals($data, $decryptedData); $tampered = $encryptedData; $tampered[20] = ~$tampered[20]; $decryptedData = $this->security->decryptByPassword($tampered, $key); $this->assertFalse($decryptedData); } public function testEncryptByKey() { $data = "\x6b\x6e\157\167\156\x20\x64\x61\x74\141"; $key = $this->security->generateRandomKey(80); $encryptedData = $this->security->encryptByKey($data, $key); $this->assertNotSame($data, $encryptedData); $decryptedData = $this->security->decryptByKey($encryptedData, $key); $this->assertEquals($data, $decryptedData); $encryptedData = $this->security->encryptByKey($data, $key, $key); $decryptedData = $this->security->decryptByKey($encryptedData, $key, $key); $this->assertEquals($data, $decryptedData); $tampered = $encryptedData; $tampered[20] = ~$tampered[20]; $decryptedData = $this->security->decryptByKey($tampered, $key); $this->assertFalse($decryptedData); $decryptedData = $this->security->decryptByKey($encryptedData, $key, $key . "\0"); $this->assertFalse($decryptedData); } public function notestGenerateVectors() { $bin1024 = "\x62\141\x64\145\x63\x30\x63\x37\x64\x39\x63\141\x37\x33\x34\145\x31\66\x31\141\61\x64\x66\x36\x63\141\x34\144\x61\141\x38\x63\x64\142\x66\66\142\x33\142\x62\142\x36\x30\145\x63\x34\60\x34\x62\64\67\141\62\x33\62\62\66\145\143\62\66\x36\x62\61\xa\40\x20\40\x20\x20\40\x20\x20\x20\40\40\40\63\70\63\x37\x66\146\x63\71\x36\x39\145\71\x63\x32\63\x65\62\x62\142\x62\x61\67\62\146\141\x63\x62\x34\x39\61\x61\x36\141\x33\x32\x37\61\x31\x39\x33\141\63\65\x30\62\66\x61\71\x65\142\143\x39\x33\66\x39\70\144\66\x38\x39\x62\146\67\x62\12\x20\40\x20\x20\x20\x20\40\40\x20\40\x20\40\x38\64\x66\143\63\70\64\146\x35\64\64\143\x63\65\144\67\61\143\x32\x39\64\65\x63\x38\x63\x34\70\141\145\x36\63\64\x38\143\67\x35\x33\63\x32\x32\x66\x63\x61\146\67\65\61\x37\x31\x62\x37\x64\x38\x66\61\145\61\x37\70\145\70\65\64\x35\xa\x20\40\x20\40\40\x20\40\40\x20\x20\x20\x20\63\x64\x35\x63\x37\x39\146\60\63\x62\141\145\x36\x64\71\67\60\65\143\141\x62\142\x65\67\x30\x30\64\145\x63\x38\x31\x65\61\x38\x38\70\x31\x32\141\x36\x36\63\x31\63\x32\x39\67\x66\143\x66\x35\144\64\x63\66\x31\141\64\70\x36\61\x34\144\x32\12\x20\x20\40\x20\x20\40\40\x20\x20\x20\x20\x20\x31\142\65\x33\x37\71\146\141\x65\x36\x30\67\x33\x36\x66\70\70\x62\x63\x37\63\x37\62\65\x37\x62\143\x31\143\146\x62\x65\146\x37\x30\x31\66\61\60\x38\x64\144\61\146\63\141\x35\63\x37\141\141\141\66\70\x31\65\64\x34\x66\x35\x62\x62\x32\60\xa\x20\40\x20\40\x20\40\40\x20\x20\x20\40\x20\143\62\x64\63\x35\x32\62\x31\62\144\x36\x61\x32\x65\x34\66\x30\63\x31\61\x61\x62\x37\142\x39\x33\x62\66\x31\x31\x32\x31\70\142\x33\60\143\x37\64\60\62\67\x30\x39\x62\146\146\x38\71\x65\x63\x66\x38\x31\x34\63\x31\x30\143\x32\144\x62\71\x37\12\40\40\40\40\40\x20\40\x20\x20\40\x20\x20\70\x31\146\x34\x31\64\x32\141\65\64\x64\66\x64\64\x31\146\70\x32\x63\x33\x33\x32\x30\x38\x63\x31\x38\70\x61\x30\62\x33\143\x37\x30\x62\x65\x66\x64\66\x39\67\142\x34\x39\x36\x65\x66\x62\x37\143\67\x62\70\x35\x36\71\x34\67\64\x61\71\144\65\xa\40\40\x20\40\x20\40\40\x20\40\40\x20\40\x30\x32\x35\x61\70\x65\x61\x38\x33\x31\61\x63\x38\x33\x31\142\x33\144\145\62\x62\70\61\x38\60\x30\x66\x32\x38\65\70\71\x62\66\141\145\146\65\x33\x37\x66\66\x61\x64\x61\x32\145\63\144\71\62\x61\x31\144\x64\144\63\x39\x63\x66\x64\x36\142\64\12\x20\40\40\40\x20\x20\40\40\x20\x20\x20\40\x38\x31\x31\63\x63\70\x62\63\x36\x62\145\x38\71\x30\142\x30\71\x39\x63\141\64\145\x30\70\66\65\65\144\x62\60\145\71\x62\65\x63\62\61\61\145\67\x30\66\141\x66\x30\x35\x32\142\67\x37\66\71\x32\x34\x32\63\63\63\x32\61\64\61\62\x63\12\x20\x20\40\x20\40\x20\x20\40\x20\40\x20\x20\142\61\x62\65\64\60\x66\x30\x38\144\70\70\x61\x63\x64\66\x36\x34\143\x35\65\70\x35\x34\142\x30\x35\x65\x33\61\141\x31\65\144\64\x62\60\x64\143\71\x33\x62\64\x35\x31\x34\x66\x36\x32\x61\x38\x38\x63\63\144\64\x61\x34\x35\x31\x66\145\63\64\xa\x20\40\x20\x20\x20\40\40\x20\40\40\x20\40\67\64\144\x32\146\142\141\x65\x65\x37\64\x32\x66\x32\x33\62\71\x35\71\142\x35\146\66\143\x32\x62\67\61\141\70\x62\x36\x61\x64\71\65\141\x30\x64\65\x33\66\x32\x66\63\71\63\x30\71\141\143\x61\x37\x31\x30\x66\x33\x37\141\x34\x64\x61\x65\62\12\x20\40\40\40\40\x20\40\x20\40\x20\x20\x20\x32\x32\70\x65\62\x37\144\63\x35\146\64\x64\63\146\143\70\67\x65\145\66\x65\143\145\x34\65\63\x38\65\70\67\146\x61\x64\x37\70\63\x35\146\71\70\x30\63\x66\65\143\x61\66\64\144\146\144\70\x35\66\x61\145\67\66\67\141\63\x34\70\62\12\x20\x20\x20\40\40\x20\x20\40\x20\40\40\40\x63\62\146\63\61\65\143\x36\71\146\x32\x30\x65\143\x37\141\x65\x33\71\x31\x66\143\x36\143\62\x64\x65\70\x35\x32\70\61\144\65\64\143\71\67\146\67\64\71\70\x31\142\64\x65\146\145\x63\x30\146\x35\x65\64\66\60\x36\67\x36\x35\x63\60\x34\12\40\40\x20\x20\x20\40\40\40\x20\x20\40\x20\x30\146\x31\146\x34\x35\x33\x38\x36\x62\145\x64\x34\x66\144\142\x39\146\x39\71\x38\x62\60\x65\67\x30\62\67\x63\x37\x34\x31\64\142\145\x61\66\x36\x37\x62\61\62\60\x35\60\x32\x37\143\65\x35\x65\145\144\x39\62\67\x33\x36\x34\64\64\66\x33\x62\xa\40\x20\40\40\x20\40\40\x20\40\x20\40\40\x31\70\63\62\x62\x63\x35\63\x33\70\145\63\141\67\145\x31\60\x62\146\62\x34\144\70\145\66\71\x66\x31\x36\x37\142\71\64\x35\x35\x31\142\x36\62\64\x30\146\66\x35\142\x34\x31\x36\x66\145\145\x62\x64\x32\70\x35\x39\x39\x33\63\64\141\x61\x34\12\x20\40\x20\40\x20\40\40\x20\x20\x20\x20\x20\x64\71\71\70\x61\65\x39\71\60\x35\63\143\144\x34\x37\x37\x66\x35\64\x66\x63\x30\141\146\x36\62\x61\70\x65\x66\67\x35\x65\x62\71\x31\60\x39\66\x62\x31\x35\63\x37\65\61\142\62\60\61\142\70\x33\x37\x34\x63\64\x39\x35\x36\65\x30\70\143\12\x20\x20\x20\x20\x20\x20\40\x20\40\40\x20\x20\x36\x63\70\x32\x65\141\x32\x63\145\142\60\x32\66\x35\x65\x37\64\143\71\66\x30\x33\x32\67\x38\x37\146\x65\60\61\61\63\71\x62\x35\x37\x38\x63\63\141\61\64\x66\144\x34\x65\x33\62\x61\x38\x35\61\71\x35\x33\67\x35\142\x32\65\x64\141\x36\60\xa\x20\x20\x20\x20\x20\40\x20\40\40\40\x20\40\64\x66\62\61\61\70\x37\145\x65\x30\x31\144\x66\66\60\x34\62\71\67\x31\x64\x37\143\62\142\x39\144\x64\x38\142\x36\x31\x31\65\62\x37\63\67\67\x66\62\x38\x66\71\x33\x33\65\x35\x39\146\66\x62\62\145\144\146\145\67\142\144\70\x38\71\x36\xa\x20\x20\40\40\40\40\x20\40\x20\40\x20\x20\60\60\66\62\67\x38\x33\x30\142\143\x64\x66\146\x63\142\x38\x38\x34\71\x38\x39\60\x31\x33\65\x38\65\x63\143\66\144\141\67\x32\x36\x63\67\x63\x63\x35\x37\143\x36\x39\145\x38\66\x36\64\x61\62\64\x34\x64\x32\63\x34\64\66\65\x66\x32\x61\x35\xa\40\x20\40\40\40\x20\40\x20\40\x20\x20\x20\x65\67\63\66\x35\61\x32\x61\66\65\x65\65\66\x33\141\x32\x61\67\x32\66\x39\61\65\x62\65\x30\x32\x34\x37\x61\x66\x66\x31\x36\65\61\x39\x30\x63\x37\65\144\x31\x35\x31\61\x33\71\146\62\142\63\61\62\x31\61\141\63\x61\143\146\x39\x34\145\12\x20\x20\x20\40\40\x20\40\x20\40\40\x20\40\x32\x33\66\144\62\67\x62\x34\64\x31\146\145\x36\64\x65\70\70\x61\64\64\x33\x37\67\70\x33\x35\71\144\65\x37\x62\x61\60\146\x65\x64\x38\x65\144\142\x62\x30\x31\143\143\x36\x30\141\61\x31\x36\146\x39\65\71\71\x64\x61\x34\x65\64\x37\142\146\xa\x20\x20\40\x20\40\x20\40\x20\40\40\x20\40\145\x39\66\x38\x35\x30\141\143\61\62\x64\61\x31\71\71\141\x30\70\x30\146\x31\142\65\71\x31\143\x36\x30\x65\x61\145\x36\61\63\146\142\141\64\x34\x34\x66\71\x66\145\x33\x31\146\x64\x34\62\x65\x65\63\63\x33\66\x37\70\65\63\x32\x35\x35\x36\xa\40\x20\x20\40\x20\40\40\x20\40\x20\40\x20\60\67\146\x62\x66\x65\145\x66\60\x32\x63\x64\142\142\x32\x64\60\x61\70\144\62\63\x32\x39\x61\144\143\67\x66\x62\141\x32\x32\141\x61\64\x63\x64\x31\x32\64\143\x36\145\x36\x36\145\60\142\x30\x61\x63\x61\x37\71\x36\142\141\66\141\x65\x62\x36\x39\xa\x20\x20\40\x20\40\40\40\x20\40\40\40\x20\x66\70\145\x37\x36\141\x39\144\x31\x61\x61\x61\x62\145\x33\x35\x31\x62\x63\x34\62\x66\145\146\141\66\60\x35\64\71\67\x37\70\65\71\x62\x35\x31\x31\x35\x38\x62\141\67\61\64\63\71\x38\60\144\x37\66\144\x62\x35\142\x32\x63\143\x36\141\x65\143\xa\40\x20\40\40\x20\40\x20\40\x20\40\x20\x20\x39\146\x38\63\x65\141\x63\x35\x65\144\x66\67\x39\63\x35\67\x36\x33\x32\x66\142\x36\60\143\142\64\x38\61\x31\145\x37\61\x38\x39\x32\64\63\66\145\65\x38\62\63\x37\65\70\66\x30\x66\141\x66\x38\x64\70\x63\x35\x31\x38\145\x65\x33\x33\143\x61\12\40\40\x20\40\x20\40\x20\x20\x20\40\40\x20\145\60\70\142\x31\x38\141\x66\67\146\141\x61\62\62\67\144\71\x37\61\71\66\x64\x37\142\60\x34\x31\x62\143\x62\x33\x36\x36\x31\x31\70\x37\65\61\x66\142\x65\141\x61\x39\62\x64\70\60\146\70\x36\x33\62\64\x63\145\x38\x37\61\61\x63\x66\x64\12\40\x20\x20\40\x20\x20\x20\40\40\x20\40\x20\66\65\60\60\65\x63\x61\144\x30\143\x65\63\x30\70\x37\70\146\x35\x30\70\145\142\x31\145\141\62\67\63\x35\145\x32\x31\x32\x65\146\63\145\x34\x32\141\67\70\64\66\67\x64\x34\x66\x33\61\142\x34\70\x33\x30\70\x37\143\63\x63\66\63\x61\63\xa\x20\40\40\x20\40\40\x20\x20\x20\40\x20\40\x32\x66\x61\x36\62\x66\62\x61\x65\x39\x32\x65\x32\x61\x63\x64\146\x63\x33\x63\146\x32\x31\142\x33\64\x31\71\x61\143\x63\x33\x34\67\146\146\x35\x31\143\x63\142\61\67\61\x36\x31\145\x38\62\71\x63\143\x34\x61\x32\64\x39\x36\65\146\144\71\63\60\12\x20\x20\40\40\x20\40\40\x20\x20\x20\40\x20\x62\71\x38\x33\x64\66\x33\x31\65\x33\142\71\x63\61\x33\144\144\70\65\63\x34\x30\x64\x37\x31\70\64\x62\146\x30\x31\x37\x33\x34\x64\64\63\x35\67\x63\61\x61\141\x62\146\142\x64\143\x39\67\61\x31\61\x39\63\x66\x66\x61\x39\x37\64\x38\x33\62\xa\x20\x20\40\40\40\40\x20\x20\x20\40\40\x20\x34\x66\70\x38\x63\146\70\60\x31\146\63\x35\67\x30\x38\144\142\x30\x39\x30\61\146\x66\x61\141\65\x35\64\x31\x35\x63\x61\64\63\63\x34\66\x37\x38\66\63\63\144\144\x61\x37\66\63\x62\x35\146\142\146\142\141\67\143\146\144\x35\x31\x64\143\65\12\x20\40\40\x20\40\x20\x20\x20\40\x20\x20\x20\67\71\x31\64\71\x65\143\x39\62\x38\x34\x61\x34\x64\x62\x32\63\x34\x39\144\142\143\x35\62\66\64\x64\65\x66\143\x61\67\141\x37\62\60\63\x34\62\66\61\67\61\66\x64\x39\x30\141\71\71\66\143\142\x35\67\142\141\60\71\146\67\144\x30\x37\xa\40\x20\x20\40\x20\40\x20\x20\x20\40\40\x20\x32\x39\141\62\146\61\x30\143\x63\65\x38\145\145\143\x39\x38\144\70\x36\x65\x39\63\x30\x36\x61\63\x66\142\x66\62\x65\67\x31\61\x30\x34\66\145\70\x36\x62\x35\x61\70\66\x63\143\60\x65\x65\144\67\66\62\x35\142\145\61\141\x30\61\145\x62\146"; $bin1024 = hex2bin(preg_replace("\173\134\x73\x2b\175", '', $bin1024)); $inputs = array("\x30", "\x30\x31\62\63\x34\65\x36\x37\70\x39", "\x30\x31\x32\63\64\65\66\67\x38\71\x61\x62\143\144\x65", "\x30\61\62\63\64\x35\66\x37\70\71\141\142\143\144\x65\x66", "\60\x31\62\x33\64\x35\66\x37\70\x39\141\x62\x63\144\145\146\x30", mb_substr($bin1024, 7, 5, "\70\x62\x69\164"), base64_encode(mb_substr($bin1024, 269, 11, "\x38\142\151\164")), mb_substr($bin1024, 383, 97, "\x38\142\151\x74"), $bin1024); foreach (array("\113\145\x79", "\120\x61\x73\x73\167\157\x72\144") as $method) { $keygen = "\x67\x65\156\x65\x72\x61\x74\x65\x52\x61\x6e\144\x6f\x6d" . ($method === "\113\145\x79" ? "\x4b\145\x79" : "\123\x74\x72\x69\156\147"); $encrypt = "\x65\x6e\x63\x72\171\x70\x74\102\171" . $method; $decrypt = "\144\x65\143\x72\171\x70\x74\x42\x79" . $method; foreach ($inputs as $data) { $key = $this->security->{$keygen}(16); $encrypted = $this->security->{$encrypt}($data, $key); $keyHex = $method === "\x4b\x65\171" ? bin2hex($key) : $key; $dataHex = trim(chunk_split(bin2hex($data), 64, "\12\x9")); $encryptedHex = trim(chunk_split(bin2hex($encrypted), 64, "\xa\x9")); echo "\x5b\xa\x20\40\40\40\x27{$keyHex}\47\x2c\12\40\x20\40\40\x27{$dataHex}\47\x2c\12\x20\40\x20\40\x27{$encryptedHex}\47\54\xa\x5d\54\xa"; $key2 = $method === "\113\145\x79" ? hex2bin(preg_replace("\x7b\x5c\x73\53\x7d", '', $keyHex)) : $key; $data2 = hex2bin(preg_replace("\173\x5c\163\53\175", '', $dataHex)); $encrypted2 = hex2bin(preg_replace("\173\134\163\53\175", '', $encryptedHex)); $this->assertEquals($data, $this->security->{$decrypt}($encrypted2, $key2)); $this->assertEquals($data2, $this->security->{$decrypt}($encrypted2, $key)); } } } public function dataProviderEncryptByKeyCompat() { $mcrypt = array(array("\x62\70\x36\x62\67\x35\62\x39\141\x35\62\x35\x64\x31\64\70\143\143\x37\63\x37\71\x38\144\141\x35\x32\x38\x64\x38\141\60", "\x33\60", "\x34\146\142\x34\67\x36\x35\142\145\141\66\x62\x65\142\x32\60\70\142\141\71\63\x39\x35\142\146\x36\144\67\x34\x39\67\x66\x33\67\66\62\66\64\66\x33\x33\62\x33\x37\x33\x30\x33\71\66\63\66\x32\63\66\66\x33\63\70\x33\x37\66\x35\63\66\12\x20\40\40\40\40\x20\x20\x20\x20\x20\40\x20\40\x20\40\x20\x33\62\63\66\x36\65\x36\x35\63\x35\66\x31\x33\60\x33\65\x33\x37\63\x38\63\65\x33\x32\63\x30\66\61\x33\64\63\x30\63\x31\x36\61\63\67\x36\64\63\x39\63\60\x36\x32\x33\x35\63\x34\63\71\66\62\63\70\x33\x34\x33\x35\x33\61\63\x35\12\x20\40\x20\x20\40\40\40\x20\x20\40\40\x20\40\x20\x20\40\x33\x37\66\x34\x33\65\63\70\x33\x36\63\65\63\71\63\60\66\x35\63\71\63\66\63\66\66\x35\66\x36\66\x33\x33\x37\70\x38\x30\67\x62\60\x30\60\62\x30\145\x61\61\x30\61\x30\61\x62\x62\x66\x63\62\x65\x66\60\x64\146\x65\x65\x30\70\62\xa\x20\x20\x20\x20\40\x20\40\x20\40\x20\40\40\x20\40\40\x20\x66\143\142\x63\x31\71\x32\x37\x64\141\x65\x65\x37\145\x36\x64\x30\x36\61\142\x63\x37\141\67\x63\x38\144\x38\145\70\x37\x37"), array("\x37\x65\x32\61\64\x62\142\66\x62\62\67\x31\60\x38\71\x31\70\143\x30\x30\67\143\x30\146\x39\x65\x31\142\x64\144\x38\x61", "\63\60\x33\x31\x33\x32\x33\63\63\64\63\x35\x33\x36\63\67\x33\70\63\x39", "\71\x38\71\70\61\x64\63\71\146\x30\143\71\70\x35\x61\x63\141\65\x37\x37\x65\x32\145\x62\x39\64\67\x32\60\65\71\x33\63\x39\66\x32\x33\63\63\62\63\64\63\x33\63\x35\66\64\x36\x36\63\64\x36\x31\x33\x36\x33\60\x36\x31\66\63\63\65\12\40\40\x20\40\40\40\40\x20\40\x20\40\x20\x20\x20\40\40\66\x31\63\63\x33\x32\x33\x36\63\x39\66\x36\63\63\x33\x36\66\63\x33\65\x33\x33\63\x31\x33\x30\63\x32\x33\65\x33\x31\x36\x34\x33\71\x33\65\66\x32\63\x30\63\x34\63\x34\x36\62\x33\65\x33\x33\x33\62\x36\63\x33\61\66\65\63\x35\x36\61\12\x20\x20\40\40\x20\x20\40\x20\x20\x20\x20\x20\40\x20\40\x20\x36\65\66\x36\x33\64\66\x35\66\x31\66\x34\63\x30\x36\66\66\x34\63\63\x33\x31\63\71\x33\64\63\x37\66\x32\x33\x33\x36\x36\x65\x39\x33\x66\x65\60\x65\146\60\141\62\x32\60\x65\146\61\62\x32\70\x62\145\x39\x66\71\x31\x39\x35\x34\x37\x35\12\40\x20\x20\40\40\40\40\40\40\x20\x20\40\40\x20\40\40\145\142\x33\60\x33\x62\70\64\x31\x62\x36\x33\67\x31\x38\x34\61\61\x32\x36\x63\x31\x33\145\144\64\x31\x39\x64\71\63\61"), array("\143\x31\63\71\x66\66\x37\71\61\65\x32\x30\66\x62\x37\62\x39\66\142\143\66\141\x62\x33\70\x33\141\x32\67\x38\x36\x63", "\63\x30\63\61\x33\x32\x33\63\63\64\63\65\x33\66\x33\67\63\x38\63\x39\66\x31\66\62\x36\x33\x36\x34\x36\65", "\65\67\67\x33\x30\x32\70\x66\62\142\145\60\144\146\67\x32\60\143\142\x33\142\x65\62\x63\x62\71\70\71\145\x39\x65\61\66\x31\x36\x31\66\x34\63\60\63\x39\63\x35\x33\x38\x33\x36\x33\64\63\67\66\x32\63\70\66\62\63\62\66\x32\66\x34\xa\40\x20\x20\x20\x20\40\x20\x20\40\x20\40\40\x20\40\x20\x20\x36\x34\63\x36\x33\x33\x36\x31\63\63\x36\x34\x33\x37\x33\70\63\63\x33\x38\66\66\63\65\63\63\63\71\x33\x39\x33\71\63\62\63\62\66\x34\x33\62\63\x35\66\64\x33\x33\x33\60\x36\66\63\60\66\x36\x33\60\66\62\66\61\63\63\63\x31\xa\40\40\40\x20\40\x20\40\x20\40\x20\x20\40\40\x20\40\40\x33\x38\x36\x36\x36\66\x33\61\x33\60\63\x33\66\x32\66\66\66\x31\63\63\63\x30\66\65\63\61\63\x30\63\x31\66\62\63\x64\x35\x65\x39\x38\x30\144\145\x61\143\x62\x36\x33\66\71\65\x39\62\143\x39\x30\x65\67\x61\x66\x63\141\x36\x65\x36\x62\12\x20\x20\40\40\x20\40\40\x20\x20\x20\40\x20\40\40\x20\40\60\x36\67\63\x36\x36\65\64\x33\x37\70\143\x63\71\x33\x62\x32\144\x32\x33\x38\x65\66\63\x36\x30\71\66\x39\71\x35\66"), array("\x39\x31\60\143\x30\65\62\61\x35\x37\71\x35\x33\x31\x39\x34\144\x35\65\62\x65\63\x61\63\x66\60\x30\66\61\x61\x62\x37", "\63\x30\x33\61\63\62\x33\63\63\x34\63\x35\63\66\63\67\x33\x38\x33\71\x36\61\66\x32\x36\x33\66\64\x36\65\66\x36", "\63\x31\x34\x31\x63\64\70\143\x63\x30\x62\x37\63\x65\x65\x34\x33\x64\65\x63\144\x39\141\145\65\x63\70\x61\x31\65\63\146\66\x36\x33\x34\x33\60\63\71\x33\x33\x33\x36\x33\x38\63\71\66\x36\63\x32\66\x35\x33\x32\63\71\x36\62\63\x34\63\64\xa\x20\40\40\40\x20\x20\x20\40\x20\x20\40\40\x20\x20\40\x20\63\61\66\x32\x36\61\x36\66\x36\64\x36\63\66\63\x33\61\63\x31\66\x32\63\x38\63\63\x36\62\x36\x35\x36\62\x36\65\x33\x36\63\63\x36\62\63\61\x36\x35\63\67\x36\x34\x36\66\63\67\63\x32\x33\71\x36\x36\63\x38\63\63\x36\61\63\x38\12\x20\40\x20\x20\x20\x20\40\40\40\x20\x20\40\40\40\40\40\x33\64\66\63\x36\x34\63\x38\x36\61\66\x32\66\65\x33\x37\66\x31\63\x38\66\x31\63\x35\63\71\66\65\x36\61\66\64\x62\x30\60\x34\144\x64\64\x65\x62\x64\144\142\141\x30\x34\71\141\x65\60\66\70\x39\63\x36\x36\x34\63\144\x64\64\67\x35\12\x20\40\x20\40\40\x20\x20\40\x20\x20\40\40\x20\40\40\40\x63\x30\67\66\71\66\142\x30\x63\143\61\67\x33\143\62\x65\142\x34\143\x32\144\67\142\143\63\x33\x36\64\70\64\65\x65\66\x65\x33\x36\x35\66\x62\64\x36\63\x62\x30\64\145\x32\x32\67\x31\143\142\x31\60\70\62\64\146\61\63\x36\65\145\x63"), array("\x32\x38\144\x30\141\x64\x30\71\x63\145\63\x36\x37\x63\x61\x38\145\60\x37\x37\x32\142\142\145\x65\x65\x61\66\x63\64\x30\x64", "\63\x30\x33\x31\x33\62\63\x33\x33\64\x33\x35\x33\x36\x33\x37\x33\x38\x33\x39\x36\61\66\62\x36\x33\x36\x34\66\65\66\x36\63\x30", "\x31\146\x31\x39\x30\x31\x33\x39\65\x39\x61\60\x39\70\65\x63\x66\x30\62\x33\65\143\x34\x66\146\64\x36\141\62\60\x63\61\x33\x35\66\x32\66\x32\x33\x35\x36\x33\63\x34\63\x37\x33\x38\63\65\63\62\x33\x34\63\x37\63\66\x36\61\x33\x39\66\63\xa\x20\x20\x20\x20\x20\40\x20\40\x20\x20\40\40\x20\x20\40\40\x33\x37\66\x35\x36\x34\66\63\x33\x34\66\x36\x36\x32\x36\63\x33\x32\x33\x38\63\62\66\x34\x33\64\x33\70\66\x36\x33\63\66\61\x33\x32\63\x32\x36\x36\x33\x30\x33\62\x36\64\63\x38\x33\x33\x33\x37\x36\x31\63\x37\63\66\x33\66\63\x31\63\63\12\40\40\x20\40\x20\x20\x20\40\40\x20\x20\40\40\40\40\x20\x36\66\x36\x34\63\x32\63\x37\x33\66\x33\62\63\64\63\x32\x33\x36\63\x31\63\x33\x33\x31\66\x35\66\x33\x36\62\63\x35\x34\144\145\62\62\60\63\61\64\71\146\x38\x62\x34\146\x33\x34\70\143\x30\66\x65\x61\x34\145\62\145\142\71\64\145\65\12\x20\x20\x20\40\x20\40\x20\40\x20\40\x20\40\x20\40\40\40\144\145\x34\x64\x65\141\146\x31\144\61\71\70\145\x31\x34\x65\x37\143\64\64\70\64\x32\61\x30\x30\x32\142\x64\x66\x61\71\145\x64\x39\67\71\65\x30\62\x64\70\66\x37\x35\60\x64\67\x30\141\x65\x62\x61\x61\x31\143\x37\x32\x37\141\x65\67\71\x65"), array("\142\66\x35\70\x61\x63\64\x62\71\x66\141\x31\x33\x63\63\143\61\144\64\x30\66\x39\x39\141\x62\141\x38\x38\x36\x62\x37\x62", "\x34\145\61\66\61\141\x31\x64\x66\66", "\61\x35\x34\60\61\x35\x65\x62\142\70\x32\62\x61\x35\x35\70\66\71\x37\x32\61\x61\60\x62\61\x63\x32\62\x34\x39\x37\67\66\62\x36\65\x33\x32\x36\x36\x36\66\x33\x32\66\64\x33\63\63\x36\63\x31\x33\67\x33\x39\63\x38\66\65\x33\x35\63\71\12\40\x20\40\x20\x20\40\40\40\x20\x20\40\40\40\x20\40\x20\x33\64\66\x35\x33\61\x36\64\66\66\x33\71\66\x35\x33\x35\x33\x34\63\x39\x36\66\x33\x37\x33\x37\63\x38\x36\x36\x36\x36\x36\x33\x36\64\x36\62\x33\62\x36\x35\66\x31\66\63\63\x38\x33\x37\x33\x33\66\63\x33\x37\63\71\x33\62\x33\63\x33\64\xa\x20\x20\x20\x20\40\40\40\x20\x20\x20\x20\x20\x20\40\40\40\63\61\66\63\x36\63\x36\62\x33\65\66\x32\63\65\x33\x34\66\62\63\x36\63\61\x33\x33\x36\x32\x33\61\63\x34\x36\64\x33\x64\x31\x31\70\x32\61\x36\x39\x38\x35\x61\x63\67\x65\63\x66\x36\70\70\x38\x61\x39\x35\x35\x35\62\x62\66\x61\66\x37\xa\40\40\x20\40\x20\x20\40\x20\x20\40\40\40\40\x20\x20\x20\66\146\x66\67\x30\x64\x61\x66\x38\144\146\142\x36\x35\x62\x34\144\x35\146\x36\x32\x61\x39\63\66\x62\x37\x66\66\64\x64\67"), array("\x62\141\x65\142\x34\63\60\x37\62\146\x32\x30\141\146\x30\146\70\65\143\66\x32\x35\x32\141\x61\71\146\x30\x64\x34\x37\x32", "\65\70\66\x32\64\x34\x37\x30\x37\64\x36\63\64\x39\65\x32\x33\x35\x37\67\66\x31\x37\x36\64\x32\x35\63\67\63\63\x64", "\x62\x65\x62\x36\144\143\x64\x30\146\142\64\x34\x34\143\x62\146\x37\65\71\141\x32\64\x31\x62\x64\x30\x65\141\x32\66\x65\x35\63\x37\63\63\66\x31\x33\65\63\x33\x33\65\x33\x32\x36\65\x36\x31\63\x36\66\x35\63\62\x36\x32\x33\x30\63\67\63\66\xa\x20\x20\40\x20\40\x20\x20\x20\40\x20\x20\40\x20\40\40\40\x33\x30\66\61\66\65\x36\66\63\x35\63\x32\x36\x31\x33\x36\63\x37\66\x32\x33\x30\63\x33\x33\x31\x33\x32\x36\66\63\x38\63\71\x36\62\x36\x34\63\x31\63\x36\66\x32\66\x35\63\66\63\x35\x36\65\66\64\x33\x30\66\64\66\x31\x36\63\66\62\12\40\x20\x20\40\40\x20\x20\40\40\40\x20\x20\x20\x20\40\x20\63\71\66\63\63\70\x33\x30\63\61\63\60\x36\66\x33\x35\66\63\63\x30\66\65\x33\x34\66\x36\x36\61\63\x32\x33\x32\x64\144\x39\143\x66\145\x34\x66\64\x34\71\x35\146\63\x34\141\x39\x37\x31\x61\x32\x35\x64\70\70\61\x64\144\64\70\141\63\xa\x20\x20\40\x20\x20\x20\40\x20\x20\40\x20\40\x20\40\x20\40\61\62\60\71\x33\141\x36\63\60\x37\x61\x38\x37\x65\64\x35\x34\64\145\x32\x31\67\x63\x66\x39\144\63\71\x64\144\65\63\66\x61\65\x38\x38\x32\144\x32\142\71\x38\x36\67\141\142\x65\x66\145\146\x35\x63\61\x64\x61\x64\61\x32\67\64\x34\x37\x65"), array("\144\65\x32\x37\146\70\65\64\145\70\x66\x33\67\143\x34\71\x63\67\61\142\x38\x32\x63\64\70\x64\70\x62\x34\x37\67\x35", "\70\62\143\x32\x66\x33\x31\65\143\x36\71\146\x32\60\x65\143\x37\141\145\x33\x39\61\x66\x63\x36\143\x32\144\145\x38\65\62\70\61\x64\x35\x34\143\x39\67\x66\x37\x34\71\70\61\142\64\145\146\x65\143\x30\146\x35\145\x34\x36\x30\x36\x37\66\65\143\xa\x20\40\x20\40\40\x20\40\x20\40\40\x20\40\x20\40\x20\40\x30\x34\x30\146\61\146\64\65\63\x38\66\x62\x65\x64\x34\x66\x64\x62\x39\x66\x39\71\70\x62\x30\x65\x37\x30\62\67\143\67\x34\x31\64\x62\x65\x61\66\66\x37\x62\61\x32\x30\65\60\x32\67\x63\x35\65\x65\x65\144\x39\62\67\x33\x36\x34\64\64\66\12\x20\40\x20\40\40\40\x20\40\x20\x20\x20\x20\x20\40\40\x20\63\142\x31\x38\63\x32\142\143\65\63\x33\x38\145\63\141\67\x65\61\x30\142\146\x32\x34\x64\70\145\x36\x39\x66\61\66\67\x62\71\64\65\65\x31\142\66\x32\64\60\146\x36\65\142\x34\61\x36\x66\x65\x65\x62\144\62\x38\x35\x39\71\63\x33\x34\x61\xa\40\40\40\40\x20\x20\40\x20\x20\40\40\40\40\x20\x20\40\141\64", "\142\141\x61\70\64\143\62\x63\x30\x35\x62\62\x61\x63\70\x65\x66\144\71\x66\x63\70\146\x39\70\62\x34\145\x66\x62\x35\144\x36\x33\63\x30\x36\63\x36\x36\x33\71\63\71\x33\x39\x36\x32\66\65\63\x32\x33\62\63\x35\63\x32\x36\64\x36\x34\x33\63\xa\x20\x20\x20\x20\x20\40\40\x20\40\40\40\40\x20\40\40\40\x36\65\x33\x39\x33\x34\66\x32\66\x35\x33\70\63\71\x33\x36\63\63\x36\62\x36\62\63\60\63\x33\63\71\63\63\x36\66\x33\65\x33\63\63\x31\66\64\x33\x38\63\x33\x33\71\63\62\x36\64\x33\x36\x33\67\x36\x36\63\61\x33\65\x33\63\66\66\12\x20\40\x20\x20\x20\x20\40\x20\40\40\40\40\x20\x20\40\x20\x36\64\63\x33\66\x31\x36\x36\63\x39\x36\x35\x33\x36\63\70\x33\71\63\60\66\x33\x33\67\66\61\63\x37\x36\x32\x36\65\x37\x34\142\x64\x37\141\141\70\x63\x35\x66\63\x31\63\145\62\144\70\142\67\141\64\x63\141\64\x61\x66\x33\x35\60\71\x30\12\40\40\40\x20\40\x20\40\40\40\40\40\x20\40\x20\40\x20\x39\x36\71\65\70\64\x35\x63\x39\144\x36\62\143\x64\x39\61\x63\64\x38\66\x33\x30\67\x64\x33\141\145\60\x37\60\61\x65\x34\x61\x62\x64\x31\146\x61\66\71\141\62\x35\65\x61\141\x62\61\x65\x36\141\x63\62\x38\67\x34\146\141\x31\x62\143\60\x61\12\40\x20\x20\40\x20\40\x20\40\x20\x20\40\40\x20\40\40\40\x30\x36\65\63\64\x30\64\61\70\141\66\x36\x36\71\x34\62\x37\x62\143\x64\x65\143\x37\x35\x31\63\60\60\143\145\67\66\66\66\x61\x33\70\144\61\67\x64\70\65\60\x66\67\144\x61\145\64\x65\x61\x39\65\x36\67\x30\64\65\x33\65\66\x65\x38\12\40\40\40\40\x20\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\x20\146\x33\64\x37\x39\64\x31\x32\x32\66\142\146\67\x62\x32\x64\64\144\144\63\141\x32\61\143\x38\141\141\x30\x62\x33\x38\61\x66\x38\141\x64\x30\x36\143\63\141\65\65\x61\x37\x64\x32\x63\142\71\66\67\141\x64\x31\x34\70\61\64\62\143\62\70\67\xa\40\40\40\x20\x20\x20\x20\x20\x20\40\x20\40\x20\40\x20\40\x66\61\x32\141\65\x36\x33\x66\x39\143\144\x32\x63\x36\x32\62\64\x65\67\x65\146\x62\x38\146\x64\144\x31\63\x30\x62\x62\71"), array("\x30\61\x30\62\x35\x62\x66\145\143\x32\x31\x64\144\141\64\63\64\62\x38\60\71\143\x66\x32\60\63\70\x32\x64\145\62\x39", "\142\141\x64\x65\143\60\x63\x37\x64\x39\x63\141\x37\x33\x34\x65\61\66\x31\141\x31\x64\146\x36\143\141\64\x64\x61\x61\70\143\x64\142\146\x36\142\63\x62\x62\142\66\60\145\x63\64\x30\x34\142\64\67\x61\62\x33\62\x32\66\145\143\62\66\66\x62\x31\12\40\x20\x20\x20\x20\x20\x20\x20\x20\40\40\x20\40\x20\40\x20\63\x38\63\67\x66\x66\143\71\x36\x39\145\x39\x63\x32\63\145\x32\142\142\142\141\67\62\146\141\x63\x62\x34\x39\61\141\x36\141\63\x32\67\61\61\71\x33\x61\63\x35\60\x32\66\141\x39\145\x62\143\x39\x33\x36\x39\70\144\x36\70\x39\x62\146\x37\x62\xa\x20\x20\40\x20\40\x20\40\x20\40\40\x20\x20\x20\x20\40\40\x38\x34\146\143\x33\x38\64\x66\65\x34\x34\x63\x63\65\144\x37\x31\x63\x32\71\64\x35\143\70\143\x34\x38\141\145\66\x33\64\70\x63\x37\65\63\x33\62\62\146\x63\x61\x66\67\65\x31\67\x31\x62\x37\x64\x38\146\61\x65\61\67\70\145\x38\65\x34\65\xa\40\40\40\x20\40\x20\x20\x20\x20\x20\40\x20\40\x20\40\x20\63\x64\x35\143\67\x39\x66\x30\x33\142\x61\145\x36\144\x39\67\60\65\143\x61\x62\142\x65\x37\x30\x30\x34\x65\x63\70\x31\145\61\70\70\70\61\62\x61\66\x36\x33\x31\63\x32\71\67\146\143\x66\x35\x64\x34\143\x36\61\141\x34\x38\x36\61\64\x64\x32\xa\x20\40\40\40\40\40\40\x20\40\x20\x20\40\x20\40\x20\40\61\142\65\63\67\71\x66\x61\145\66\x30\67\x33\66\x66\70\70\142\143\67\x33\67\62\65\67\142\143\61\x63\146\142\x65\146\x37\x30\x31\66\61\60\70\144\144\x31\146\63\x61\x35\x33\x37\x61\141\x61\x36\x38\x31\x35\64\64\146\65\142\142\62\60\12\40\x20\40\40\40\40\x20\x20\x20\x20\40\40\x20\x20\40\x20\x63\62\144\63\65\x32\x32\61\62\144\66\x61\x32\145\x34\x36\x30\x33\x31\61\x61\x62\x37\x62\x39\63\142\x36\x31\61\62\x31\70\x62\63\60\x63\x37\x34\x30\62\67\x30\71\x62\146\146\70\71\x65\143\146\x38\x31\x34\x33\x31\60\143\62\144\x62\x39\67\xa\40\40\40\x20\x20\40\x20\x20\40\x20\x20\x20\40\40\x20\40\x38\x31\x66\64\61\64\62\x61\65\x34\144\66\x64\x34\61\146\x38\62\x63\x33\x33\x32\x30\x38\143\61\70\x38\141\x30\62\63\x63\x37\x30\x62\145\146\144\x36\71\67\x62\x34\71\66\145\x66\x62\x37\x63\67\x62\70\x35\66\x39\x34\67\64\x61\x39\144\x35\12\40\40\40\x20\x20\40\x20\x20\x20\40\40\40\x20\40\x20\x20\x30\x32\x35\x61\x38\x65\141\x38\x33\x31\x31\x63\70\63\x31\x62\x33\144\145\62\142\70\61\70\60\x30\x66\x32\70\x35\70\x39\x62\x36\141\x65\x66\65\x33\67\x66\x36\x61\x64\x61\x32\x65\63\144\71\x32\141\61\144\144\144\x33\x39\x63\146\x64\x36\142\x34\12\40\40\x20\40\40\x20\x20\x20\40\40\40\40\40\40\40\x20\70\61\61\63\x63\x38\x62\63\66\x62\145\x38\x39\60\x62\60\71\71\x63\x61\64\145\60\70\66\65\65\x64\142\x30\x65\71\142\x35\x63\x32\61\x31\145\x37\60\66\141\146\60\65\x32\x62\x37\67\66\x39\62\64\62\63\63\x33\x32\x31\x34\x31\x32\143\xa\40\x20\40\x20\x20\40\x20\40\40\40\x20\x20\40\x20\x20\40\142\61\x62\x35\64\60\x66\60\x38\x64\x38\70\141\x63\144\66\x36\64\x63\65\x35\70\x35\x34\142\60\65\x65\x33\x31\x61\61\x35\x64\x34\x62\60\144\x63\71\63\142\64\x35\x31\64\x66\66\62\x61\70\x38\x63\x33\144\x34\141\64\x35\61\146\145\63\x34\xa\x20\40\x20\x20\40\x20\x20\x20\x20\40\x20\x20\x20\x20\x20\40\x37\64\x64\62\x66\142\141\145\145\x37\x34\62\x66\x32\63\x32\71\x35\x39\142\65\x66\66\143\x32\x62\67\x31\141\x38\x62\66\x61\x64\x39\x35\x61\x30\x64\65\63\x36\62\x66\63\71\63\60\71\141\x63\x61\x37\x31\60\x66\63\x37\x61\64\144\141\x65\x32\12\x20\40\40\x20\x20\x20\x20\40\40\40\40\40\40\40\x20\x20\62\62\x38\x65\62\x37\x64\63\x35\x66\x34\x64\x33\146\143\x38\x37\x65\x65\x36\145\143\x65\x34\65\x33\x38\x35\x38\x37\x66\x61\x64\x37\70\63\x35\146\71\x38\x30\63\146\x35\143\141\x36\64\144\x66\x64\x38\65\66\x61\x65\x37\x36\67\141\63\64\x38\62\xa\40\40\40\40\x20\40\40\40\x20\x20\40\x20\x20\40\40\40\143\x32\146\x33\61\x35\x63\x36\71\146\62\x30\x65\x63\x37\141\x65\63\x39\x31\x66\x63\66\x63\62\144\145\x38\65\62\x38\61\144\x35\x34\x63\x39\67\x66\x37\x34\71\70\x31\x62\64\x65\x66\145\x63\x30\146\65\145\x34\x36\60\x36\x37\x36\x35\143\60\x34\12\x20\40\x20\x20\x20\x20\40\x20\40\x20\40\x20\40\x20\x20\x20\60\x66\61\146\64\65\63\70\x36\x62\x65\x64\64\146\x64\142\x39\146\x39\71\x38\x62\x30\x65\x37\x30\62\x37\x63\x37\x34\61\x34\x62\x65\141\x36\66\x37\142\x31\62\60\65\x30\x32\67\143\x35\65\145\x65\144\71\x32\x37\63\66\x34\x34\x34\x36\63\142\xa\40\x20\x20\40\40\40\40\40\x20\x20\40\40\40\40\x20\40\x31\70\x33\x32\x62\x63\x35\63\x33\x38\145\63\x61\x37\x65\61\x30\142\146\62\64\x64\70\145\66\71\x66\x31\x36\67\142\71\64\x35\65\x31\142\66\62\x34\x30\x66\66\65\142\64\x31\x36\x66\145\145\142\144\62\x38\x35\x39\71\63\63\x34\141\141\x34\xa\x20\40\40\40\x20\40\x20\40\40\40\x20\x20\40\x20\40\x20\x64\71\x39\x38\141\65\x39\x39\60\x35\x33\143\x64\64\x37\67\x66\x35\x34\x66\x63\x30\x61\x66\x36\x32\x61\x38\x65\146\67\x35\x65\x62\71\x31\x30\x39\x36\142\61\65\63\67\65\x31\x62\x32\x30\x31\142\70\63\67\64\143\64\x39\65\66\65\x30\70\143\xa\40\x20\40\40\40\40\x20\40\40\x20\x20\x20\40\40\x20\40\66\x63\70\x32\x65\141\x32\x63\x65\x62\x30\62\66\x35\x65\67\64\143\x39\66\x30\x33\62\67\70\67\146\x65\x30\x31\61\63\x39\142\x35\67\70\x63\x33\141\61\64\146\x64\x34\x65\63\62\141\70\65\61\71\65\63\x37\65\x62\62\65\144\x61\66\60\12\x20\x20\x20\40\40\x20\x20\x20\x20\40\40\40\40\40\x20\40\x34\x66\x32\61\x31\x38\67\x65\145\60\x31\x64\146\66\60\x34\62\71\67\x31\x64\67\x63\x32\142\x39\x64\144\70\142\x36\61\x31\x35\62\x37\x33\x37\x37\146\62\x38\x66\71\x33\63\x35\x35\x39\146\66\142\x32\x65\144\x66\x65\67\x62\144\x38\70\71\x36\12\40\40\40\40\x20\x20\x20\40\x20\x20\x20\40\40\x20\x20\x20\60\60\66\62\67\x38\x33\60\142\143\x64\146\146\x63\142\x38\x38\x34\71\70\71\x30\61\63\65\x38\x35\143\143\66\x64\141\x37\x32\x36\143\67\x63\x63\x35\x37\143\66\71\x65\70\x36\66\64\x61\62\64\64\144\62\x33\x34\64\x36\65\146\x32\x61\65\12\40\40\40\40\40\x20\x20\40\40\40\40\x20\40\40\40\40\145\x37\63\x36\65\61\62\x61\x36\65\x65\65\66\x33\141\x32\141\67\x32\66\x39\61\x35\x62\65\60\x32\64\x37\141\146\x66\61\66\65\61\x39\x30\143\x37\x35\x64\61\x35\x31\61\x33\x39\146\62\142\63\61\x32\x31\61\x61\x33\x61\x63\x66\71\64\x65\12\x20\x20\40\x20\40\x20\x20\40\x20\40\x20\x20\x20\40\x20\x20\x32\63\x36\x64\62\x37\x62\x34\x34\61\x66\145\x36\64\145\70\70\141\x34\64\63\67\x37\70\63\x35\x39\x64\65\x37\x62\141\60\x66\145\x64\70\145\144\x62\x62\x30\x31\x63\x63\x36\x30\x61\61\61\x36\146\x39\x35\71\71\x64\x61\x34\x65\64\67\x62\x66\xa\x20\x20\40\40\40\x20\40\40\40\40\40\40\x20\40\40\40\x65\x39\66\70\65\x30\x61\x63\x31\62\x64\61\x31\71\x39\x61\60\x38\60\146\x31\142\65\71\x31\x63\66\x30\145\141\x65\x36\x31\x33\x66\x62\141\x34\64\x34\146\71\146\145\x33\x31\x66\144\64\62\145\x65\63\63\63\66\x37\x38\65\63\62\65\x35\66\12\40\x20\x20\40\x20\40\40\x20\40\40\x20\40\40\40\x20\40\60\x37\x66\142\146\x65\x65\146\60\x32\x63\x64\x62\142\x32\144\x30\141\x38\144\62\63\x32\x39\x61\144\143\x37\x66\142\141\x32\x32\x61\141\64\143\144\61\x32\64\143\x36\145\x36\x36\145\x30\x62\60\141\143\x61\x37\x39\x36\142\141\x36\x61\x65\x62\x36\x39\xa\x20\40\x20\40\x20\40\40\x20\40\x20\x20\x20\40\x20\40\40\146\70\x65\67\66\141\x39\144\x31\141\x61\141\142\145\63\x35\61\142\143\64\62\x66\145\x66\141\x36\60\x35\x34\71\67\x37\x38\x35\x39\142\65\x31\61\x35\x38\142\141\67\x31\64\x33\x39\70\x30\144\67\66\x64\x62\x35\x62\x32\143\143\x36\141\145\x63\12\x20\40\x20\x20\x20\x20\x20\x20\x20\40\40\40\40\40\x20\x20\71\x66\x38\x33\145\141\143\x35\x65\x64\146\67\x39\63\65\x37\x36\x33\62\146\142\66\x30\143\x62\x34\x38\61\x31\x65\67\x31\70\71\x32\x34\x33\x36\x65\x35\x38\62\63\x37\x35\70\x36\60\146\x61\x66\x38\x64\70\x63\x35\x31\70\145\145\63\x33\x63\x61\12\x20\x20\40\x20\x20\x20\x20\40\x20\x20\x20\x20\40\40\x20\x20\x65\x30\x38\x62\x31\x38\141\x66\x37\146\x61\141\62\62\67\144\71\x37\x31\71\x36\144\x37\142\x30\64\x31\x62\143\142\63\x36\x36\61\61\70\67\x35\x31\146\142\x65\x61\141\x39\x32\x64\70\x30\x66\x38\66\x33\x32\x34\143\x65\x38\x37\61\61\143\x66\x64\12\40\40\40\x20\x20\x20\40\x20\40\x20\40\40\40\x20\x20\x20\66\x35\60\x30\x35\x63\x61\x64\60\x63\145\x33\x30\x38\x37\70\146\x35\x30\70\145\142\61\145\141\x32\x37\63\x35\145\62\x31\62\x65\x66\63\x65\x34\62\141\67\x38\64\x36\x37\144\x34\x66\63\61\142\64\70\x33\60\x38\67\143\63\143\66\x33\141\x33\12\x20\x20\40\40\x20\40\x20\x20\40\x20\x20\40\x20\40\x20\x20\62\x66\141\66\x32\146\x32\141\x65\71\x32\145\62\x61\143\144\x66\143\63\143\146\62\61\142\63\64\x31\71\x61\x63\x63\63\64\x37\146\x66\x35\x31\x63\143\x62\x31\67\61\66\x31\x65\x38\62\71\x63\143\x34\x61\x32\64\x39\x36\65\x66\x64\71\63\x30\xa\40\x20\x20\40\x20\x20\40\40\x20\40\x20\40\40\40\x20\40\x62\71\70\x33\144\x36\x33\61\65\63\x62\71\x63\x31\63\144\x64\70\x35\63\64\60\x64\67\61\70\64\142\146\x30\x31\x37\x33\x34\x64\x34\63\65\x37\x63\61\141\x61\142\146\142\x64\143\71\x37\61\61\61\71\x33\x66\x66\x61\71\67\64\x38\x33\x32\12\x20\x20\x20\x20\40\x20\x20\40\40\x20\40\x20\x20\40\x20\40\64\x66\x38\x38\x63\146\70\60\61\x66\63\x35\67\x30\x38\144\x62\60\71\x30\61\x66\x66\x61\141\65\x35\64\61\x35\x63\x61\64\63\63\x34\x36\x37\x38\66\63\x33\144\144\x61\67\66\63\142\x35\x66\x62\x66\142\141\67\143\x66\144\65\x31\144\x63\x35\xa\x20\x20\x20\x20\40\40\x20\40\40\40\x20\40\x20\x20\40\x20\x37\71\61\x34\71\x65\143\x39\62\x38\x34\141\64\144\x62\62\x33\64\x39\x64\142\x63\x35\62\x36\64\144\x35\x66\143\141\x37\141\67\x32\x30\63\x34\x32\66\x31\67\x31\x36\144\71\60\x61\x39\71\x36\x63\x62\x35\67\142\x61\x30\71\x66\x37\x64\60\x37\xa\x20\40\x20\x20\40\40\x20\40\x20\x20\x20\40\x20\40\40\40\x32\x39\x61\x32\x66\x31\x30\143\x63\65\x38\145\x65\143\71\70\x64\x38\x36\x65\x39\x33\x30\x36\x61\x33\x66\142\x66\62\145\x37\61\x31\x30\64\x36\x65\70\x36\x62\x35\x61\x38\x36\x63\143\60\145\x65\144\67\x36\x32\x35\142\x65\61\141\60\61\x65\x62\146", "\60\x38\x61\x64\x33\63\x61\x31\x36\x36\141\x39\x62\x33\x39\142\141\x37\x35\x32\x32\x63\x63\146\x35\64\61\64\61\x32\63\60\66\62\66\x34\x33\65\66\x35\x33\65\x36\61\63\66\63\x37\63\x31\x33\x31\66\x36\x36\66\66\x33\63\x32\63\x37\x36\x33\12\x20\40\x20\x20\x20\40\x20\40\40\x20\40\40\x20\x20\x20\40\x33\x36\63\x36\x33\64\x33\64\x36\x36\x33\x31\63\x37\66\x31\x33\65\x36\x33\x33\x39\x36\65\x36\62\x33\64\63\64\x33\x30\66\64\x36\62\x36\x33\x33\61\x33\x34\x33\x33\x36\x36\63\64\66\64\63\x32\x33\64\63\x30\66\x32\x36\x32\66\x36\x33\64\xa\x20\40\x20\40\x20\x20\40\x20\x20\40\x20\40\x20\x20\40\x20\x33\62\66\64\63\71\63\x36\x33\x30\63\x33\x36\65\x33\65\63\65\x33\64\63\x31\66\x31\x33\x33\63\x38\x36\x35\63\67\61\x37\x37\64\x37\x64\x61\71\x37\x64\144\64\x64\66\x33\145\x32\61\x35\144\143\x38\142\142\71\143\x65\62\63\x31\144\x35\xa\x20\x20\x20\x20\x20\x20\40\x20\x20\x20\40\40\x20\x20\x20\x20\x62\63\x63\143\x39\143\x32\x38\x37\144\146\141\x64\142\61\x62\x35\141\143\143\145\x30\x64\x34\144\141\x32\70\61\66\144\145\x31\x36\x31\x31\64\66\66\x35\x32\x37\61\62\60\x34\61\70\x38\144\71\61\x62\66\x34\x32\143\x64\146\x64\142\64\x39\64\12\40\40\40\x20\40\x20\40\x20\x20\x20\40\40\x20\40\40\x20\66\x36\141\70\x39\143\141\x61\62\71\x61\x39\x31\x33\x39\63\x35\x34\146\x36\x39\x63\x34\143\x31\70\70\x64\x37\x36\x64\x38\70\x64\x33\66\x64\x31\64\x30\60\64\62\x36\70\x66\x33\62\67\143\71\70\146\64\x37\63\66\x62\141\x33\61\x37\62\x38\xa\x20\40\x20\40\x20\40\40\40\x20\40\x20\x20\x20\x20\x20\x20\141\64\x36\144\x38\146\65\60\144\x31\x36\x36\65\x62\143\x66\x31\65\67\145\x33\x31\x36\64\144\x37\65\x36\x32\70\66\x65\143\145\x61\143\x34\x63\145\70\61\x62\141\63\146\x66\144\61\x62\67\x39\x66\x66\x30\x38\x36\x32\x66\x35\146\65\x32\x39\142\xa\40\40\40\x20\40\x20\40\x20\40\x20\x20\x20\40\40\x20\40\144\x34\64\146\x30\145\62\146\x62\143\142\x38\70\x63\x33\x38\x38\x30\71\65\143\142\x38\71\x34\x66\144\x34\x63\145\60\65\x39\142\141\x38\x66\x35\x34\63\66\146\x30\141\61\x35\142\x32\146\x61\x39\x61\x34\60\141\x63\144\66\66\x34\x35\141\144\61\xa\40\x20\40\40\x20\x20\40\x20\40\x20\x20\x20\x20\x20\40\40\143\66\146\x31\66\x33\66\x35\x32\65\x30\x37\61\x35\x63\x62\x30\x35\65\x32\144\x63\146\143\x32\62\x30\x65\70\x34\64\x62\x61\x36\67\145\x32\x61\61\x32\60\x36\142\x31\67\62\65\x61\66\x62\x62\142\x38\x66\x30\x65\70\x37\x62\67\60\x36\x37\146\xa\x20\40\40\40\40\x20\40\40\x20\x20\40\40\x20\x20\x20\x20\142\x35\x31\146\x63\60\62\62\x36\143\x64\71\x36\63\142\x64\144\146\x35\x34\x39\x32\62\x37\x64\x35\145\141\x66\65\146\x39\71\66\60\66\61\x64\x39\143\x33\x62\67\x65\63\63\60\66\142\144\x39\x62\145\61\x31\61\x34\141\x65\x64\x36\61\71\x39\12\x20\x20\x20\40\40\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x36\145\64\x34\145\145\x31\61\x34\64\x62\x65\x62\x66\143\x61\71\141\61\60\66\x34\x64\x34\60\x34\x31\x39\70\63\x37\x65\x35\64\x30\x30\66\146\x35\64\x31\66\x31\x64\x64\60\62\x38\142\x32\67\x30\62\x66\141\x61\65\143\x64\145\x32\x31\x34\143\12\40\x20\x20\40\x20\40\x20\x20\x20\x20\x20\40\x20\40\x20\40\142\143\x31\x31\145\x64\61\x63\x37\x37\144\x34\x30\64\62\142\63\x33\x33\145\x37\x37\x32\64\67\x33\146\x34\x37\66\x34\x66\x63\144\146\x63\141\142\144\x64\x30\x33\x31\x39\x66\x33\63\x64\71\66\x61\144\60\141\x62\71\x30\64\143\x64\62\x36\62\x30\12\x20\40\40\40\x20\40\40\40\40\x20\40\x20\40\40\40\x20\x33\61\x36\70\63\141\146\x63\x34\x63\x39\x36\x64\x63\x32\67\146\x64\x65\60\x35\x37\x30\x61\141\145\x64\x63\x39\62\62\141\65\65\x32\x64\64\x36\x36\70\67\141\x36\60\66\x62\x62\65\67\71\142\66\141\142\x38\60\x35\60\146\64\61\70\146\70\12\40\40\40\x20\40\40\x20\40\40\x20\x20\40\40\40\x20\40\x66\66\x61\63\x66\143\63\63\145\146\65\x65\x65\142\x61\70\x64\x62\146\x35\x34\142\x35\x61\x39\x30\141\61\x30\x33\x34\x66\146\x38\x61\x36\70\x64\x39\145\x61\x36\x39\x31\x64\x39\x61\x31\x64\x36\x62\x38\146\64\61\x33\x37\x36\67\63\65\x62\145\143\12\x20\40\x20\40\x20\40\40\40\40\40\40\40\40\x20\40\40\66\x63\60\x66\65\64\61\x66\x39\x32\x37\x63\x66\x31\60\67\x66\x32\x31\x38\x34\146\71\x36\62\x33\x35\x61\66\x66\x63\x61\x36\144\61\x64\142\60\x31\63\71\x36\66\x64\70\65\x32\x37\x33\x38\71\146\x38\x61\67\71\x66\64\141\x66\144\67\142\x62\12\x20\x20\40\40\40\40\40\40\x20\x20\x20\x20\x20\40\x20\x20\x32\x39\67\143\70\x35\144\65\x36\146\67\64\146\x61\x61\x61\60\x36\x39\x36\x37\71\x65\x64\x63\67\x38\x62\x31\66\x62\61\67\141\142\x38\144\x37\62\144\145\63\x37\70\70\x66\62\141\143\62\x66\x65\x38\141\x32\145\x31\x35\144\x64\146\142\63\x66\12\x20\x20\40\40\x20\x20\40\40\40\40\40\40\40\40\40\40\61\64\146\x66\x64\x39\145\x66\x31\70\x63\71\65\141\143\146\63\x34\x30\x66\67\60\62\141\71\67\x34\142\65\70\x30\143\x61\x63\71\x33\x39\x32\x38\64\61\67\x36\65\x30\x62\x38\x66\71\x65\67\x34\60\71\66\x31\x39\67\67\x34\x65\64\70\x33\12\40\40\x20\40\x20\40\40\40\40\x20\x20\x20\x20\x20\40\40\x61\146\x36\66\x62\x31\70\x65\x63\67\65\64\x37\x66\x37\64\x34\x30\x39\71\x65\x32\142\x62\64\x31\62\65\x39\x30\65\145\65\144\144\x35\x35\x33\142\x65\143\141\71\x30\144\x30\x33\146\x61\x37\x64\67\x62\x62\x61\62\x30\x31\141\142\71\x37\x61\x63\12\x20\40\40\40\x20\x20\40\x20\x20\40\x20\x20\40\40\40\40\71\x32\x35\60\66\143\x33\60\65\146\x66\x37\71\141\x66\x65\71\x63\71\x39\x61\x37\63\143\x62\62\x30\x62\x39\60\64\x38\x34\x36\x34\x62\x65\145\x62\x31\60\60\x64\x66\60\145\143\x66\x62\x34\60\x31\66\x31\146\x39\65\x64\x64\70\x37\60\70\141\xa\x20\40\40\x20\x20\x20\x20\x20\40\40\40\x20\x20\40\x20\x20\x36\146\x64\60\71\145\x31\142\61\66\x36\x66\61\145\x32\67\x34\62\x39\142\x31\x63\x61\65\x30\146\x39\x39\60\x61\x34\x35\64\62\65\x64\145\x63\x32\65\x62\62\141\62\71\x64\143\144\145\x34\146\144\x31\143\x32\x33\142\x30\144\66\x36\60\x62\x61\12\x20\40\40\40\x20\x20\x20\x20\40\x20\40\x20\x20\40\x20\x20\x31\60\x32\64\x31\142\x63\x32\x30\143\144\143\65\71\x63\x33\66\x30\71\141\x37\x64\x36\142\x30\x39\64\x35\x33\x38\144\x35\x36\x62\70\67\x38\143\x36\62\144\143\141\x33\141\x35\64\x66\x62\143\x35\x33\x64\70\x31\x35\141\x65\60\65\x34\x39\x66\66\xa\x20\x20\x20\x20\40\x20\40\x20\40\x20\x20\40\40\40\40\x20\71\x37\x38\145\141\x33\67\x61\x36\x34\x34\141\144\144\x32\142\x64\62\67\x32\x30\142\63\x37\x61\x33\65\x30\x32\x64\66\x38\x33\142\x30\141\70\x62\71\x63\145\x32\x36\x39\142\142\x33\144\x62\70\x61\64\64\x66\x33\x65\x38\143\x33\142\141\x35\60\x37\12\40\40\x20\40\40\40\x20\x20\x20\40\40\40\40\x20\40\40\67\x37\x35\x39\144\145\x31\67\x31\x65\61\144\60\64\x30\144\x66\145\65\143\71\x61\x36\x31\x30\x65\x32\x31\x65\63\x62\64\x31\144\x39\x35\64\x30\63\x36\x35\64\x31\x32\62\145\x64\67\142\67\x35\61\61\x31\x36\x32\x32\146\x31\x34\142\142\x35\x30\xa\40\x20\x20\40\x20\40\x20\x20\x20\x20\x20\x20\40\x20\40\x20\146\144\67\x61\x33\145\66\63\67\x62\x62\141\x37\x33\x66\x63\70\143\64\x65\x32\x32\x37\x30\62\142\x35\62\x33\62\x39\143\x32\62\x34\70\x36\60\141\71\x65\x30\x34\142\63\x38\x62\70\143\x32\x33\x35\x32\x37\143\67\63\x32\x61\x32\x38\x31\x64\x63\xa\40\40\40\40\x20\40\x20\40\x20\x20\40\40\40\x20\x20\40\x66\71\x32\x31\x30\63\144\67\61\144\x65\x63\146\x36\67\63\142\63\146\141\70\x33\x66\145\141\142\62\143\61\x39\x33\x37\x38\61\x31\145\60\x62\64\61\61\x36\x33\60\61\x39\145\61\x62\x34\x35\145\x36\x36\64\144\64\141\x63\x63\x35\67\x30\143\12\x20\40\x20\40\x20\40\40\40\40\40\x20\x20\40\40\x20\x20\x32\144\x34\x62\62\x34\x64\x63\61\63\x38\x32\70\x35\64\x37\x38\143\x33\x38\71\x38\x62\x30\x35\66\x37\143\60\x32\66\141\61\66\65\x31\x62\x62\x61\x64\x61\60\146\x62\x36\x32\x61\x62\65\x63\145\x30\144\x39\x36\x65\x33\x36\x30\x31\141\145\143\61\12\40\x20\x20\40\40\x20\x20\40\40\40\x20\40\40\40\x20\x20\x63\x36\146\x30\64\x65\143\142\x31\142\x35\x33\x66\x31\x64\x38\65\62\x38\71\x33\x65\x64\142\x39\x37\x31\67\60\x33\144\143\x64\x39\x31\71\143\62\x64\144\x38\70\x33\x64\x30\70\65\x31\145\62\146\143\x34\x39\x31\143\x66\x39\141\142\146\61\x62\67\xa\40\40\40\40\x20\40\40\40\x20\40\40\40\40\40\x20\x20\x63\61\x36\x35\62\142\141\x63\x37\63\141\x35\141\x39\x65\71\142\x64\142\146\61\66\64\x64\142\x39\64\70\143\143\65\142\x38\x32\x39\71\146\x64\67\x66\65\65\x33\65\146\x61\x39\62\67\61\63\60\144\x63\64\x65\x31\x38\63\145\x66\x33\x35\x65\xa\x20\x20\40\40\x20\x20\x20\40\40\x20\x20\x20\40\x20\x20\40\142\142\60\70\x37\62\63\x36\x32\65\x65\64\143\146\66\62\x66\x32\65\63\x31\61\x31\145\x36\146\60\61\66\x65\66\x63\x66\142\141\x32\x65\71\143\145\x63\63\x30\145\x32\67\x33\145\x34\142\x32\144\x63\145\146\141\x38\60\144\61\x63\x35\x32\x38\xa\x20\40\x20\40\40\x20\40\40\40\40\40\x20\x20\40\40\40\70\x32\x63\71\x31\66\x30\x39\141\x63\x66\x35\x39\70\71\145\x65\143\61\70\x61\x66\142\x65\x66\x63\x32\65\143\70\x39\70\x37\66\63\x63\65\x30\144\x32\x61\65\143\x63\x35\x34\x32\x35\60\x64\x32\66\x37\62\x61\x33\71\67\x35\70\x66\71\64\70\xa\40\40\x20\40\x20\x20\x20\40\x20\40\x20\x20\x20\40\40\40\61\70\66\66\143\x32\x36\144\x32\66\x30\x62\x66\67\67\64\144\142\x30\x35\x32\70\60\66\x39\67\144\62\142\61\x61\x39\x35\142\x30\x34\70\x31\x61\x66\x61\x32\x62\x38\60\x62\142\62\x30\x35\x31\x38\x36\x61\143\x32\x39\60\x62\143\63\x37\x37\60\xa\x20\x20\x20\x20\x20\40\40\x20\x20\x20\x20\40\40\x20\x20\x20\142\61\x39\141\66\65\x32\144\143\62\146\65\x64\x36\x36\x31\x31\63\x36\63\143\144\70\x35\61\144\x39\62\x31\145\144\141\x64\63\x36\70\x35\61\x64\66\64\146\64\143\141\143\x36\146\x66\x36\x37\x32\x39\71\64\65\65\x65\x31\62\60\143\145\x65\12\x20\40\x20\40\40\x20\x20\x20\40\x20\40\40\40\40\x20\x20\x36\x35\141\60\x64\71\x34\x37\61\144\x31\x63\71\65\x32\144\67\145\x38\61\x62\141\65\145\x36\x37\145\x30\x61\x38\x61\x34\61\x61\71\141\66\70\146\65\x30\144\70\x38\x61\62\142\x36\x32\x31\65\61\142\x35\x36\64\146\146\143\62\145\64\63\x35\12\x20\40\x20\40\x20\40\x20\x20\x20\x20\40\x20\x20\x20\40\x20\x38\x33\67\x33\x65\65\65\144\146\x36\x63\x61\x64\63\x33\67\65\70\71\x61\70\71\60\x35\x34\143\60\x35\x30\146\x39\x33\x62\64\x62\62\65\x32\x61\141\x36\x35\64\66\66\x30\62\x39\x33\61\x33\142\x66\x37\x33\x31\61\141\145\67\63\x35\x61\65\xa\x20\x20\x20\x20\40\x20\40\x20\40\x20\40\40\x20\x20\40\40\x32\66\x63\144\x32\x62\141\143\64\61\x61\146\x38\64\66\x63\x30\66\71\145\144\x36\61\x34\64\x38\65\143\x66\x36\62\x62\144\66\x36\143\71\x33\71\x64\x66\x65\x62\x32\x37\x65\143\141\141\141\x31\x39\x37\x61\x61\x33\x34\64\141\65\x34\x38\x38\142\xa\x20\40\x20\40\40\40\x20\x20\x20\40\x20\40\40\40\40\40\142\x33\141\x32\144\x63\141\70\70\64\143\x37\146\144\x63\x34\x61\x63\x30\70\x38\61\x36\x62\x32\x62\65\142\x61\x33\x62\x37\x34\61\64\146\x37\x66\x66\67\141\x30\66\141\x33\x61\66\146\x65\x37\65\x65\62\60\x63\x39\x65\x62\x39\x37\x61\70\70\61\xa\40\x20\x20\x20\40\40\x20\40\40\40\40\x20\40\40\x20\x20\x61\x63\61\x33\x30\x36\x31\66\x66\61\x37\66\x64\x31\x66\x32\66\x61\145\62\x34\142\146\x34\63\x39\x32\x65\x30\141\60\x65")); $openssl = array(array("\x36\x37\x61\x65\x37\63\67\x30\145\x34\141\x31\64\64\65\x32\x33\65\64\x33\x66\x31\145\x33\145\144\146\63\x35\x62\62\66", "\63\60", "\x37\x30\x36\x65\61\x36\67\60\145\x63\66\142\145\x62\x39\x31\x63\65\x36\x35\62\71\x39\67\61\x30\145\x34\x66\x34\x33\62\63\61\63\x33\66\65\63\60\63\62\x33\x38\x33\70\63\61\63\x34\63\x35\66\65\63\x39\x33\63\x36\x32\63\65\x33\x39\xa\40\40\x20\x20\x20\x20\40\40\40\x20\x20\x20\40\x20\40\x20\63\x32\63\70\63\61\63\66\x33\71\x36\62\63\60\x36\66\x33\62\63\65\x33\60\x36\x34\66\66\x33\x30\x36\x35\63\x32\63\66\63\61\63\x38\x33\62\63\63\63\63\x36\x31\63\64\x36\66\66\64\66\x32\x33\x31\63\x32\x33\71\x33\64\63\x36\xa\x20\x20\40\x20\x20\40\x20\x20\40\x20\x20\40\x20\40\40\40\x33\x34\63\x32\x36\61\x33\61\66\66\63\71\x36\x34\66\63\66\x36\63\64\x33\x36\66\x36\66\x35\63\x30\66\64\x33\71\145\x36\x31\64\62\x62\146\63\x64\60\x65\x36\141\x35\x39\x35\x32\x32\63\x31\144\x38\142\146\x61\x62\142\x61\x63\x64\x38\63\xa\x20\40\40\40\40\40\40\40\x20\x20\x20\40\x20\40\40\x20\x66\x66\60\x34\x63\x36\61\x34\x30\x30\x35\x32\x39\x33\x38\x35\144\66\x33\141\64\142\x38\x66\70\x36\71\x36\71\x38\62\144"), array("\65\144\64\142\141\145\x36\x32\142\x65\x61\x33\143\x38\x66\x34\x63\x34\71\x64\x64\x31\141\x33\70\141\64\145\61\x62\x32\141", "\63\60\63\x31\x33\x32\63\63\63\x34\63\x35\63\66\63\x37\63\70\x33\71", "\64\143\x39\141\63\x34\x65\x31\71\67\x37\144\x64\66\x35\x36\146\x64\x33\x65\x31\x38\144\x34\x62\x63\62\x62\x30\x30\x63\x37\66\x32\63\x35\x33\70\x33\x30\63\62\x36\62\66\x32\63\x37\x33\x31\63\x35\x33\71\x36\65\63\60\x36\64\63\62\x33\65\12\40\40\x20\x20\40\x20\x20\x20\40\40\40\x20\x20\x20\x20\x20\x33\x33\x33\62\x36\x34\63\x39\x33\67\x36\65\63\66\63\62\63\65\x33\63\x33\61\x36\x32\66\x35\63\x32\63\67\x33\x33\x33\x36\66\65\x33\x37\66\61\66\64\x33\x38\x36\66\x36\64\x36\62\63\x33\63\x33\x36\63\66\x35\x33\x32\x33\62\x33\63\12\x20\40\40\40\40\x20\x20\x20\40\x20\40\40\x20\x20\40\40\63\x30\66\63\63\61\x33\x38\66\x36\x33\x30\63\x34\x33\61\63\x36\66\65\x36\x35\63\60\x33\70\63\60\x36\x31\x36\x31\x65\142\x37\x37\141\143\x39\x38\x33\64\x34\x61\60\x62\x66\71\x34\x36\x66\71\x38\x65\x38\x39\62\x65\66\145\61\x35\144\142\12\40\40\40\40\x20\40\x20\40\40\40\40\40\40\x20\40\x20\142\x39\x65\62\x32\61\x61\x37\143\x32\65\x31\63\x35\141\63\x36\x35\66\x32\x63\63\145\143\142\x32\x39\x38\61\146\x63\x64"), array("\x36\70\x33\62\70\65\61\x61\x66\63\143\x36\x33\141\x31\x65\63\60\x33\x62\144\x66\61\142\143\141\x33\70\x64\x64\71\143", "\x33\x30\63\x31\63\x32\63\x33\63\x34\63\x35\x33\x36\63\x37\63\70\63\71\x36\x31\x36\62\66\63\66\x34\x36\65", "\144\60\x39\x64\x32\x66\x61\x61\x31\66\x33\145\67\x37\x34\141\x62\144\x30\x32\60\x62\146\x38\x63\x64\66\62\x33\x66\70\x39\x36\62\x36\64\66\x32\x33\x33\x33\x31\63\63\63\60\x36\62\66\61\x33\x33\66\61\63\x39\x36\64\x33\x35\x33\x38\63\64\xa\x20\40\40\x20\40\40\x20\40\40\x20\40\40\x20\40\40\40\x33\x34\x33\66\x36\x36\63\x36\63\61\x33\70\x33\x31\x33\x39\x36\x35\63\64\63\70\63\x32\x36\x35\66\x33\66\x32\x33\x35\63\67\63\67\63\70\x33\x30\x36\x36\63\71\x36\62\x33\x30\x33\65\x33\61\63\66\66\x31\63\60\x33\70\x33\x31\x33\x30\xa\40\x20\x20\40\x20\40\x20\x20\x20\x20\40\x20\x20\40\x20\40\63\63\63\x33\63\60\63\x35\63\x31\x36\x31\63\x33\63\67\x33\x38\66\65\x33\64\x36\62\x36\x31\63\x36\66\63\66\x34\x31\x35\144\142\67\141\66\70\70\65\x62\66\x37\146\x36\x39\x64\71\x39\67\x34\x66\x35\x38\67\x39\141\145\67\x34\x39\67\xa\40\40\x20\40\x20\x20\40\40\x20\x20\40\40\x20\x20\x20\40\60\70\x38\61\x31\146\x63\60\x33\66\65\x30\x38\146\x32\63\146\65\x35\146\x33\x66\x39\x64\x31\x36\x62\x39\146\x66\71\144"), array("\145\x38\x61\71\x37\x39\x39\x66\64\x32\x35\x34\142\x32\x36\64\x38\64\x65\x61\x34\x34\x37\71\61\70\x64\x63\x61\x61\144\64", "\63\x30\x33\61\x33\62\x33\x33\63\64\x33\65\x33\66\x33\x37\63\x38\63\x39\x36\61\66\62\x36\x33\66\64\x36\x35\66\66", "\x31\141\x37\66\x61\60\65\x61\146\65\x37\62\141\142\x65\71\x62\x34\145\67\x61\x36\67\144\x37\x66\x36\64\x62\141\146\x66\63\x39\x36\x36\66\66\x33\66\63\66\63\x33\63\x32\x33\x32\x33\x31\63\63\x33\67\63\x30\63\64\63\70\x36\x35\x33\x31\xa\x20\x20\40\40\40\x20\x20\x20\x20\40\40\x20\x20\x20\40\x20\63\67\x36\x31\63\65\x33\x32\63\x36\63\x33\x33\62\x36\x33\x36\64\x33\x39\66\x35\63\61\x33\61\63\x39\x33\x30\63\x36\x36\x36\x36\63\x36\65\63\65\63\x34\63\x38\x36\62\x33\66\x33\67\x33\67\63\63\x33\60\63\62\x33\x32\63\x33\x33\61\12\x20\x20\x20\40\x20\x20\x20\x20\40\40\40\40\40\40\40\40\63\61\63\x31\x33\x36\x33\x36\66\65\66\x32\x33\x33\66\x35\63\65\66\66\x33\x30\x33\63\63\61\66\x32\x33\61\63\60\x33\x38\x31\61\65\x34\62\x37\x38\x33\146\x31\63\x37\71\x38\142\61\67\144\x34\60\x61\x61\67\145\143\71\x62\64\70\71\12\40\40\40\x20\x20\x20\x20\x20\40\x20\40\x20\x20\x20\40\40\x33\x34\x34\60\x34\x61\142\65\60\67\70\64\x61\x64\61\67\62\62\x66\65\x66\64\144\64\64\x36\62\x66\67\60\62\144\63\x61\x36\62\65\x65\146\x37\61\62\66\x33\x35\142\x32\67\x34\x61\71\67\x30\x61\x34\67\142\x35\x31\x36\142\x31\x33\67"), array("\62\x37\143\x62\146\x35\141\67\x63\x34\x33\62\67\x35\x38\62\x33\71\63\x62\x32\x65\x63\62\67\67\x63\146\x65\71\65\x37", "\63\x30\x33\x31\63\62\63\x33\x33\64\x33\65\x33\66\x33\67\x33\70\63\71\x36\x31\x36\x32\66\63\66\64\x36\x35\66\x36\x33\x30", "\x36\60\145\x32\145\x31\64\142\x34\60\64\143\x35\x62\x64\65\65\x62\x31\x39\x32\x65\146\x32\x66\x31\143\67\x31\x33\x31\143\63\62\x33\65\66\62\x36\x31\66\63\66\63\x36\61\x33\61\x33\x31\63\61\63\x33\x36\62\66\x35\x33\x32\x33\65\63\64\12\x20\40\40\40\40\x20\40\x20\40\40\40\40\x20\40\x20\40\x33\64\63\x39\x36\x32\63\x30\63\x33\x33\64\x36\63\63\67\63\x34\x36\61\63\x33\63\64\x36\x32\63\71\x33\66\x33\x33\63\x37\x36\63\x33\x37\63\x36\x36\x36\x33\x38\x33\x31\x33\x34\63\x36\x33\x32\66\62\x36\66\63\x38\63\60\63\x30\x33\70\12\40\x20\40\40\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\x20\x20\x36\x34\66\x35\x33\x33\x36\x31\63\71\66\x33\x36\x36\x33\x35\x36\61\x36\x35\x36\x33\x33\60\66\61\66\x36\66\x35\x33\70\x64\x32\x31\x33\67\142\x32\144\x65\x66\x63\141\x33\x38\63\x36\66\x38\70\x32\67\x62\66\x39\x38\x33\146\x38\66\x32\65\64\xa\40\x20\x20\40\40\40\x20\x20\x20\x20\x20\40\x20\40\x20\x20\142\x64\70\64\71\x63\63\145\x38\x63\71\x61\x34\x34\142\x36\145\61\145\x64\62\x30\63\x34\71\61\x64\67\63\142\64\x63\142\60\x63\x62\70\63\x36\65\70\x32\x34\60\141\x38\x39\x62\141\141\x39\62\66\x31\x37\65\65\144\x37\60\x37\70\x37\71"), array("\x37\x62\61\65\67\142\145\142\60\x38\x65\70\x61\70\x61\143\67\x64\x37\x34\x66\x37\x38\x39\143\143\142\141\143\x61\145\65", "\x34\145\61\66\x31\141\61\144\146\66", "\x61\x31\67\x63\x61\x33\64\x36\x63\x34\141\x38\70\64\60\64\x62\70\x61\63\x34\x35\x62\x31\x64\x30\67\x35\61\x37\x33\x61\x36\x36\x33\65\66\61\x33\67\x33\62\x36\x33\x33\x35\x33\x34\63\61\x33\x37\x33\71\63\x31\63\66\x33\65\63\x37\66\62\12\x20\x20\40\x20\x20\40\x20\x20\40\x20\x20\40\x20\40\40\40\x33\x39\x33\60\66\63\66\65\x33\65\x36\x33\x36\x34\x36\66\63\x33\x36\65\63\64\63\61\66\64\63\70\x33\x37\66\64\63\67\x33\67\66\x36\x33\x39\63\x36\66\x35\x33\65\x36\x36\66\66\63\x36\63\61\x33\62\x33\65\66\x35\x33\x32\66\x32\xa\x20\40\x20\x20\x20\x20\x20\40\40\40\40\x20\x20\40\40\x20\63\x38\63\x39\x33\64\x36\x34\x36\x36\x33\61\63\x34\x33\61\63\64\63\60\x33\63\x33\66\x33\63\63\64\63\62\x33\62\x62\63\x31\71\143\x65\x36\x38\70\66\x37\x36\146\144\145\60\x33\x64\60\x39\x32\144\67\63\144\146\67\65\x37\60\65\146\12\40\x20\x20\x20\40\40\x20\40\x20\x20\40\40\40\40\x20\40\142\x64\145\65\71\64\x64\x39\x62\62\x62\x66\145\64\x31\65\70\x30\x61\64\x35\70\x35\65\65\x39\70\x32\x64\143\x37\60"), array("\70\70\x37\60\x34\x64\x66\x35\142\64\70\70\x31\144\62\x32\x34\66\63\x38\70\x64\143\67\x63\66\70\60\x36\66\x63\x63", "\x35\x38\66\62\64\x34\x37\60\67\x34\66\x33\64\71\65\x32\63\65\67\67\66\61\x37\66\64\62\65\x33\x37\63\x33\144", "\x39\x30\66\71\146\x62\144\144\64\67\145\145\70\x31\x66\141\146\x33\64\x65\146\146\64\60\x66\70\146\145\x65\x39\64\63\63\63\63\71\63\60\63\x37\63\x33\x33\71\63\66\63\x33\63\x34\x33\x39\66\x35\x33\65\63\x37\66\63\x36\61\x33\62\xa\x20\40\40\40\x20\x20\x20\x20\40\x20\x20\x20\40\x20\x20\40\x36\65\x36\61\66\61\63\x38\66\x33\x33\x33\x36\61\66\x35\63\x33\x33\x33\63\x36\x33\x32\63\x35\66\62\63\65\x33\61\66\x31\66\x33\66\x33\x33\60\63\66\66\x34\x33\x38\66\63\x33\x32\66\x34\x33\x37\66\64\x36\x31\66\62\66\x35\x36\63\xa\40\x20\40\x20\x20\x20\x20\x20\40\40\x20\40\40\40\40\x20\x33\x38\x33\66\x33\66\x33\x34\x36\x32\x36\x34\x36\65\x33\66\63\x32\63\x32\x36\x31\x33\63\x33\60\63\x34\x36\x34\63\60\67\60\145\64\142\60\141\63\x64\x31\71\x36\146\x33\x36\x61\64\141\x66\x62\x39\x32\x61\67\x61\x65\x34\145\146\x37\142\x38\12\40\x20\x20\x20\40\40\40\x20\x20\x20\40\40\40\40\x20\x20\x65\142\x34\64\x65\71\x64\x62\x32\71\x36\x33\x38\146\141\x33\62\61\64\x30\x65\x33\67\x39\141\145\x37\x61\x61\x36\x62\67\x65\x36\70\146\x34\x35\64\x36\x33\65\141\x64\145\x31\x33\x37\x31\x36\x35\63\70\63\x66\x64\63\141\x35\x63\60\x34\71\x62"), array("\61\x64\x32\60\63\x66\x62\x61\61\x63\x64\62\141\67\142\71\62\141\x62\x62\70\146\64\60\145\142\71\x38\65\65\x33\70", "\70\62\x63\62\146\63\61\x35\143\x36\71\x66\62\60\145\143\x37\x61\145\x33\x39\x31\x66\143\66\143\x32\144\x65\70\x35\x32\70\x31\x64\x35\64\x63\71\67\x66\x37\x34\x39\70\x31\142\64\x65\x66\x65\x63\60\146\x35\x65\x34\66\60\x36\67\x36\65\x63\12\40\x20\40\40\40\40\x20\40\40\x20\x20\40\x20\x20\x20\x20\60\64\x30\x66\61\146\x34\x35\x33\70\66\x62\145\144\x34\x66\x64\x62\71\x66\71\x39\70\142\60\145\67\x30\62\x37\x63\x37\64\61\x34\142\x65\x61\66\66\67\x62\61\x32\60\x35\60\62\67\143\65\65\x65\x65\144\71\62\67\63\x36\64\x34\64\x36\xa\40\40\x20\40\x20\40\40\40\x20\40\x20\40\40\40\40\40\x33\142\61\x38\x33\x32\x62\x63\x35\63\63\x38\145\x33\141\x37\x65\61\x30\x62\x66\62\64\144\x38\x65\x36\71\x66\61\x36\x37\142\71\64\x35\x35\x31\142\66\x32\x34\x30\x66\66\65\x62\64\61\66\146\x65\x65\x62\144\62\70\65\x39\71\63\63\x34\141\12\40\x20\40\40\x20\x20\40\40\x20\40\40\40\x20\x20\x20\x20\141\x34", "\146\141\x64\145\65\x64\70\64\61\141\141\x31\x30\141\62\x39\141\62\x65\146\x35\62\x33\66\x33\67\61\146\x66\x63\x32\x39\x36\x34\63\x34\63\61\x36\65\63\70\x33\x36\66\64\x36\x33\x36\x32\66\64\x33\x39\x33\x36\x36\x36\63\70\63\63\66\x34\xa\40\x20\x20\x20\x20\x20\x20\x20\40\40\x20\40\x20\40\40\x20\66\x31\x36\x35\66\64\66\61\x33\71\63\61\66\64\x33\70\66\x36\x36\65\x33\x31\66\x33\63\x32\63\60\x33\x30\x36\65\63\x37\x33\x34\x33\63\66\64\63\63\66\x31\66\x36\66\x36\x36\64\x36\63\x36\65\66\64\x36\66\63\60\66\x35\x36\x34\xa\40\x20\x20\40\40\x20\x20\40\40\40\40\40\x20\x20\x20\40\66\63\x33\62\66\x32\x33\71\66\65\x33\71\x33\x38\x33\x30\63\x33\x33\62\x36\65\x36\64\66\x34\x33\64\66\64\66\x33\x31\63\x36\142\x64\66\144\144\x30\x62\x37\65\63\60\x34\71\60\142\x39\x31\60\62\x34\x65\x64\71\64\64\x62\143\63\x65\12\x20\x20\40\40\x20\40\40\40\40\40\40\x20\x20\x20\40\40\x33\x66\x63\64\60\x35\60\144\x32\x30\143\x65\x30\65\x61\x39\145\144\x39\x39\62\x65\144\145\67\x35\x66\x36\x32\x62\144\x64\62\65\62\63\x64\x30\x63\x62\143\x39\63\x34\71\63\142\x61\x66\60\x37\x65\146\71\70\x63\x38\x39\x35\141\x33\x35\x33\x62\12\x20\x20\x20\40\40\40\x20\40\x20\40\x20\x20\40\x20\40\40\x35\x62\141\x61\146\x32\66\62\x30\60\65\67\x32\x61\141\x32\145\x35\142\144\x32\62\x35\60\x38\x64\142\x32\62\x37\65\65\x36\143\65\145\145\71\x65\142\67\x34\62\65\64\61\x38\145\x39\x38\65\x32\x63\65\71\x35\145\x36\141\143\x30\145\x36\61\xa\x20\x20\40\40\x20\40\x20\x20\x20\40\x20\40\40\x20\x20\x20\63\67\x63\61\x38\x36\x65\60\64\141\x33\146\x31\71\144\70\x35\65\144\70\143\64\142\x38\141\x38\x65\66\x61\x64\61\142\x65\61\67\71\145\x61\65\x63\70\61\66\146\x65\64\66\x31\141\x34\143\145\x63\x32\61\x32\x32\71\67\x38\x37\63\x63\x38\12\x20\x20\x20\x20\40\40\40\40\x20\x20\40\x20\40\x20\x20\40\x35\146\71\66\x65\x65\65\143\x30\62\x34\x63\144\x38\70\x64\x31\x63\x33\x32\x39\x37\x35\146\144\71\65\x61\x63\144\67\63"), array("\x31\146\71\63\67\61\x39\144\67\141\x36\x36\x61\67\x32\64\143\63\70\64\61\70\63\65\146\x62\x63\142\x33\63\146\144", "\x62\x61\x64\145\143\x30\143\67\x64\71\143\141\x37\x33\x34\145\x31\66\x31\x61\61\x64\x66\x36\143\x61\x34\x64\141\141\70\143\x64\142\146\66\x62\63\142\x62\142\66\x30\x65\x63\x34\60\64\142\x34\67\141\62\63\62\62\66\145\x63\62\66\x36\142\61\xa\x20\40\40\x20\40\x20\x20\40\40\40\40\x20\40\40\40\x20\x33\70\63\x37\146\146\x63\71\66\71\145\71\143\62\x33\x65\x32\x62\x62\x62\x61\67\x32\x66\x61\x63\x62\x34\71\x31\141\66\x61\x33\x32\x37\61\x31\71\63\x61\x33\x35\60\x32\66\141\x39\145\x62\143\71\x33\66\71\x38\144\66\x38\x39\x62\146\67\142\12\40\x20\40\x20\40\x20\x20\x20\x20\40\40\40\40\x20\x20\x20\x38\64\x66\x63\63\70\x34\x66\65\x34\x34\143\143\65\144\67\x31\143\62\x39\x34\65\x63\70\x63\64\x38\x61\145\66\x33\x34\x38\143\x37\65\x33\63\62\x32\146\143\141\x66\67\65\x31\x37\61\x62\67\144\70\146\x31\x65\61\x37\70\145\x38\x35\64\65\xa\40\40\40\40\x20\40\40\x20\40\x20\x20\x20\x20\40\40\x20\63\x64\65\143\67\71\146\60\x33\x62\x61\x65\x36\144\71\67\60\x35\x63\141\x62\x62\x65\x37\x30\60\64\x65\x63\70\61\x65\61\x38\70\x38\61\x32\141\x36\66\x33\61\x33\62\x39\67\x66\x63\146\x35\x64\64\x63\x36\61\x61\64\x38\x36\x31\x34\x64\x32\12\40\x20\x20\40\x20\40\40\x20\x20\x20\x20\x20\x20\x20\x20\x20\61\x62\65\63\x37\71\x66\141\145\x36\60\67\63\66\x66\70\x38\x62\143\x37\63\x37\62\x35\x37\x62\143\61\143\x66\142\145\x66\x37\60\61\66\x31\60\70\x64\x64\x31\x66\x33\x61\x35\x33\x37\x61\141\x61\66\x38\61\65\x34\x34\146\65\142\x62\x32\60\xa\x20\x20\40\40\40\x20\40\40\x20\40\40\x20\40\x20\x20\40\143\x32\x64\63\65\62\62\61\x32\x64\66\x61\x32\x65\64\x36\x30\63\61\61\141\142\67\x62\x39\x33\x62\66\x31\61\62\61\70\x62\x33\60\143\x37\64\x30\62\x37\x30\71\x62\146\146\70\71\x65\x63\x66\x38\61\x34\x33\x31\x30\143\x32\x64\142\71\x37\xa\40\40\x20\40\40\x20\40\40\40\40\40\40\x20\x20\40\x20\70\x31\146\x34\x31\x34\x32\x61\65\64\x64\x36\x64\64\61\x66\x38\62\143\x33\x33\62\x30\70\143\x31\x38\x38\x61\x30\x32\x33\143\x37\x30\x62\145\146\x64\66\71\67\142\64\x39\66\145\x66\x62\x37\143\x37\142\70\x35\66\71\64\x37\64\141\x39\x64\65\12\x20\40\x20\x20\x20\x20\x20\x20\x20\40\x20\40\x20\x20\40\40\60\62\x35\141\70\x65\141\70\63\61\x31\x63\x38\63\61\x62\x33\x64\x65\x32\x62\70\x31\x38\x30\60\146\x32\x38\65\x38\71\x62\66\141\x65\146\x35\63\67\x66\66\x61\144\141\62\145\x33\x64\x39\x32\141\61\x64\x64\144\x33\x39\x63\x66\144\66\142\64\12\x20\x20\40\40\x20\40\x20\x20\x20\40\40\40\40\40\x20\40\70\x31\61\63\143\70\x62\63\x36\x62\x65\x38\71\x30\142\x30\x39\x39\143\x61\64\x65\60\70\x36\x35\65\144\x62\60\145\71\142\65\x63\x32\61\x31\145\67\x30\66\141\x66\x30\x35\x32\142\67\67\66\x39\x32\x34\x32\x33\x33\x33\62\61\x34\61\x32\143\12\x20\40\x20\40\40\x20\x20\40\x20\40\x20\40\40\x20\x20\40\x62\61\142\65\x34\x30\x66\x30\x38\144\70\70\141\143\x64\66\x36\64\143\x35\x35\x38\x35\64\142\x30\65\x65\63\61\x61\x31\x35\x64\64\142\60\x64\143\71\63\x62\x34\x35\61\x34\x66\66\62\x61\70\70\143\63\144\64\x61\x34\65\x31\146\x65\x33\x34\12\x20\40\40\x20\x20\x20\40\x20\40\40\x20\40\40\40\40\40\x37\x34\x64\x32\x66\142\141\145\145\67\x34\x32\146\62\x33\x32\x39\65\x39\142\x35\146\x36\143\62\142\67\x31\141\70\x62\x36\141\144\x39\65\x61\60\x64\x35\63\x36\62\x66\x33\x39\63\x30\x39\141\x63\x61\x37\61\x30\146\x33\x37\141\x34\144\x61\145\62\xa\40\40\40\x20\x20\40\40\x20\x20\x20\x20\40\40\x20\x20\x20\x32\x32\x38\x65\x32\x37\144\x33\65\146\x34\144\63\x66\x63\x38\x37\145\x65\66\x65\143\145\x34\65\x33\x38\x35\70\x37\x66\141\x64\x37\x38\x33\65\146\71\x38\x30\63\x66\x35\x63\x61\66\x34\144\x66\x64\70\65\66\141\145\x37\66\67\x61\x33\64\x38\62\xa\x20\40\40\40\x20\x20\x20\40\40\x20\x20\x20\x20\x20\40\x20\x63\x32\146\63\x31\x35\x63\x36\x39\x66\62\x30\145\x63\x37\141\x65\x33\71\61\146\x63\x36\x63\x32\144\145\x38\x35\x32\70\x31\144\65\x34\x63\x39\x37\x66\67\64\71\x38\61\x62\64\145\x66\x65\143\x30\x66\x35\x65\64\x36\60\66\67\x36\x35\x63\60\64\xa\x20\x20\40\40\40\x20\40\x20\x20\x20\x20\x20\x20\x20\x20\x20\x30\146\61\x66\x34\65\63\70\x36\x62\145\144\64\x66\144\x62\x39\x66\71\71\x38\142\x30\145\67\60\x32\67\x63\x37\64\61\x34\142\145\x61\66\x36\67\x62\x31\62\x30\65\60\62\x37\143\65\x35\145\145\144\71\62\x37\63\x36\x34\x34\x34\x36\63\142\xa\40\40\40\x20\x20\40\40\40\x20\x20\x20\40\40\40\40\40\61\70\63\x32\x62\x63\x35\63\x33\70\x65\63\x61\x37\x65\61\x30\x62\x66\62\64\x64\70\x65\x36\x39\x66\61\x36\67\x62\x39\64\x35\x35\x31\142\x36\x32\x34\60\146\x36\65\x62\x34\61\x36\x66\x65\145\142\144\x32\x38\x35\x39\71\x33\63\x34\141\141\x34\xa\x20\40\x20\40\40\x20\x20\40\40\x20\x20\x20\x20\x20\x20\40\144\x39\71\70\x61\x35\x39\x39\60\65\63\143\144\64\67\x37\x66\x35\x34\x66\x63\x30\x61\146\66\x32\x61\70\145\146\67\x35\145\142\71\61\60\71\x36\x62\x31\x35\x33\x37\65\x31\x62\x32\60\x31\142\x38\x33\67\x34\x63\64\71\65\x36\x35\x30\70\143\xa\x20\40\40\x20\x20\40\x20\x20\40\40\x20\40\x20\40\x20\x20\66\x63\70\x32\x65\141\x32\x63\145\142\60\62\x36\65\145\x37\64\143\x39\66\60\x33\x32\67\70\x37\x66\x65\60\61\x31\63\71\142\x35\67\70\x63\63\x61\x31\x34\146\x64\64\145\63\62\141\70\x35\x31\71\x35\x33\x37\65\x62\62\65\144\141\66\60\12\x20\x20\40\40\40\40\x20\40\40\x20\40\40\40\40\40\40\x34\x66\62\x31\x31\x38\67\145\145\x30\61\x64\x66\66\60\64\62\x39\67\x31\144\67\143\x32\142\71\144\144\x38\x62\66\61\x31\65\x32\x37\63\67\x37\x66\62\x38\146\71\63\63\65\65\71\x66\x36\142\62\x65\144\146\x65\x37\142\x64\70\70\x39\66\12\40\x20\x20\40\x20\x20\40\40\40\x20\40\x20\40\x20\40\40\x30\x30\x36\62\x37\70\63\60\142\x63\144\x66\146\x63\x62\70\70\x34\x39\70\x39\x30\61\x33\x35\x38\65\143\x63\x36\144\x61\x37\62\x36\143\67\x63\143\x35\x37\143\66\x39\x65\70\x36\66\x34\x61\x32\x34\64\144\x32\63\64\64\x36\x35\x66\62\141\x35\12\40\40\x20\x20\40\40\x20\40\40\40\x20\40\x20\40\x20\40\x65\67\63\66\x35\61\62\141\x36\x35\x65\65\66\63\141\x32\141\x37\62\x36\x39\x31\x35\x62\65\60\x32\x34\x37\141\x66\146\x31\66\65\x31\x39\x30\x63\x37\65\144\x31\x35\61\61\63\x39\146\62\142\x33\61\62\61\61\141\63\141\143\146\71\x34\x65\xa\40\40\x20\40\40\40\x20\40\40\x20\40\x20\x20\x20\40\x20\x32\x33\66\x64\62\x37\x62\64\x34\61\x66\x65\66\64\145\x38\70\x61\x34\x34\63\67\67\70\63\x35\71\144\65\x37\x62\141\60\x66\145\144\70\145\144\x62\142\60\x31\143\x63\x36\x30\141\61\x31\66\x66\x39\65\71\71\x64\x61\x34\145\64\x37\x62\146\xa\x20\x20\40\x20\x20\x20\x20\40\40\40\x20\x20\x20\40\x20\40\x65\71\66\x38\x35\60\141\x63\x31\x32\x64\61\61\x39\x39\x61\x30\70\x30\146\61\x62\65\x39\61\143\x36\60\145\141\145\x36\x31\63\146\142\x61\x34\64\x34\x66\71\146\145\63\x31\x66\144\64\62\145\145\63\x33\x33\66\67\70\x35\x33\x32\x35\x35\66\xa\40\x20\40\40\x20\x20\x20\40\40\x20\x20\40\40\x20\40\40\x30\67\146\142\x66\145\145\146\60\62\143\x64\x62\142\62\x64\60\141\70\x64\x32\x33\x32\x39\141\x64\x63\67\x66\x62\x61\62\x32\141\x61\64\x63\144\61\62\x34\x63\x36\x65\x36\x36\145\x30\x62\x30\141\x63\x61\67\71\66\142\x61\x36\141\145\x62\66\x39\xa\x20\x20\40\x20\x20\x20\x20\40\x20\x20\40\x20\40\40\x20\40\x66\x38\x65\x37\66\x61\x39\144\x31\141\x61\x61\142\x65\x33\x35\61\x62\143\64\x32\x66\x65\146\x61\66\x30\x35\64\71\67\67\70\x35\x39\142\65\x31\61\x35\x38\x62\x61\x37\61\x34\63\x39\70\60\144\x37\x36\144\142\65\x62\62\143\143\66\141\145\x63\12\x20\40\40\40\x20\40\40\x20\x20\40\40\40\40\x20\x20\x20\x39\x66\70\x33\145\141\x63\x35\x65\144\146\x37\71\x33\x35\67\66\x33\62\146\x62\66\60\x63\x62\64\x38\x31\x31\x65\x37\61\70\x39\x32\x34\x33\x36\x65\65\x38\62\x33\67\65\x38\66\60\x66\141\146\x38\144\x38\x63\65\61\70\145\x65\x33\x33\143\141\xa\x20\40\x20\x20\x20\40\x20\x20\x20\x20\40\x20\x20\40\x20\40\145\60\x38\x62\x31\x38\x61\146\x37\x66\141\141\62\x32\67\x64\x39\x37\61\71\66\x64\67\x62\x30\x34\61\x62\143\142\x33\x36\x36\61\x31\70\x37\x35\61\146\142\x65\141\141\x39\62\x64\x38\60\x66\x38\x36\63\62\x34\x63\145\70\x37\x31\61\143\x66\144\12\x20\40\x20\x20\x20\x20\x20\x20\40\40\x20\x20\x20\x20\40\40\66\65\60\60\65\x63\141\144\60\x63\145\63\60\x38\67\x38\x66\65\x30\70\x65\x62\x31\x65\141\x32\x37\x33\x35\x65\x32\61\x32\x65\x66\x33\x65\x34\x32\x61\67\70\64\x36\67\x64\x34\x66\x33\61\x62\64\x38\63\x30\x38\67\143\63\143\66\x33\141\x33\xa\x20\40\40\40\40\40\x20\40\40\40\40\40\x20\40\x20\40\62\x66\x61\x36\x32\x66\x32\x61\x65\x39\x32\x65\x32\x61\143\144\x66\143\63\143\x66\62\x31\142\x33\x34\61\x39\x61\x63\143\x33\64\x37\x66\x66\x35\x31\143\x63\142\61\67\61\x36\61\x65\x38\x32\71\x63\143\64\x61\62\x34\x39\x36\65\x66\x64\x39\x33\x30\xa\40\40\40\40\x20\40\x20\x20\x20\x20\40\x20\x20\x20\40\x20\142\71\70\x33\x64\x36\63\x31\x35\x33\x62\71\143\x31\x33\x64\144\x38\x35\63\x34\60\x64\x37\61\70\x34\x62\146\60\x31\67\63\x34\x64\x34\x33\65\67\143\61\x61\141\142\x66\142\x64\x63\71\x37\61\x31\x31\71\63\x66\x66\141\71\x37\x34\x38\63\x32\xa\40\40\x20\x20\x20\40\40\40\40\40\x20\x20\x20\x20\x20\x20\x34\146\x38\x38\x63\x66\x38\x30\61\146\x33\x35\67\x30\x38\x64\142\x30\71\x30\x31\x66\146\x61\x61\x35\x35\64\61\x35\143\x61\64\63\63\x34\x36\67\x38\x36\63\63\x64\144\x61\67\x36\x33\x62\65\x66\x62\x66\x62\141\x37\x63\x66\144\x35\61\x64\x63\65\xa\40\x20\x20\x20\40\40\x20\40\x20\x20\x20\40\40\x20\x20\x20\x37\x39\61\x34\x39\x65\143\71\62\x38\64\x61\64\x64\x62\62\x33\64\x39\x64\x62\x63\65\x32\x36\x34\x64\x35\x66\x63\141\67\141\67\x32\x30\63\64\62\66\61\67\61\x36\x64\71\x30\x61\71\71\66\143\142\x35\67\142\141\x30\71\x66\67\x64\x30\x37\xa\x20\x20\x20\x20\40\x20\40\x20\x20\40\40\40\40\x20\x20\40\62\x39\x61\62\146\x31\60\143\x63\65\x38\145\x65\x63\x39\x38\144\x38\66\145\x39\x33\x30\x36\x61\63\146\142\146\x32\145\67\61\61\60\x34\x36\x65\x38\x36\142\x35\141\70\66\x63\x63\60\145\x65\144\x37\x36\62\65\142\x65\x31\x61\x30\x31\145\142\146", "\x37\x31\62\71\x32\x39\x36\63\x35\x66\65\x62\x65\x30\61\x33\x31\65\x39\x61\145\143\70\61\x32\x39\66\142\x39\66\145\143\63\66\x33\x33\63\67\x33\x34\63\67\63\65\x36\x35\x33\66\66\x31\66\x36\x33\70\63\x30\x33\x31\63\61\63\x37\x33\x34\12\40\x20\40\40\x20\x20\40\x20\40\x20\x20\x20\x20\x20\40\40\x33\x33\x33\x31\x36\x32\63\x38\66\x33\x36\x36\x33\70\x33\x37\63\64\63\x32\63\x37\66\x33\x33\70\x36\x33\63\67\x36\x35\63\x39\x36\64\x33\70\x36\65\x36\64\x33\x33\63\x39\63\x38\63\65\63\61\x33\x36\x33\x31\x33\71\x33\x39\x36\65\x36\66\xa\x20\x20\40\x20\40\x20\40\x20\x20\40\x20\x20\x20\40\x20\40\63\x34\x33\61\63\67\63\x31\66\63\63\x37\66\65\x33\71\x33\64\x36\62\x36\66\x33\62\66\x34\63\61\x36\61\x33\x30\144\145\x39\60\66\x39\70\145\66\64\146\x61\x34\141\x62\x63\x39\x31\66\63\x39\145\67\x32\142\x61\x65\145\70\63\x62\143\xa\40\x20\x20\40\40\40\x20\40\x20\40\40\x20\40\40\40\40\62\x63\x61\x66\70\65\146\x39\61\x33\61\70\145\x30\143\142\x64\60\144\142\x35\x66\x61\x30\70\x63\x34\146\146\142\x35\70\x32\x65\x63\x35\x35\x63\141\x34\x33\144\x65\x35\63\141\x34\x33\x66\62\x38\x34\64\141\146\x33\x35\x64\x35\146\x38\x37\142\x39\xa\x20\40\40\x20\40\40\40\40\x20\40\40\40\x20\x20\40\x20\x38\146\x61\x61\x36\62\x33\61\x30\67\141\145\145\62\145\60\x38\x33\x66\61\143\x37\141\145\145\x64\x63\x62\60\x34\x37\62\143\x39\63\x62\x62\71\145\x61\143\x62\x64\63\71\144\70\x33\x39\x64\65\142\x66\71\x34\x63\64\x34\x36\65\70\x64\x37\x66\12\40\40\40\x20\40\x20\40\x20\x20\x20\40\x20\40\x20\x20\x20\144\x37\x30\x38\61\67\x66\65\x64\66\x62\61\62\60\x66\x39\61\145\146\x38\x36\x38\x38\x30\x66\x39\x33\x65\x39\71\61\x35\61\142\x63\61\145\x64\x31\x33\145\144\62\66\63\141\63\x63\143\143\x37\x32\x34\63\x65\65\x65\141\x39\67\146\63\x39\x66\12\40\40\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\x20\x20\40\x20\61\x63\145\x32\x63\x65\66\142\x30\x35\x61\x32\x62\x37\70\146\x30\65\x63\65\144\67\62\60\x34\x31\145\63\x35\64\66\66\60\x36\70\x66\65\x32\146\x62\x33\x64\x32\x62\141\x33\141\146\141\67\65\x39\x34\x64\x37\x62\143\60\x39\70\61\143\65\x34\12\x20\x20\40\40\x20\40\40\x20\x20\x20\x20\40\x20\x20\x20\x20\x38\142\63\61\141\x65\67\x65\65\142\67\145\67\x65\x30\145\x36\x66\x32\x66\x61\x63\x39\x61\63\63\66\x65\66\65\x31\x36\x64\67\145\x34\x62\65\143\143\66\65\x38\145\61\146\145\x36\63\x34\x64\141\x66\x39\x61\x64\60\x39\67\x37\x31\65\x62\x65\12\x20\40\x20\40\x20\x20\40\40\40\x20\40\x20\40\x20\40\x20\x31\64\x64\x35\64\x65\146\61\x39\x61\144\x63\63\70\61\x64\142\x33\x31\x64\x62\x37\70\67\x31\x34\141\x30\71\x65\x39\71\x37\144\x63\x37\67\63\62\x38\x35\x33\144\63\71\x38\x38\x35\x35\x36\66\145\x34\x31\141\62\143\60\x65\143\x62\60\x38\144\xa\x20\40\40\40\x20\x20\x20\x20\40\x20\x20\40\40\x20\x20\40\145\x66\70\141\142\x35\x36\63\65\71\x61\60\x65\63\61\62\x34\64\x36\144\x39\146\x31\65\65\65\65\x33\71\x61\x64\62\71\x65\61\x33\x30\x38\x30\x64\x34\63\x38\x64\x36\70\61\x37\62\x38\x30\x64\64\x64\142\x66\145\x36\143\144\x34\141\142\71\12\x20\40\40\40\x20\x20\x20\40\40\x20\40\x20\40\40\40\x20\64\x61\x33\x35\67\144\142\144\x64\x63\x65\x61\x31\x62\143\71\60\x65\x30\x64\60\146\141\x36\x64\65\x35\x36\x62\x31\x62\x61\67\x35\x63\x32\63\141\61\x64\63\x38\x31\x38\145\141\71\61\x65\x30\x66\x61\x35\x62\70\x30\x30\x35\142\x38\x30\62\x30\145\12\x20\40\40\x20\40\40\40\x20\40\40\x20\x20\40\40\40\40\x66\67\141\70\x30\145\x64\62\x65\145\x36\x30\x61\x61\x38\x65\x65\65\70\70\145\61\60\61\144\142\x66\x33\142\66\x34\x62\146\66\141\63\144\x63\x61\65\x62\x31\x64\65\142\x63\142\x39\x36\x65\x65\x64\65\x63\x35\x39\64\x62\x61\x62\x31\144\x63\x66\xa\x20\x20\x20\x20\x20\40\x20\x20\40\x20\40\40\x20\x20\x20\40\143\61\x66\66\x31\x64\x37\64\141\144\63\x66\146\x30\x66\65\146\144\146\x31\x37\66\x61\63\62\67\145\70\144\x65\x33\x33\x64\61\x32\63\x63\x64\144\66\x31\x63\x36\143\64\144\x63\x39\x34\66\64\x32\71\x63\x35\66\66\x61\143\x30\x66\x37\67\x66\12\40\40\x20\x20\x20\40\x20\40\x20\x20\40\40\40\40\40\40\64\70\x32\61\x35\x64\65\70\70\71\63\x36\x35\x66\141\66\x36\x34\x61\x38\67\71\x62\x61\142\x64\64\x37\65\x38\x66\x62\64\144\70\x32\64\x63\146\142\x39\145\64\x62\x66\x36\65\x30\x30\146\x66\145\x63\60\145\64\145\x62\145\x66\145\x34\x66\66\12\x20\40\x20\x20\40\x20\40\40\x20\x20\x20\40\40\x20\40\40\x32\145\x35\62\61\141\x37\143\144\x35\x36\63\146\143\71\65\x34\141\x39\x31\66\61\x30\x34\67\64\x36\61\145\x34\x30\65\x34\146\63\62\64\x63\65\x63\x66\x34\146\x39\145\71\x34\71\x35\66\66\x63\71\x61\x63\61\67\143\x34\65\141\x61\x63\x31\xa\40\40\40\x20\40\40\40\x20\40\x20\40\40\x20\x20\40\40\141\142\x66\x39\70\143\141\145\144\64\62\62\64\62\x63\65\61\x61\x61\x30\x64\70\x31\144\x37\63\x32\143\x35\x33\70\145\x34\63\x37\x63\x34\60\x32\x34\145\x38\x66\60\64\x65\x65\145\x61\x62\x36\66\61\x39\141\145\144\64\x36\65\x39\71\145\x37\12\40\40\x20\40\40\x20\40\40\x20\x20\x20\x20\x20\40\40\x20\x66\66\66\x63\62\x30\64\61\145\60\x63\x33\x34\66\x61\146\x66\141\142\61\146\x37\x39\x63\144\x37\63\65\62\x61\x36\x36\66\x38\66\146\x61\x63\x32\x62\63\x38\x36\61\65\146\x38\146\x63\61\x37\x32\141\x62\x30\x39\x36\x37\x66\x64\64\x34\x33\65\12\40\40\40\40\x20\40\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x39\144\x65\141\x39\146\64\x31\x62\x35\x37\142\141\65\x61\67\x35\x32\x65\x32\60\64\x35\66\146\x32\x32\x35\x34\145\x38\x65\x65\x66\x35\x37\x36\x38\66\x37\x65\142\144\141\60\x66\64\70\146\145\x34\x37\x61\x32\145\x39\61\146\x63\70\x64\70\141\x66\xa\x20\40\x20\40\40\40\x20\40\40\40\40\40\x20\x20\x20\40\144\143\61\x62\x66\x39\70\141\70\x64\63\65\x33\60\x62\64\142\x30\x32\71\71\66\x66\145\x34\142\60\x35\x65\143\x33\144\141\142\62\x30\x30\x66\x39\x65\67\71\x61\64\62\66\61\x63\x32\x33\x33\x63\141\x61\71\x61\x33\x33\67\x36\x32\x66\61\146\xa\40\40\x20\x20\40\x20\x20\40\40\40\x20\x20\x20\x20\x20\40\x34\142\x33\x34\70\62\141\142\x36\x66\61\66\146\x35\144\142\144\x37\x62\144\70\x37\x65\144\x31\67\x65\x32\61\143\x33\x30\61\64\x30\x63\x65\x36\x31\146\143\x32\64\x36\70\x63\60\x35\x34\x63\145\65\61\x64\x64\x65\x64\62\66\x38\63\x64\x37\x63\12\x20\x20\x20\x20\40\x20\x20\x20\40\40\x20\40\40\x20\x20\40\63\x37\x35\x64\x36\71\144\x36\66\62\67\62\71\x64\66\x66\x62\x38\x36\x32\x39\142\70\144\x63\62\x35\x64\x63\x63\65\x35\x39\66\x66\70\67\x66\66\62\67\141\x32\61\x33\70\x61\x33\x65\x66\x33\66\x38\141\62\x61\x31\65\71\x31\71\60\62\146\xa\x20\40\x20\40\40\40\40\x20\40\40\40\x20\x20\x20\x20\x20\70\64\x66\x66\143\x34\x35\67\142\x64\x35\x35\x36\x61\63\x34\66\70\x31\x35\x39\x38\x36\x66\x31\x35\63\146\144\x33\141\71\x39\x65\x66\61\x36\71\x34\x34\64\64\x33\66\141\x63\x38\61\70\65\x33\x62\63\61\x38\143\x30\71\x30\70\143\142\63\63\12\40\40\40\x20\40\x20\x20\40\x20\40\x20\40\40\40\40\40\x63\x66\x33\63\62\x65\x64\x61\144\146\142\x38\67\x30\143\141\142\x34\61\x39\x33\x36\x35\x33\x31\62\x63\61\x38\141\145\144\x61\x34\61\70\142\70\x62\x35\x37\61\x37\x38\63\141\66\x62\62\x64\x38\x63\x33\x39\67\143\63\x33\141\62\62\x62\x33\61\12\40\40\40\x20\x20\x20\40\40\x20\x20\x20\x20\x20\x20\40\40\x35\65\x39\x35\x38\x63\145\146\x31\x35\63\x66\x34\144\x39\x63\x66\x63\x33\x61\x31\143\x36\x32\70\x38\146\x66\x31\x37\142\146\x64\x64\x39\62\x31\x33\x32\145\61\146\61\x65\x35\x66\145\x38\x30\x34\x31\145\63\60\x61\63\x38\63\60\70\x34\x38\61\61\xa\40\x20\x20\x20\40\40\x20\x20\40\40\40\x20\x20\40\x20\x20\x66\145\x38\x39\62\x64\x37\146\x63\x33\x33\141\142\146\x66\x31\60\144\144\x32\60\x64\142\60\67\62\67\67\66\x37\x37\x62\61\x36\x65\67\x66\x39\60\x31\63\67\141\x64\x66\143\x33\x63\142\x33\66\x64\x64\70\x35\x64\145\63\66\61\x38\x37\x36\x39\12\x20\40\x20\x20\40\x20\x20\40\x20\40\x20\40\40\40\x20\40\142\x66\70\x66\x33\143\145\61\63\x36\64\62\x66\x39\145\141\x34\x33\x30\146\x34\x35\x35\144\63\x38\70\x32\x38\x31\62\x30\70\x31\71\60\142\x33\63\65\71\x31\65\145\62\x35\66\63\x32\60\62\67\64\141\71\x30\x34\145\143\144\x30\71\x33\70\12\x20\x20\x20\x20\x20\40\x20\40\x20\40\40\40\40\x20\40\40\144\x33\x63\63\64\x64\x39\x39\x63\x38\x38\x65\63\x31\70\66\141\61\63\x32\x37\x37\67\146\143\67\x62\67\64\x62\x34\63\x65\x66\141\x62\x31\141\x30\70\63\x37\x36\60\x33\65\60\x36\61\144\145\65\x36\x61\64\x66\x62\x36\144\x65\x36\61\61\x63\12\40\x20\40\x20\40\x20\x20\40\x20\40\x20\40\x20\40\x20\x20\64\61\x64\x32\61\x33\x39\143\x37\x37\141\x35\x31\66\x63\64\146\70\61\64\x34\142\61\62\x33\x36\x39\x36\63\x35\x36\x62\x34\x62\71\x61\67\x35\62\x61\x39\x63\x64\x38\x35\67\66\x33\x30\x61\x66\64\x65\x66\60\x32\x33\63\x39\x31\x37\62\145\66\12\40\x20\40\x20\x20\40\40\x20\x20\x20\x20\x20\40\40\40\x20\63\66\61\x61\62\x66\144\x36\x61\x31\70\145\x33\142\x61\x61\146\70\x61\x33\x66\x37\145\x39\70\61\61\x61\144\x35\x66\x62\66\61\x61\x62\142\x61\x37\141\x65\x38\71\x33\142\61\145\67\67\64\x38\144\146\62\143\65\142\67\67\x30\64\145\x62\x39\xa\40\x20\x20\40\40\40\x20\x20\40\40\x20\40\x20\x20\40\40\x36\65\x36\60\66\x62\60\x32\65\x33\x63\142\141\66\141\x30\65\66\61\142\60\145\67\x30\x35\71\x33\143\x37\x32\64\146\x39\x39\x65\60\x37\x64\x33\x65\x39\x61\70\65\x37\141\145\146\70\71\64\141\x36\x34\x61\x33\x35\x39\x36\x39\x62\63\65\x34\xa\x20\x20\40\40\x20\x20\x20\40\x20\40\40\40\40\40\40\40\x34\x37\62\x36\144\63\65\65\60\x34\x64\67\x62\70\x63\x30\x63\x30\66\x63\x62\146\71\x31\60\66\x63\65\x64\x35\60\64\x36\67\x34\144\141\x61\70\67\x39\x62\63\71\63\x32\70\x64\x32\x63\70\x33\x65\60\x66\64\145\65\x36\62\x32\145\141\61\12\40\40\40\40\40\40\40\x20\x20\40\40\x20\x20\40\x20\x20\64\x66\x62\x37\64\x32\64\x35\x38\62\61\64\142\64\61\x30\145\62\x37\x33\66\x64\70\x63\x65\x66\x61\x62\146\x62\x31\x32\65\143\64\67\x36\71\x37\60\61\67\61\x31\x63\x31\x35\141\x62\x38\x37\x30\x62\65\146\146\61\x39\62\x64\64\x63\x37\x31\12\x20\40\x20\x20\40\40\40\40\40\40\x20\40\40\x20\40\40\x65\x38\60\x35\141\143\x35\x31\60\60\63\65\x32\145\63\63\x32\62\67\142\x31\66\x32\x65\x62\141\x65\x31\62\x33\145\x32\60\143\64\67\x37\67\61\x39\143\x35\62\x63\x35\x39\145\61\x39\62\143\x32\145\x33\67\63\x31\x38\60\x36\x34\x30\64\x64\xa\x20\x20\40\x20\x20\x20\40\40\40\40\40\x20\x20\40\40\x20\144\x34\63\65\x39\x66\70\64\60\142\61\x31\141\144\x34\x39\65\63\65\67\62\61\60\x65\x32\x35\71\145\66\x62\71\x65\x38\146\x65\x35\x65\x38\146\66\x30\x30\145\70\x37\x34\66\146\145\x31\x61\64\70\x33\x64\x34\65\142\x36\71\x34\x33\62\x34\xa\40\x20\x20\40\x20\x20\x20\40\x20\x20\40\40\x20\40\40\40\x30\x38\60\x39\66\x34\x39\x65\x64\x37\63\x32\x30\142\60\60\62\x32\x61\65\145\x66\67\142\x34\61\64\66\63\x35\71\63\63\144\66\144\x31\x38\145\x63\67\x32\61\x38\x66\x38\62\71\x31\x32\x31\x64\x31\62\144\x63\x62\x35\67\x33\x65\x64\67\67\xa\40\40\40\x20\x20\x20\x20\x20\40\40\40\x20\x20\40\40\40\67\x39\x61\x62\x30\65\61\x39\x64\62\144\x66\x31\67\144\x62\x64\x38\71\70\x38\142\63\62\x61\143\x30\67\x31\x31\145\146")); return static::CRYPT_VECTORS === "\156\x65\x77" ? $openssl : $mcrypt; } public function testEncryptByKeyCompat($key, $data, $encrypted) { $key = hex2bin(preg_replace("\x7b\x5c\163\x2b\175", '', $key)); $data = hex2bin(preg_replace("\x7b\x5c\x73\53\x7d", '', $data)); $encrypted = hex2bin(preg_replace("\173\134\x73\53\175", '', $encrypted)); $this->assertEquals($data, $this->security->decryptByKey($encrypted, $key)); } public function dataProviderEncryptByPasswordCompat() { $mcrypt = array(array("\114\164\x6f\147\x49\105\x68\171\65\71\166\x65\x30\110\x75\x79", "\63\60", "\x38\63\x33\x32\x35\x63\x38\x61\x62\145\70\144\143\x30\x61\146\x64\x38\60\61\141\143\142\x37\67\70\x35\144\x63\x32\x39\x63\63\x32\x33\71\63\64\x33\x39\x36\x35\x33\x39\x33\60\x36\x36\63\x32\x36\66\63\71\x36\64\x36\x36\66\65\x33\70\x36\x32\12\x20\40\x20\x20\x20\40\40\x20\40\x20\x20\40\40\x20\x20\40\x33\71\66\x35\63\60\63\x39\66\x34\66\65\63\x39\x33\x35\x33\62\x36\62\x33\x38\x33\64\x33\60\x36\65\63\x36\x33\x37\63\x34\x33\x34\66\x32\66\64\x36\63\x33\x39\x33\x32\x33\x37\66\63\x36\x34\63\67\x36\x34\63\x30\66\x35\63\71\63\x33\xa\x20\x20\40\x20\x20\x20\40\40\x20\x20\x20\40\40\x20\40\40\63\67\x33\60\x33\x39\66\x33\63\x37\66\x32\63\62\x33\x33\66\66\63\x34\63\x30\66\63\x33\71\63\71\x36\x31\63\x36\x65\66\146\x34\x65\67\144\143\63\x65\x32\x66\144\62\63\142\x65\61\x38\66\x66\x30\x33\67\x65\x34\x63\x61\x61\66\x64\60\12\x20\x20\40\40\x20\x20\40\x20\40\x20\40\40\40\x20\40\40\x34\141\145\70\143\142\70\71\x34\x64\70\x30\x63\x30\70\142\x62\x37\x39\60\x34\x31\x37\141\146\x39\x63\143\x31\x37\x36\x66"), array("\x31\x5f\126\x54\x75\x6d\116\116\x63\67\x56\x56\64\66\63\164", "\x33\60\63\x31\x33\62\x33\x33\x33\64\x33\x35\63\66\x33\x37\63\70\63\71", "\141\x32\x34\67\141\143\62\64\x66\x33\x61\x61\66\60\145\70\x39\64\71\60\64\x66\x35\70\71\65\x34\143\145\x38\x62\x66\x33\71\63\70\x36\x35\63\x30\63\66\66\x31\x36\65\63\x34\x33\x35\63\x38\63\x33\66\x31\x33\62\66\61\x36\62\63\61\12\x20\x20\40\40\40\40\x20\40\x20\40\40\x20\x20\40\40\x20\66\65\x33\x32\x33\x35\x33\x30\66\66\66\66\x33\64\x33\60\x36\64\66\x34\x33\x32\63\x38\63\x35\x33\x31\x33\x33\63\x34\66\x35\63\x37\63\x33\x33\x36\x36\64\x36\x33\63\x33\63\x38\66\x34\x33\x37\63\x32\63\67\63\63\x36\63\63\67\x36\x33\12\x20\x20\x20\40\x20\x20\40\x20\40\40\x20\40\40\40\x20\40\x36\x34\66\x36\66\x35\x33\64\x36\62\63\62\x36\62\x33\x36\x33\x35\x33\71\x33\71\x36\x32\x36\x32\66\x31\x36\62\x33\x32\x33\x61\x34\64\141\x31\x35\x30\x61\x35\65\x36\141\x64\144\144\71\67\141\x64\144\x66\142\x34\x33\141\63\x32\x66\66\x30\x30\xa\x20\x20\x20\40\x20\x20\x20\40\40\x20\x20\x20\40\x20\x20\x20\141\x61\62\x63\64\x37\x39\66\x36\64\x36\70\62\141\x33\x30\x38\145\x36\x63\x64\x64\65\62\63\71\66\x37\x63\142\x34\x61"), array("\x44\102\x70\x6f\111\120\156\x64\x4b\x52\155\x32\122\146\145\155", "\x33\x30\63\x31\63\x32\63\x33\x33\x34\x33\65\63\66\63\x37\63\x38\x33\71\x36\x31\x36\x32\66\x33\66\x34\66\x35", "\x39\145\x64\x32\60\146\63\60\70\62\64\63\x31\62\x30\63\62\145\x35\x65\63\64\x65\x32\x63\x35\141\x62\x36\x31\145\63\63\x33\x33\x31\63\x39\63\x30\x36\x31\66\x36\x33\x34\63\x39\x36\x31\63\67\66\62\x33\62\x36\61\63\x36\63\70\66\x33\xa\40\40\x20\x20\x20\40\x20\40\40\40\x20\x20\x20\40\x20\x20\63\63\x33\x34\63\62\x33\70\x33\x32\x33\63\x33\66\x36\64\66\x32\66\x32\x36\65\66\x36\x33\64\x33\65\x36\64\63\66\63\63\63\x32\x33\x30\63\63\63\70\x33\70\x36\62\66\61\x33\70\66\65\x36\x33\63\71\x36\61\x33\x35\x36\x32\66\61\xa\40\40\40\40\40\40\x20\x20\40\x20\40\40\x20\x20\x20\40\x33\60\x33\65\x33\x36\x33\64\x33\71\x33\65\63\x36\66\63\66\x34\66\65\x36\64\63\x38\63\63\66\x33\x33\x35\63\61\142\66\x32\x63\145\61\65\x36\x66\63\64\142\71\x32\x37\71\x30\x62\x32\144\x32\x36\x33\61\x32\146\x33\146\144\67\144\x30\xa\x20\x20\x20\40\x20\x20\40\x20\40\40\x20\40\x20\40\40\40\x30\x61\x36\64\x36\x64\x61\x34\144\66\x33\x36\146\66\x39\71\x38\x66\x31\142\60\144\70\x35\71\146\x32\65\65\144\x63\x36"), array("\163\61\x65\61\157\122\105\61\x69\115\137\157\157\162\164\x62", "\x33\x30\63\61\63\62\63\63\63\64\63\65\63\x36\63\67\63\x38\63\x39\x36\61\66\x32\66\x33\x36\64\x36\65\x36\x36", "\x35\142\60\x33\x34\62\67\x64\142\x61\64\70\61\142\x35\141\146\70\67\66\60\145\x64\143\x33\x37\x38\70\146\141\x30\145\66\66\66\x36\x36\66\x36\63\66\x32\x33\x35\x33\x39\x33\65\63\x31\66\63\x33\x34\x36\x34\x36\x36\66\66\63\67\66\x31\12\x20\40\x20\x20\x20\40\40\40\40\40\x20\x20\x20\40\40\x20\66\64\x33\64\66\x36\63\x33\x33\67\63\70\63\x35\x36\66\x33\66\x36\62\x36\x35\x36\66\63\x39\63\61\63\x30\x33\66\x36\x32\63\x36\66\x35\x33\60\x36\x35\63\x36\63\63\x36\x36\63\x32\x33\x35\63\60\63\65\63\x32\63\67\x33\x37\x36\63\xa\40\x20\x20\40\40\x20\x20\40\x20\40\x20\x20\x20\40\x20\40\x33\67\63\x34\66\63\63\x30\63\71\63\x35\63\x37\x36\x34\66\66\x33\x30\66\x31\x36\x35\63\65\63\x37\x33\62\x33\60\143\71\70\61\x33\x34\144\x61\60\x30\144\x37\x37\67\x35\x33\67\x34\x31\143\x31\x66\60\x62\142\64\70\63\x66\61\60\71\12\40\x20\x20\40\40\40\40\40\x20\40\40\40\40\x20\40\x20\x36\x32\62\141\70\x38\x39\146\71\65\x30\63\61\60\x63\144\x35\61\144\x37\x64\x34\70\144\66\63\x32\60\62\142\x32\60\x64\x33\x37\x38\145\141\143\x38\65\x66\67\x64\60\x63\x38\65\x31\146\143\71\71\x30\x35\144\x33\x32\62\141\145\146\71\66"), array("\151\61\x45\x37\112\166\117\121\141\105\123\x41\113\x6f\x65\x48", "\x33\60\63\61\63\x32\x33\63\63\64\x33\65\x33\66\x33\x37\x33\x38\63\x39\x36\61\66\62\x36\x33\66\x34\66\65\x36\x36\x33\x30", "\x37\x63\146\x32\x65\144\64\x36\61\x32\x64\60\67\144\145\x33\x65\x63\x66\x64\65\64\141\x63\x30\145\x35\x37\66\145\70\x35\63\71\66\x31\63\x38\66\61\x36\65\x36\x34\63\x39\63\x33\63\x39\66\65\66\x32\63\65\63\63\66\x32\x36\x32\63\x38\12\x20\x20\x20\40\40\40\40\40\x20\x20\40\40\x20\40\x20\x20\x33\63\66\x31\66\x35\x33\67\66\64\66\66\63\x34\63\x38\x36\64\x33\x33\63\60\x33\x38\x33\x31\x33\x30\x33\61\x33\64\66\62\x36\x31\63\71\x36\61\66\63\66\x34\66\62\x33\70\x33\x38\63\66\63\x38\x33\x38\66\x32\63\x31\x33\x39\66\x32\12\40\x20\40\x20\x20\40\x20\40\x20\40\x20\x20\40\40\x20\x20\x33\64\66\64\x33\71\x33\61\63\66\x36\x36\x33\x34\63\x33\x33\66\63\x31\x33\x37\66\66\63\x36\66\65\x33\70\x36\63\67\142\144\65\66\x36\x62\61\145\145\143\x62\60\x62\x31\145\60\x38\x39\66\145\x62\x31\146\144\x30\x66\144\x31\x31\x64\x39\12\40\x20\40\40\40\x20\40\x20\x20\x20\x20\40\x20\x20\40\x20\x64\143\142\71\x65\145\145\65\x63\x63\63\144\71\x30\x63\64\x30\x34\x36\x61\66\x38\64\x39\x65\70\141\x64\61\x35\x32\143\141\x66\x38\65\145\70\146\71\x36\144\x65\63\x62\62\64\x62\x34\144\65\x32\63\x61\x32\x64\x36\60\65\x33\x33\x65\x30\142"), array("\121\x55\116\x32\64\x67\x70\x4e\107\157\x64\x58\x75\162\115\x4d", "\64\145\x31\66\x31\x61\61\x64\x66\66", "\x34\x39\146\143\62\144\65\61\x62\x33\145\66\63\x32\x35\144\x38\x36\63\x33\64\145\x61\70\70\67\62\66\x39\x39\145\146\63\x31\66\61\x33\66\66\x31\x33\63\63\x30\x33\x31\x33\x37\63\x30\x36\x35\63\x37\x33\70\63\x34\66\64\x33\60\x33\63\12\40\40\40\x20\40\x20\40\x20\x20\40\x20\x20\40\40\40\40\x33\x38\x36\x33\63\x34\63\x37\63\64\x33\x36\66\64\63\x35\63\64\x33\60\x33\65\x33\x31\x36\65\66\x32\x36\x34\x33\x34\63\x38\x36\x33\x36\x31\x33\63\63\60\x36\62\x33\63\63\x37\x33\64\x33\x31\63\62\x33\60\66\x36\x33\63\x33\63\63\60\xa\40\40\x20\x20\x20\40\40\40\x20\x20\40\40\40\40\40\x20\63\62\x36\x31\x33\63\x33\x30\x36\x32\63\x33\x36\x34\x33\62\x36\x31\66\62\63\62\66\64\63\x34\x33\60\66\x36\63\x37\60\64\62\146\71\x62\x34\x61\x30\60\65\x65\144\63\x62\71\65\63\x32\x31\x38\61\x64\60\62\60\63\x37\x38\70\x30\60\xa\40\40\40\x20\x20\40\x20\40\40\x20\x20\40\40\x20\x20\40\144\145\x65\x66\x63\x66\x61\63\66\x64\x37\67\x65\144\64\x61\142\144\x66\63\x35\x35\64\66\x63\60\x62\x62\64\x61\145\x63"), array("\x31\103\117\x74\71\104\70\x5a\x73\146\143\x6c\103\151\x63\62", "\x35\x38\66\62\64\64\67\60\67\x34\x36\x33\64\71\65\62\x33\x35\67\67\x36\61\x37\x36\x34\62\x35\63\67\x33\63\144", "\143\64\x64\x35\146\x39\x30\x30\65\64\x66\141\x66\x33\66\x39\x39\144\x39\70\x33\67\71\x35\x66\64\64\x62\x64\x62\x31\x34\x33\x30\x36\x34\63\x37\63\64\x36\x34\63\x38\x33\62\x33\x34\x33\x32\66\65\x33\x32\63\x30\x36\64\x33\62\x33\64\x33\x34\12\x20\40\40\x20\x20\x20\x20\40\x20\40\x20\x20\x20\x20\x20\40\x36\65\x33\x35\63\x34\x36\65\x36\x35\63\x32\x33\67\x33\63\x33\62\63\67\66\x34\x33\67\66\62\x36\66\66\64\x36\65\63\x39\x33\x36\x36\x34\63\x31\x33\65\63\62\x36\x36\x36\x36\x36\66\x33\71\63\x38\x36\62\63\x31\x36\x32\66\64\x33\x38\xa\40\40\40\x20\x20\x20\x20\x20\x20\x20\40\40\40\x20\40\x20\66\x35\63\x32\x33\x37\x36\x34\66\x31\x36\65\63\71\63\x34\x36\61\66\x32\x36\64\x33\65\x36\x35\66\x33\x33\62\x33\63\62\x62\x34\x32\x34\x34\x66\x63\143\x62\64\x37\141\144\x38\143\144\x65\141\x35\x36\x31\x30\x39\143\x37\x64\65\141\64\x31\x37\12\x20\40\40\40\x20\40\x20\x20\x20\40\40\40\40\40\x20\x20\61\63\x62\x33\70\64\64\144\x39\x38\x35\67\65\60\67\144\x62\x35\x39\144\60\60\x30\60\60\x33\67\142\61\x36\x39\x66\67\x62\x36\67\x63\x66\60\145\x61\x37\71\x33\143\x30\x32\65\x34\142\146\x66\x63\65\65\63\64\62\144\x38\145\x34\x63\x37"), array("\x65\x55\x71\x6d\166\64\143\x68\115\156\117\61\110\65\x63\161", "\70\62\143\62\x66\63\x31\65\143\66\71\x66\x32\x30\x65\143\x37\x61\x65\63\x39\61\146\x63\x36\143\x32\144\145\x38\65\62\70\x31\144\x35\x34\143\x39\67\146\x37\64\x39\70\x31\x62\64\x65\146\145\143\60\x66\x35\x65\64\66\x30\x36\x37\66\x35\143\xa\x20\40\40\40\x20\x20\x20\x20\40\40\x20\40\40\x20\x20\40\x30\x34\x30\x66\x31\146\64\x35\x33\x38\x36\x62\145\144\64\x66\x64\142\71\146\71\x39\x38\x62\x30\145\x37\x30\62\x37\143\67\64\61\x34\142\145\141\66\66\x37\142\x31\x32\60\x35\x30\62\x37\143\x35\65\145\145\x64\x39\62\x37\x33\x36\x34\64\x34\66\xa\x20\x20\40\40\40\40\40\40\40\40\x20\x20\40\x20\40\x20\x33\x62\61\70\x33\x32\x62\143\x35\x33\x33\x38\145\63\x61\x37\145\x31\60\142\x66\x32\64\144\70\x65\66\x39\x66\61\66\x37\142\x39\x34\x35\65\x31\142\66\62\64\x30\x66\x36\65\142\64\x31\x36\146\145\145\142\144\x32\70\65\x39\x39\63\x33\x34\x61\12\x20\40\x20\x20\x20\x20\40\40\x20\x20\x20\40\x20\40\40\40\141\x34", "\63\61\64\63\65\x65\x30\x62\x66\70\x63\x30\x62\x65\x39\141\63\71\x35\x37\x39\61\x32\70\70\146\66\x64\60\65\70\70\x33\x39\x33\63\x36\x31\x33\60\66\62\x33\x39\x33\70\x33\64\63\x38\x33\71\66\x32\66\x34\63\x36\x36\x33\x36\x34\63\63\12\40\x20\40\x20\40\x20\40\x20\x20\x20\x20\40\40\40\x20\40\x36\66\x36\64\x33\x37\x33\x31\x33\61\66\x36\x36\63\x36\x31\x33\x38\63\x37\63\71\x36\x33\x33\61\66\63\x33\67\x33\x31\63\x30\x33\62\63\71\x33\x36\66\65\63\x37\63\x30\x33\60\66\63\x33\61\66\66\63\x38\x33\66\63\x37\x33\x32\x36\x33\12\x20\40\x20\x20\40\x20\x20\x20\x20\40\40\40\40\40\x20\40\x36\65\66\61\63\x35\x33\60\x33\x34\x36\66\63\x32\63\x34\63\71\x33\62\x36\65\x36\x34\x36\62\x36\x31\x36\62\x33\67\x38\62\x39\x38\x64\x66\x34\x33\67\144\x61\x62\x38\62\61\145\70\x62\62\x66\x37\60\x38\x36\71\x36\x32\x66\146\145\x62\61\xa\40\x20\40\40\x20\x20\40\40\x20\x20\x20\x20\x20\40\40\x20\67\141\66\67\64\x30\x32\62\145\145\x34\71\70\x34\x37\x30\145\x35\x65\70\x66\144\146\146\x38\71\x30\x35\x61\145\144\x33\71\x65\x34\62\64\65\x38\x38\145\x63\x65\x65\x36\71\71\66\65\142\142\66\70\x35\x36\146\x30\x33\x35\66\x38\66\60\145\xa\x20\x20\40\40\x20\40\40\x20\x20\x20\x20\40\x20\40\x20\x20\141\x61\71\x37\70\146\146\x61\64\x32\143\x63\x66\x65\x66\x36\144\64\146\142\x30\60\60\62\66\x30\x31\x34\145\x31\x30\x37\67\x33\66\x66\x33\x65\145\x39\x62\62\x32\60\x36\x61\x32\x63\x64\65\62\x62\x31\70\x65\63\60\x36\x38\x63\146\66\141\141\xa\40\40\40\40\x20\40\40\40\40\40\40\x20\x20\40\40\x20\x30\67\67\143\67\x33\60\x34\x31\x32\70\x61\x33\x63\x64\71\62\144\x34\x66\x63\62\x39\x64\146\141\x37\x63\x31\70\x30\145\141\x66\x38\x35\x66\x65\x65\x63\67\71\x31\x36\61\x38\x64\x62\x31\x65\x64\60\x31\66\x39\65\x35\63\66\x63\x66\70\145\143\12\40\40\40\x20\40\x20\40\x20\40\40\x20\x20\x20\x20\x20\40\x37\x39\x32\63\143\x30\142\x33\x66\x62\71\x37\x34\x66\144\x30\146\x66\x39\62\x66\x61\141\x36\62\67\62\x33\145\71\x34\146"), array("\x33\x43\x6c\65\x76\x32\114\x6d\x6e\66\61\120\151\121\63\110", "\142\141\x64\145\143\60\x63\x37\144\x39\143\141\x37\63\64\145\x31\x36\61\141\x31\144\146\x36\x63\141\x34\x64\x61\x61\70\x63\x64\142\146\66\x62\x33\x62\x62\142\x36\60\x65\x63\x34\60\64\142\x34\x37\141\62\x33\62\62\x36\145\143\x32\66\66\x62\x31\12\x20\40\x20\40\40\40\x20\40\x20\x20\40\40\40\40\x20\x20\x33\70\63\x37\146\x66\x63\x39\x36\71\x65\71\x63\62\63\145\x32\x62\x62\x62\141\x37\62\146\x61\143\x62\x34\71\61\141\x36\x61\63\x32\x37\61\61\x39\x33\x61\x33\65\60\62\66\x61\71\x65\142\143\71\63\66\71\x38\144\66\70\71\142\x66\67\142\xa\x20\x20\x20\x20\40\x20\40\40\40\x20\x20\x20\x20\x20\x20\x20\x38\64\146\x63\x33\70\x34\146\65\x34\x34\x63\x63\x35\144\67\x31\143\x32\71\x34\x35\143\x38\x63\64\70\141\145\66\63\64\x38\x63\67\65\63\x33\62\x32\x66\143\x61\x66\67\x35\61\x37\x31\x62\x37\x64\x38\146\x31\145\x31\67\70\145\x38\65\64\x35\12\40\x20\40\40\x20\x20\x20\x20\x20\40\40\40\40\x20\x20\x20\63\144\x35\143\67\x39\146\x30\x33\x62\x61\145\x36\x64\x39\x37\60\65\x63\141\142\142\145\67\60\x30\x34\x65\143\70\61\x65\61\70\x38\x38\61\x32\141\66\66\x33\x31\63\62\x39\67\x66\x63\146\x35\x64\64\143\x36\61\141\64\x38\x36\x31\x34\144\x32\xa\x20\x20\x20\40\40\40\40\40\40\40\x20\x20\40\40\40\40\x31\x62\x35\63\x37\71\146\141\x65\66\60\67\x33\x36\146\x38\x38\x62\x63\67\x33\x37\62\65\x37\142\143\61\143\146\x62\145\x66\x37\x30\61\66\x31\60\x38\144\144\61\146\63\x61\65\x33\x37\141\x61\141\x36\x38\x31\x35\64\64\146\x35\142\142\x32\60\xa\40\40\40\40\40\40\40\40\x20\40\x20\x20\x20\40\40\x20\143\62\x64\x33\x35\x32\62\x31\62\144\x36\141\62\x65\x34\66\x30\x33\x31\61\141\142\x37\x62\71\63\x62\66\x31\61\x32\x31\x38\x62\x33\x30\x63\x37\x34\60\x32\x37\60\71\x62\x66\x66\x38\71\x65\143\x66\70\x31\x34\x33\x31\x30\x63\62\x64\142\x39\67\xa\x20\40\x20\x20\40\40\x20\x20\x20\x20\40\x20\x20\x20\x20\x20\x38\x31\x66\64\x31\64\x32\x61\65\64\144\x36\144\64\x31\146\x38\62\143\63\63\x32\60\x38\x63\x31\70\70\x61\x30\x32\63\143\x37\x30\x62\145\x66\x64\66\x39\67\142\64\x39\x36\x65\x66\142\67\143\67\142\x38\65\x36\71\x34\x37\64\x61\x39\x64\x35\xa\40\x20\x20\40\40\x20\40\40\40\40\40\x20\40\40\x20\x20\60\x32\65\x61\x38\145\141\70\x33\61\x31\143\x38\63\61\142\63\x64\145\62\142\70\x31\70\60\x30\146\x32\x38\65\x38\71\142\66\141\x65\146\x35\63\67\x66\66\141\144\x61\62\x65\63\144\71\62\141\x31\x64\144\x64\63\x39\x63\x66\x64\66\x62\64\12\x20\40\40\40\x20\x20\x20\40\x20\x20\x20\40\40\x20\40\40\x38\x31\61\x33\143\70\142\63\x36\142\145\70\71\60\142\x30\71\x39\x63\141\x34\145\x30\x38\x36\x35\65\144\142\x30\x65\x39\142\x35\143\62\x31\x31\x65\x37\60\x36\141\146\x30\65\62\x62\67\x37\x36\x39\62\64\x32\x33\x33\63\62\61\64\x31\62\143\12\40\40\x20\40\x20\x20\x20\x20\40\40\x20\x20\40\40\x20\40\x62\61\142\65\x34\60\x66\x30\70\144\70\x38\x61\x63\144\x36\66\64\143\x35\65\70\65\64\x62\60\65\x65\63\x31\x61\61\65\x64\64\x62\x30\144\x63\x39\x33\142\64\x35\61\x34\x66\x36\62\x61\70\x38\143\x33\x64\64\141\x34\x35\x31\x66\x65\63\64\12\x20\x20\40\40\x20\x20\40\40\40\40\40\40\40\x20\x20\40\x37\64\x64\62\x66\142\141\145\145\x37\64\62\146\x32\x33\x32\71\65\x39\x62\x35\x66\66\x63\x32\142\x37\61\x61\70\142\66\141\x64\x39\65\141\x30\x64\65\x33\x36\x32\x66\63\71\x33\60\71\141\143\141\67\x31\x30\x66\63\x37\141\x34\144\x61\145\62\12\x20\x20\40\x20\40\x20\40\x20\x20\40\40\40\x20\40\40\40\62\62\x38\x65\62\x37\144\63\x35\x66\x34\x64\x33\x66\x63\70\67\x65\145\66\145\143\145\64\65\63\x38\65\x38\67\x66\x61\144\67\70\63\x35\146\x39\70\60\x33\146\65\x63\x61\x36\64\144\146\x64\x38\x35\x36\x61\145\x37\66\x37\141\63\x34\x38\x32\12\x20\x20\x20\40\x20\40\x20\x20\x20\40\40\x20\x20\40\40\40\x63\62\x66\63\61\x35\x63\x36\71\x66\62\60\145\143\67\141\x65\x33\x39\x31\146\143\x36\x63\x32\x64\x65\70\65\62\70\x31\x64\x35\x34\x63\x39\x37\x66\x37\64\x39\70\61\142\x34\x65\146\x65\x63\x30\x66\65\x65\x34\x36\x30\66\67\66\x35\x63\60\x34\xa\40\40\x20\x20\40\40\40\40\40\40\40\x20\40\x20\x20\x20\x30\146\x31\146\64\x35\x33\70\x36\142\145\144\x34\146\144\142\71\x66\71\x39\x38\142\60\145\67\60\62\67\x63\67\64\61\x34\x62\145\x61\66\x36\x37\x62\x31\62\x30\65\60\62\x37\x63\65\65\x65\145\144\71\x32\67\x33\66\64\64\64\66\63\142\xa\x20\x20\x20\x20\40\x20\x20\x20\40\x20\40\40\x20\40\x20\x20\61\x38\63\x32\142\143\65\63\63\x38\145\63\141\x37\x65\x31\x30\142\x66\x32\64\144\70\x65\x36\x39\x66\x31\66\67\x62\x39\64\65\65\61\142\66\62\64\x30\146\66\x35\142\x34\61\66\x66\145\145\x62\144\62\70\65\x39\71\x33\x33\x34\141\x61\x34\xa\40\x20\x20\x20\x20\40\x20\x20\x20\x20\40\40\40\40\40\40\x64\x39\x39\x38\141\65\71\x39\x30\x35\63\143\144\64\x37\x37\x66\65\x34\x66\x63\x30\x61\x66\66\x32\141\x38\145\146\67\x35\x65\142\x39\x31\x30\71\x36\x62\x31\65\x33\67\x35\x31\142\x32\60\x31\x62\x38\x33\67\64\143\x34\x39\x35\66\65\60\x38\143\12\x20\40\40\x20\40\x20\40\40\x20\x20\40\x20\x20\40\x20\40\66\x63\70\x32\145\x61\62\143\145\x62\60\x32\x36\x35\145\67\x34\x63\71\x36\x30\x33\x32\67\x38\x37\x66\145\60\61\61\x33\71\x62\x35\67\x38\x63\63\x61\x31\64\146\x64\64\145\x33\x32\x61\70\65\61\71\65\63\x37\x35\142\62\x35\144\x61\x36\x30\12\x20\x20\40\x20\40\x20\40\40\x20\40\40\x20\40\x20\40\40\x34\x66\x32\61\61\x38\x37\x65\145\60\x31\144\x66\66\x30\x34\x32\71\67\61\144\67\x63\62\142\x39\x64\144\x38\142\66\x31\61\65\62\x37\63\67\x37\x66\x32\x38\x66\x39\x33\x33\x35\x35\71\146\x36\x62\62\x65\x64\146\x65\x37\142\x64\70\70\x39\x36\12\40\40\x20\x20\x20\40\x20\x20\x20\x20\x20\x20\x20\40\40\40\x30\60\66\62\x37\x38\x33\x30\x62\x63\x64\x66\x66\143\142\70\x38\64\71\70\71\x30\61\x33\65\x38\65\x63\x63\66\x64\141\x37\62\66\x63\67\x63\143\65\x37\143\x36\x39\x65\70\x36\66\64\x61\x32\x34\64\144\62\x33\x34\64\66\x35\146\x32\141\65\12\x20\x20\40\40\x20\x20\40\40\x20\x20\40\40\x20\x20\x20\40\145\x37\63\66\x35\x31\62\141\66\65\x65\65\66\63\141\62\141\67\x32\x36\71\x31\x35\142\65\x30\x32\x34\x37\141\x66\146\x31\x36\x35\61\71\60\x63\67\x35\x64\x31\x35\x31\61\63\71\146\x32\x62\63\61\62\x31\61\141\x33\141\143\146\71\x34\145\12\40\40\x20\x20\x20\x20\40\x20\40\40\x20\40\x20\x20\x20\x20\x32\63\66\144\x32\x37\142\x34\64\x31\146\145\x36\x34\145\70\70\x61\x34\64\63\x37\x37\70\x33\x35\71\x64\65\x37\x62\x61\60\x66\145\x64\x38\145\x64\142\142\x30\61\143\143\x36\60\x61\61\x31\x36\146\x39\x35\71\x39\144\x61\x34\145\x34\67\142\x66\12\x20\x20\x20\40\x20\40\40\40\x20\x20\x20\40\x20\x20\x20\x20\145\71\x36\x38\65\60\x61\143\61\62\x64\x31\x31\71\71\141\x30\70\60\146\61\x62\65\x39\61\x63\66\60\145\x61\x65\x36\x31\63\146\x62\x61\64\x34\64\x66\71\x66\145\x33\x31\146\x64\x34\62\145\x65\63\x33\63\x36\x37\70\x35\63\x32\x35\x35\x36\xa\40\40\40\x20\x20\40\40\40\x20\40\40\40\40\40\40\40\x30\x37\146\x62\x66\x65\145\x66\60\62\x63\144\142\142\x32\144\60\141\x38\144\x32\63\x32\x39\x61\144\143\x37\x66\x62\x61\x32\x32\141\141\x34\143\x64\61\x32\64\x63\66\x65\x36\66\145\60\x62\x30\x61\x63\x61\67\x39\x36\x62\141\x36\x61\x65\x62\66\71\xa\x20\x20\x20\40\x20\x20\40\40\40\x20\x20\x20\40\x20\40\40\x66\70\x65\x37\x36\x61\71\144\x31\x61\141\x61\x62\145\63\65\61\x62\143\64\x32\146\x65\x66\141\66\x30\65\64\71\67\x37\x38\x35\x39\142\65\61\x31\x35\70\142\141\67\61\64\63\71\x38\60\144\x37\x36\x64\x62\65\x62\x32\143\143\x36\141\145\x63\12\x20\40\40\x20\40\40\40\40\x20\40\40\40\x20\40\40\40\71\x66\x38\x33\x65\141\143\65\145\144\x66\x37\x39\x33\65\x37\66\63\x32\146\142\66\60\x63\x62\x34\x38\x31\61\145\67\61\x38\71\62\x34\x33\x36\145\x35\x38\x32\x33\67\65\x38\x36\x30\x66\x61\x66\70\144\70\143\x35\61\70\145\145\x33\x33\143\141\xa\x20\x20\x20\40\40\40\40\x20\40\40\40\40\x20\x20\x20\x20\145\60\x38\x62\x31\70\141\x66\x37\x66\141\141\62\x32\67\144\x39\x37\61\71\x36\x64\67\142\60\x34\61\x62\143\x62\x33\66\66\x31\x31\x38\67\65\x31\x66\142\145\x61\141\x39\x32\x64\70\60\x66\70\x36\63\62\64\x63\145\x38\x37\61\x31\x63\x66\144\xa\40\40\40\x20\x20\40\40\40\40\40\x20\x20\x20\x20\40\40\66\x35\60\60\65\x63\x61\x64\x30\x63\145\63\x30\x38\x37\x38\x66\x35\60\70\x65\142\x31\145\x61\62\67\63\x35\145\x32\x31\62\145\x66\63\x65\64\62\141\67\x38\64\x36\67\144\x34\x66\x33\x31\x62\64\x38\63\x30\x38\x37\143\x33\143\66\63\141\x33\xa\40\40\x20\40\40\40\40\40\x20\40\40\x20\40\x20\x20\40\62\146\141\x36\x32\x66\62\x61\x65\71\62\x65\x32\x61\x63\144\x66\x63\x33\143\146\x32\x31\x62\63\x34\x31\71\141\143\x63\63\x34\x37\x66\x66\x35\61\143\x63\x62\x31\x37\61\66\x31\145\x38\62\x39\143\143\64\141\x32\x34\x39\x36\65\146\x64\x39\63\x30\xa\x20\x20\40\x20\40\40\40\x20\40\x20\x20\40\40\x20\40\40\x62\x39\70\63\x64\66\x33\61\65\x33\x62\71\x63\x31\63\144\144\x38\65\63\x34\x30\144\67\61\70\x34\x62\x66\x30\61\x37\63\x34\144\64\63\65\67\143\61\x61\141\142\146\142\144\143\71\x37\x31\61\61\71\63\x66\146\141\71\67\x34\70\x33\62\12\x20\x20\x20\40\x20\x20\40\40\x20\40\x20\x20\40\x20\40\x20\x34\x66\70\70\143\146\x38\60\x31\146\x33\65\x37\x30\70\144\x62\x30\x39\60\61\x66\146\141\141\65\65\64\61\x35\x63\141\64\63\x33\x34\66\67\70\66\x33\63\144\144\x61\67\x36\x33\142\65\146\x62\146\142\x61\67\143\x66\x64\x35\x31\144\x63\x35\12\40\x20\40\40\x20\x20\x20\40\x20\x20\x20\40\x20\x20\x20\40\67\x39\x31\x34\71\x65\x63\71\x32\70\x34\141\64\144\142\62\x33\x34\x39\x64\x62\143\x35\x32\66\x34\x64\x35\146\143\141\67\141\67\x32\x30\63\x34\62\x36\61\x37\61\x36\x64\71\60\141\71\71\66\x63\142\65\x37\x62\141\x30\x39\x66\x37\144\60\67\xa\40\x20\40\40\x20\40\x20\40\x20\40\x20\x20\x20\40\x20\40\62\x39\141\x32\x66\61\x30\143\x63\x35\70\x65\x65\x63\x39\x38\x64\70\x36\145\x39\63\60\66\x61\63\146\x62\x66\62\x65\67\61\x31\x30\x34\x36\x65\70\x36\x62\65\141\x38\x36\143\143\60\145\145\144\67\x36\62\65\x62\x65\x31\141\x30\61\145\142\x66", "\x30\143\65\x31\x36\64\x65\141\144\x37\x66\x34\x38\x63\x35\144\71\x35\146\x35\x39\60\x37\63\71\71\x63\61\x34\x36\141\x32\66\x31\x33\x35\63\64\x36\62\x33\x32\63\x37\63\64\63\62\x33\x37\63\70\66\x35\x36\x32\x33\x31\x33\62\x33\61\x36\x34\xa\40\x20\x20\40\x20\40\x20\x20\x20\x20\40\40\40\40\x20\40\x33\x39\x36\x32\x33\x33\63\x31\x36\66\63\x37\63\60\66\62\x33\x37\63\67\x33\64\x36\x33\x36\x36\x33\60\x36\x32\x33\71\x33\x32\x36\61\x36\x36\63\70\x36\62\66\62\63\x36\x33\x39\x33\x33\x33\x39\63\x36\63\70\66\x31\66\64\x36\63\x36\x36\xa\x20\x20\x20\x20\40\x20\x20\40\x20\x20\x20\x20\40\x20\x20\x20\63\x35\x36\x34\63\x39\x33\63\63\71\63\x35\x33\x37\63\x30\x33\x33\x33\x31\x33\x34\x33\x34\63\66\x33\60\63\63\63\60\141\71\x32\67\143\x37\141\x38\x37\x39\x32\67\62\x66\x38\x31\x65\61\60\63\x32\x64\x35\x37\65\63\x30\x62\65\x65\66\x39\12\40\40\x20\x20\40\40\x20\40\x20\40\40\40\x20\x20\x20\x20\x36\x30\x66\67\x30\145\x31\x34\x62\67\x36\60\67\x65\70\x65\61\67\65\x38\x33\x61\141\70\x31\x39\x37\x66\x35\x34\x37\145\63\67\x35\145\60\67\x62\67\141\71\144\x36\143\x31\x31\142\x65\x34\60\x36\x66\65\145\x30\x31\141\141\x63\x35\x39\145\x32\12\x20\x20\x20\x20\x20\40\x20\40\x20\x20\x20\x20\x20\40\40\x20\x37\x65\x35\x34\x62\x62\63\x63\63\x33\x36\66\x32\145\x61\62\71\x34\x63\x66\142\x64\60\145\x37\x62\142\x38\x65\65\145\x62\70\x38\x36\145\144\145\x65\63\64\61\x35\x30\x39\141\67\x35\x32\146\x63\63\x62\x39\67\x30\x36\x38\60\67\x61\71\64\70\xa\x20\40\40\x20\40\40\40\x20\40\40\40\40\x20\x20\40\40\x30\60\x65\x64\144\60\142\146\x66\70\145\x36\x32\64\x32\x37\65\x34\x32\60\x62\x66\x66\x35\60\71\71\x35\x64\x65\x37\x30\144\x32\x36\x39\x32\141\x30\65\62\145\61\67\61\60\141\x30\142\71\61\x33\65\146\x39\x66\64\x34\x61\142\143\142\x30\62\12\x20\40\40\40\x20\40\40\40\40\40\40\40\40\40\40\x20\x32\x34\x61\61\70\71\146\x31\x62\142\64\61\64\x65\x34\144\x37\x33\146\142\65\x33\71\67\62\x38\x64\x34\x30\x62\x34\67\x65\x62\143\63\64\146\x64\142\x35\145\x63\x32\x66\x61\66\61\70\x34\70\142\x62\x38\62\x38\144\145\65\x31\x37\71\141\x31\12\x20\40\x20\x20\x20\40\x20\x20\x20\x20\x20\40\x20\x20\40\40\x65\x37\71\71\145\142\60\71\63\x36\67\142\x64\141\71\142\65\71\x62\63\142\144\143\65\61\144\x33\146\x39\x32\x63\x31\x62\x64\67\144\x61\143\146\67\x35\x31\142\71\63\x32\x34\60\65\71\x38\x36\x39\142\146\66\141\144\x63\63\x64\x38\x38\x64\xa\40\40\x20\x20\40\40\x20\x20\x20\40\40\40\40\40\40\x20\62\x32\x36\x61\x31\x35\x33\141\67\65\143\141\145\x31\141\62\64\62\x36\x65\x61\61\70\x37\145\x66\66\x32\x63\x39\67\x62\x62\x64\63\65\145\x39\x37\x34\65\60\x64\x61\x38\67\x64\x34\x64\141\71\141\x65\144\x30\x38\145\142\x66\63\x30\141\63\143\12\x20\40\x20\40\40\x20\x20\x20\x20\40\x20\40\40\40\40\40\x61\x33\x33\66\71\x63\x63\66\65\141\61\67\141\143\x65\142\x62\70\141\x36\x66\x66\70\146\x66\x36\x39\x38\67\64\63\141\x33\x37\70\62\71\71\x30\142\143\65\x65\70\x63\144\x30\63\141\66\x38\70\62\x63\60\146\x37\x63\x35\x30\70\66\x38\x63\xa\x20\40\40\40\40\x20\40\x20\40\40\40\40\40\40\x20\x20\x36\x62\x33\143\x65\71\x36\x37\143\71\145\x61\x33\61\x37\x35\x35\65\145\x62\71\67\x32\145\x39\x62\x62\x37\x62\145\142\x37\x62\63\x32\x31\x35\61\66\60\x61\60\x62\x63\x63\x61\x38\143\x37\x66\71\x32\141\60\x38\65\142\145\143\141\x32\x35\x36\145\12\40\x20\x20\x20\40\40\40\x20\40\x20\40\40\x20\x20\x20\x20\64\64\x38\x34\x62\x31\143\144\x63\141\x65\x65\64\71\65\x39\x31\67\x64\x38\x61\x61\x34\x64\142\x66\67\x36\x37\65\70\x30\x36\x66\x37\146\x35\x37\x65\x37\x37\x61\67\67\60\x65\141\67\144\x62\x36\x65\60\x38\x30\61\65\60\142\x34\x33\x66\65\x36\12\40\x20\x20\x20\40\40\x20\x20\x20\40\x20\40\x20\40\x20\40\61\x35\67\60\x39\x62\x33\x37\61\x61\63\x30\63\145\70\71\x62\60\63\62\x65\141\143\67\x66\145\x63\63\145\x65\x39\x35\x34\x65\141\x35\62\71\x34\60\x61\62\145\x35\71\63\x34\63\x66\144\60\146\x64\65\71\141\143\62\x64\64\x66\x30\x39\65\xa\x20\x20\40\x20\40\x20\40\x20\x20\x20\40\x20\40\x20\40\x20\67\64\144\62\70\x36\x33\145\145\x64\61\63\67\67\64\143\x36\63\141\x39\64\x65\x38\x37\146\67\x63\x63\144\x62\146\60\x37\64\x31\141\65\x36\x30\67\64\141\67\62\61\60\x65\x32\146\x30\62\62\x38\x30\x39\x63\x61\64\x38\66\x33\x37\144\70\12\x20\x20\x20\x20\x20\x20\40\40\40\40\40\40\x20\40\x20\40\x30\x35\67\x64\x38\60\x66\142\61\71\60\146\x33\63\x39\144\x64\145\x65\x32\x62\x36\146\x37\141\141\x65\146\63\146\x32\143\61\70\x34\x38\60\62\66\142\144\63\x33\x65\x33\67\x37\x61\x63\x35\65\x34\x65\x32\142\62\x39\144\145\x64\x65\x34\x66\x63\12\40\x20\40\x20\40\40\x20\40\x20\x20\40\40\40\x20\x20\x20\x31\61\x65\x30\64\x30\x62\x33\70\63\67\143\62\x34\x65\66\143\x64\x39\63\64\63\60\x63\62\x66\71\x63\x31\71\x31\63\x38\143\x64\x31\142\65\x30\65\66\x38\61\x39\65\70\x61\60\x39\146\x32\x32\x33\146\x36\x35\145\x36\x64\x37\x62\x31\62\63\12\x20\40\40\40\40\40\x20\x20\x20\x20\40\40\x20\x20\40\x20\x34\x33\x65\x34\62\66\x65\62\x30\64\145\145\63\x32\x34\x31\x31\x62\61\65\71\x30\61\63\x33\x64\65\x38\146\x62\x63\x34\70\60\x36\146\x66\x37\70\x34\144\x62\71\x33\143\x64\x30\62\x30\65\x61\x37\x62\64\x61\61\146\x34\142\71\x36\145\x65\64\xa\40\40\x20\40\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\x20\x20\60\x32\x62\60\x36\x61\143\60\x30\x35\62\60\61\x31\x38\x63\x38\71\141\67\x63\64\x66\x31\x64\x66\142\x34\141\143\71\64\61\x61\63\x64\66\x66\70\x33\x39\x65\x39\x33\x31\x32\x65\x65\x38\x63\x64\71\143\63\143\x30\62\x65\x66\x35\x63\146\x32\141\12\x20\40\40\40\40\x20\40\x20\x20\40\x20\40\40\40\x20\40\62\x39\144\x32\x36\x36\x66\143\146\x64\x32\71\x63\62\x34\142\x39\x39\x34\x62\143\x64\x33\x63\66\x37\60\x30\x30\x39\71\71\64\70\x36\x62\141\x64\x36\142\x30\66\x30\146\70\67\x64\x35\x63\70\64\x33\146\63\x66\x31\x33\62\142\x65\65\x61\x37\143\xa\40\x20\x20\x20\x20\40\40\x20\x20\40\x20\40\40\40\x20\x20\x36\x61\x62\62\141\141\x62\x32\60\x39\x31\x61\70\x33\x66\60\66\x37\x33\145\146\x63\64\142\146\x36\x35\70\x65\66\x63\x31\x38\x31\143\x38\60\60\141\62\145\x61\142\x35\x32\67\62\143\x39\143\x63\70\x65\x39\142\x64\x63\x66\64\x65\145\60\66\x31\12\x20\x20\x20\40\x20\40\40\40\40\40\40\x20\40\40\x20\40\x64\145\x36\x31\63\71\x38\71\146\61\60\67\146\61\x37\x35\65\63\70\x35\66\71\x37\141\144\x36\64\143\x64\x31\x63\x36\61\x33\146\x31\x66\67\x34\62\x61\71\x38\60\x63\64\70\145\62\67\x36\x33\x38\142\x38\x34\x32\63\142\x38\x32\145\142\x61\12\x20\40\40\40\40\40\40\x20\x20\x20\x20\x20\40\x20\40\40\65\x35\65\143\65\x39\x30\62\60\x65\145\x35\x37\71\x34\60\x39\x39\63\67\67\145\x38\x31\66\x65\x38\71\70\x33\x61\x37\65\x37\x39\x66\143\x39\67\61\x37\70\x65\x35\x61\x63\60\x66\x39\70\x62\144\144\141\x36\x64\142\146\x33\x66\63\70\x66\x31\xa\x20\40\x20\x20\x20\x20\40\40\40\x20\40\x20\x20\40\x20\40\x33\146\x38\x62\62\x64\61\x32\143\x63\67\71\x32\145\67\62\71\64\66\70\x61\70\64\60\x38\64\x38\62\71\70\x35\x61\143\67\63\x65\70\x33\x31\x61\66\143\x61\65\x66\66\x37\61\67\66\146\x36\70\x62\x66\62\61\66\142\67\x37\61\64\x37\12\x20\x20\x20\40\40\40\x20\40\x20\40\40\40\40\40\40\x20\x66\145\64\x37\x34\63\x61\145\x36\60\146\x36\x32\70\144\145\x66\141\65\71\60\x62\60\x62\60\142\67\x64\70\x63\63\x39\x64\x32\64\145\x66\x36\x39\70\x30\146\146\x63\x30\143\64\x37\70\x38\x32\x66\141\60\x65\x33\146\60\64\145\144\x33\145\65\12\40\40\40\40\x20\x20\x20\x20\x20\x20\40\40\x20\x20\40\40\66\x64\70\x36\65\x34\x65\61\x31\141\x30\x66\x32\65\x61\x32\142\x33\x64\144\60\x33\145\71\x30\x30\x65\63\x64\x35\71\71\x32\x32\146\141\67\x63\x63\144\65\x34\x34\146\x39\x38\141\x30\x34\70\x32\70\x61\x33\x34\x38\x32\x36\x66\144\x39\142\146\145\12\x20\x20\40\40\x20\40\x20\40\40\x20\x20\x20\40\x20\x20\40\x65\x38\143\70\x34\x31\x63\x61\66\x31\x34\66\143\143\71\x36\x34\x34\x33\x61\x62\x32\143\x62\x65\x64\x33\x66\70\64\66\146\x35\x32\x34\x31\144\62\x37\x62\x31\x35\146\x38\x31\144\146\70\x30\x65\x32\142\x33\x35\62\x31\71\x30\x34\x34\x65\x39\x33\63\12\x20\x20\x20\x20\40\x20\40\40\x20\40\40\x20\40\x20\x20\40\64\71\x36\67\x33\x33\64\x35\x32\71\146\145\71\x34\71\x36\60\x34\x61\x31\x39\146\x37\x63\x61\x64\x37\x36\x38\x34\x32\x61\61\66\71\x32\x38\x30\66\x36\141\60\x31\x66\142\71\145\x63\67\65\x30\145\67\70\141\x65\66\70\x64\144\143\142\x34\x66\12\x20\40\40\x20\40\40\x20\x20\40\x20\x20\40\x20\x20\x20\40\x38\63\63\142\x35\145\70\71\63\x37\x37\145\x61\x33\x31\143\x37\x63\70\x37\66\66\x36\143\63\x30\60\x66\63\x36\146\67\65\x38\63\x33\70\x33\x66\67\x38\63\146\x39\x37\71\143\x65\144\x62\x64\x30\65\65\x38\x35\143\65\x30\x63\x61\141\x64\145\xa\x20\x20\x20\40\40\x20\40\x20\40\x20\x20\x20\40\40\40\40\x37\63\146\x39\x66\x33\70\x64\146\143\143\x35\146\x39\x31\x35\61\x30\x36\65\67\63\x36\x39\64\x63\145\64\71\x37\x61\x30\67\x38\67\x63\145\63\146\145\x63\146\x39\66\x37\70\141\x37\x35\x62\x36\x32\146\x32\65\x38\141\145\x61\63\60\60\x65\70\12\40\x20\x20\x20\40\40\x20\x20\x20\x20\x20\x20\40\x20\40\40\62\61\x37\x36\145\x35\143\x35\61\x30\60\71\145\x61\x31\x66\142\144\146\x32\x36\66\x36\x30\66\143\146\142\x39\x33\143\x63\66\62\x66\71\141\x62\144\x36\x63\x30\65\66\66\62\65\x64\146\60\65\63\144\x61\x38\x64\x39\x65\x31\x37\65\x64\x36\x33\12\x20\40\x20\40\x20\x20\40\x20\x20\40\40\x20\40\40\x20\40\143\x61\67\x31\x36\x66\61\x34\x38\x33\x36\x35\x61\64\x31\x37\71\x36\x38\x38\x39\x65\x36\x64\x32\x34\x65\x36\143\x39\141\x36\x65\x65\x36\x61\x63\65\67\142\146\x37\x63\63\65\x62\x34\x35\144\x34\60\60\60\x65\x63\66\x33\x38\144\x31\71\61\x65\65\12\40\40\x20\40\40\40\40\x20\x20\40\40\40\40\x20\40\40\x35\x34\x66\x65\66\142\x30\63\61\146\x38\67\x62\70\62\146\66\60\67\66\x65\71\x36\x37\62\x66\67\61\x36\62\144\x65\x31\x64\141\x66\x65\144\142\x39\x66\145\x64\71\144\63\x38\x61\144\145\142\71\71\x39\143\67\146\143\64\x36\x66\x38\x30\61\12\x20\40\x20\40\40\40\x20\x20\40\x20\x20\40\x20\40\x20\x20\143\x64\x35\x34\66\x33\x34\62\x34\60\64\x33\x31\65\142\60\66\146\x61\146\x66\65\x31\x64\65\64\71\x62\x32\x65\x62\71\x34\63\71\60\x64\64\x30\141\x39\x61\x64\x38\x32\x36\143\x31\65\71\65\x61\144\144\x33\x66\61\x31\141\x66\x62\x39\60\71\12\x20\x20\x20\x20\40\40\x20\40\x20\x20\x20\40\40\x20\x20\x20\61\x36\x64\x63\x32\x30\61\67\63\146\61\63\60\x31\60\x30\60\70\142\143\61\62\141\66\63\65\65\144\x35\x38\x32\62\x30\65\70\71\67\145\x37\145\x62\70\x38\65\x66\65\x32\66\x61\x30\70\142\x65\x65\60\x37\x32\x64\141\142\x62\142\x31\65\12\40\40\40\40\x20\40\x20\x20\x20\40\x20\x20\40\x20\x20\x20\63\x62\x31\x37\67\67\x64\x38\x65\x37\144\x39\66\142\63\x31\x64\x62\70\142\x36\64\144\x36\64\x34\x30\x34\141\x65\x38\x32\142\63\x35\x30\x36\x66\x31\60\x65\146\61\x39\70\x66\141\x64\x36\x33\x32\x31\141\141\x38\x63\x66\60\x34\x62\x35\146\x35\x34\xa\40\x20\x20\x20\40\x20\x20\40\x20\40\40\40\40\x20\x20\40\x64\65\62\63\66\60\61\64\x64\64\142\65\x63\x65\62\x30\146\x62\x66\142\x61\x37\67\146\x30\x39\x30\144\x33\x35\x37\x33")); $openssl = array(array("\63\x44\x5a\163\126\110\x34\147\x74\x35\170\x42\x75\145\x68\x6f", "\63\60", "\145\61\71\x65\144\x63\63\67\144\62\70\64\x62\x37\x37\x61\x35\x61\x34\66\x30\60\63\63\x34\x62\x36\x37\63\61\67\66\66\x32\63\x39\x33\62\x36\x36\x33\62\x33\x34\x33\x34\x33\71\63\60\63\x38\66\x36\66\63\x33\60\66\x35\x33\60\x33\x31\12\40\x20\40\40\x20\40\40\40\x20\40\x20\40\40\40\x20\40\63\67\63\x30\63\x31\63\66\66\x34\66\64\66\x31\63\x37\66\x36\63\x38\x33\x30\x36\x32\x36\63\66\66\x33\x38\63\63\66\63\x33\x33\x36\x32\x33\71\63\x31\x33\66\66\x34\x33\63\66\x36\x33\x37\x36\x35\63\x31\63\x33\x33\61\x33\x39\x33\63\12\x20\x20\x20\x20\40\40\40\x20\x20\x20\40\x20\40\x20\40\40\63\x30\x36\x31\x33\x33\x36\61\x33\70\x33\66\x33\x36\63\65\x36\x33\66\64\63\x35\x33\70\x33\71\66\61\x36\x33\66\64\62\x62\66\x63\x31\x32\146\62\x30\x65\67\x65\61\x61\145\x39\67\64\x32\x32\x65\x65\x36\x35\x39\71\61\64\x63\x63\65\x37\12\40\40\40\40\x20\x20\40\x20\40\40\40\40\x20\40\40\40\x65\x39\x39\143\67\143\x39\67\143\67\x61\64\x39\65\x37\145\x37\x38\141\142\71\x35\67\x62\61\70\142\x65\x34\x35\x35\61"), array("\103\126\x41\114\x79\x55\x70\x44\x64\115\x4f\123\x61\x78\112\x4e", "\x33\60\63\x31\63\x32\x33\63\63\64\x33\x35\63\66\x33\67\63\x38\63\x39", "\x61\62\x35\63\65\67\71\67\141\143\60\143\70\x33\71\x33\62\x66\144\71\141\x32\142\x38\x64\x36\x62\62\66\60\62\x36\66\x32\66\x36\x33\64\63\71\66\62\63\63\x33\67\66\x31\66\66\x33\61\x36\62\x33\x34\x33\x34\x33\x33\x33\x32\63\x33\12\40\40\x20\40\x20\x20\40\40\x20\40\x20\40\x20\40\x20\x20\x33\x30\63\x33\x33\x34\63\x34\x33\71\63\x31\63\x30\66\x33\66\x35\x36\x31\x36\62\x33\x37\x33\x32\63\61\x36\x36\x36\x33\x33\x30\63\63\x33\62\66\x31\x33\x38\x33\x35\66\61\x33\65\x36\66\63\x32\x33\71\x33\71\x33\x32\63\70\x36\64\66\x32\12\40\40\x20\40\x20\x20\40\x20\x20\40\x20\40\x20\x20\x20\40\x33\66\x33\x31\x36\x36\66\x33\66\x34\x33\61\x33\x32\63\66\63\x30\x33\71\x36\62\63\x37\x33\66\63\x36\63\x31\66\62\x39\66\x39\x33\x30\x38\x32\x38\145\x30\x65\x31\x35\x34\x61\x30\x65\x38\144\x32\x36\x32\x38\64\66\x38\x33\65\x66\x32\x34\x32\xa\x20\x20\40\x20\40\40\x20\40\x20\40\40\40\40\x20\40\x20\145\x34\x32\x64\145\x38\x36\61\143\142\141\x38\61\144\146\x36\x39\146\145\x36\146\x65\65\x61\65\x39\67\x30\146\x64\x66\67"), array("\x77\102\x5a\143\102\x49\150\116\123\x46\x69\x61\103\127\105\70", "\63\60\x33\61\x33\62\x33\63\63\64\x33\65\x33\66\x33\x37\63\x38\63\x39\x36\61\x36\62\66\x33\x36\64\66\65", "\x64\67\x37\x62\x35\x64\63\63\64\144\x32\70\x32\x30\x62\x35\142\65\141\65\64\x63\x35\x66\67\x31\x66\x63\x65\62\x31\x31\x33\60\x33\x37\x33\x38\x33\62\x36\65\66\65\x36\61\x36\63\66\66\x36\61\66\x32\63\x35\66\64\63\x38\63\x37\66\x36\xa\40\x20\40\40\x20\40\40\x20\40\40\x20\x20\x20\x20\x20\x20\66\x33\63\70\x33\64\x33\x36\x33\x36\66\x32\x36\x36\x36\62\x33\64\x36\x35\66\x36\x36\x32\x33\x30\x33\65\x33\x33\x33\64\66\61\x36\65\x33\65\66\66\x33\x35\x33\x33\66\66\x36\x35\66\64\63\x38\x33\x30\63\60\66\x33\x33\x37\x36\x35\x36\x31\xa\40\x20\x20\40\x20\40\40\40\40\40\40\x20\40\x20\x20\40\x33\62\66\x34\x33\x30\x33\x33\63\x34\x33\x31\x36\66\63\67\x36\61\x36\62\63\x37\x36\63\x33\x33\63\67\63\x31\x36\x36\143\x36\x63\x66\70\x32\x38\142\66\70\146\146\x39\64\x30\145\70\144\x65\71\67\67\x65\63\x34\x37\61\x64\x31\144\65\x31\xa\40\x20\x20\x20\40\x20\40\x20\x20\40\40\40\40\x20\x20\x20\62\x65\65\x31\x62\x61\142\67\145\x65\x30\x66\x39\x37\x36\144\144\x36\144\70\67\67\62\67\x62\65\60\70\146\x37\x63\x66"), array("\x50\x59\145\x41\150\x4b\65\x6e\127\x50\111\x78\x47\104\62\x46", "\63\60\x33\x31\x33\62\63\x33\63\x34\x33\65\x33\66\x33\67\x33\x38\x33\x39\x36\61\66\x32\x36\x33\66\64\x36\x35\x36\x36", "\60\143\x32\142\x33\x35\x63\x32\66\x37\71\64\143\x35\x35\142\71\64\62\62\70\x61\146\x39\70\x62\x61\x37\x33\67\x38\61\x33\63\63\62\66\x33\x36\61\x33\65\x33\x38\63\65\63\x32\63\x31\63\x30\x33\x36\x33\67\63\60\63\63\63\60\63\x39\12\x20\40\40\40\x20\40\40\x20\x20\40\x20\40\40\x20\x20\40\x33\65\63\x31\x33\64\63\x34\66\63\66\x35\x33\67\66\63\66\66\63\63\66\x36\63\x38\66\64\66\62\x33\x36\63\x37\x33\x33\x36\66\x36\x35\63\x37\66\x34\66\x34\66\66\63\62\66\63\63\71\63\60\x33\x34\x33\71\x33\x37\63\67\x33\x30\12\40\x20\x20\x20\x20\x20\x20\40\x20\x20\x20\40\x20\x20\40\40\66\64\x33\64\63\x30\63\70\63\x31\63\x32\63\x34\x33\x39\x33\x32\63\x32\63\x31\x33\x33\x36\62\66\65\x33\x36\x33\x39\x64\x62\145\143\x34\144\x39\141\x62\x62\x32\144\x63\x66\x66\x62\146\x31\x38\66\63\x36\x36\x34\67\x36\144\146\x33\x34\144\x32\12\x20\40\x20\40\40\40\40\40\x20\x20\40\40\40\40\40\40\x35\60\60\x37\x34\64\x66\144\x32\x37\145\144\x61\x31\x65\60\x65\141\60\x65\x35\x34\62\70\x30\142\x30\x39\61\144\x33\62\145\142\144\x31\145\67\x38\x36\x34\60\x32\65\x30\x37\143\x62\x33\143\65\71\61\65\60\x33\145\x32\x37\146\61\x39\65\142"), array("\102\x39\165\x38\x54\x6c\x39\x74\x52\x42\147\155\x6e\123\x48\153", "\x33\60\x33\61\63\62\x33\63\x33\x34\63\x35\x33\66\63\x37\x33\70\x33\x39\66\x31\x36\x32\66\63\66\64\x36\x35\66\66\x33\60", "\x38\64\x30\x31\x64\x34\x35\144\x62\x63\x65\66\71\70\143\146\x39\x33\x34\62\x31\65\62\143\x37\65\143\144\70\146\65\x31\66\x34\63\65\x36\x32\x33\61\x36\64\63\x35\63\64\66\x34\63\65\x36\61\66\64\66\x36\63\x36\63\x31\x36\x34\x36\62\12\x20\40\40\x20\x20\40\x20\x20\40\x20\x20\40\x20\40\40\x20\x36\63\63\61\63\x37\63\62\x36\65\x36\62\63\70\x33\61\x33\x37\x33\61\66\x35\x33\x36\63\x33\x33\x36\x36\61\66\x31\66\x35\63\64\63\x34\63\x32\63\70\x33\x31\x36\x31\66\x33\63\71\66\62\x36\x34\x36\x33\63\63\63\67\x33\x39\63\62\12\x20\x20\x20\x20\40\40\x20\40\x20\40\40\40\40\40\40\x20\63\x31\63\71\x33\x32\x33\60\x33\x34\63\x39\63\x36\x36\65\63\60\63\x38\66\x33\x33\65\66\63\63\x31\x33\x36\x33\x37\64\63\x65\65\x38\67\x33\x64\63\x38\67\65\70\x34\70\71\142\x39\144\x35\70\60\60\141\x61\x62\x66\63\x31\146\x33\145\12\x20\x20\x20\x20\x20\x20\40\x20\40\40\40\x20\40\x20\40\x20\x63\x66\63\x36\145\61\145\x34\67\x39\65\x35\146\x35\143\x39\66\x61\x63\x64\146\70\x64\x63\66\143\x63\x37\x32\70\60\x63\x38\x32\x35\x39\64\x39\x64\64\x36\65\64\66\x37\71\66\145\143\x35\141\x31\61\64\x39\x38\x35\x66\65\x66\145\x35\x39\x38"), array("\x63\114\x48\130\x35\102\x76\126\x51\143\x64\154\157\172\123\x36", "\x34\145\61\x36\x31\x61\x31\x64\146\x36", "\145\60\64\141\145\144\x31\144\143\x33\x38\x35\67\70\x38\143\x33\143\67\x37\x37\x62\x63\x37\142\x33\143\x66\x61\62\60\143\x33\x32\x36\x35\66\66\x33\63\63\66\x33\x37\63\60\x33\71\63\x33\x36\x33\x33\66\66\61\x33\70\x36\x34\63\70\63\x31\xa\x20\40\x20\40\40\x20\40\x20\x20\x20\x20\40\40\x20\40\40\x33\70\66\66\x33\x30\x33\63\63\x30\x36\x31\63\64\x36\61\x36\66\66\x36\x36\x34\x36\x32\x33\x30\63\x39\x33\x32\x36\64\x33\x37\x36\x32\x33\67\x33\x39\x36\x31\63\62\x33\66\63\63\63\65\x36\x36\x33\x35\x33\x37\x36\x32\63\x33\x33\64\x36\61\12\40\40\x20\x20\40\x20\40\40\x20\x20\x20\x20\x20\40\x20\x20\x33\x34\x36\65\x33\x31\63\x32\x33\x36\66\x31\x36\63\66\x35\x33\x30\63\x31\63\x30\63\x31\x33\x34\x33\x35\63\61\66\x31\x65\x65\146\x65\x62\145\141\x64\70\x64\61\71\60\x65\x38\x35\64\143\60\65\146\65\x39\70\x61\x64\146\142\70\144\67\142\xa\x20\40\40\40\40\40\x20\x20\40\x20\x20\x20\x20\40\x20\40\145\x66\63\x30\x63\70\x36\x63\67\x63\x63\x37\x30\x30\63\x66\x32\66\x31\x62\70\143\145\62\66\x63\66\x32\x64\x61\x35\65"), array("\162\x38\105\x5a\115\145\x42\126\145\170\x2d\x4c\103\63\x63\x35", "\65\70\x36\62\64\x34\67\60\67\64\66\63\x34\x39\65\62\63\65\67\67\x36\x31\x37\x36\64\62\x35\x33\67\x33\63\144", "\141\x65\60\x33\145\x65\65\70\67\x65\x37\x64\x66\66\x34\x30\x37\x61\x31\67\144\64\63\x65\63\x33\x38\x31\x62\67\66\65\66\x33\x36\x31\x36\x33\66\66\66\63\63\x31\66\x35\66\x31\x33\x34\66\63\x33\x38\63\60\x36\x33\63\x35\63\x39\63\60\12\40\40\x20\40\40\40\40\40\40\40\x20\x20\x20\x20\40\40\x36\61\x36\x33\66\x31\63\67\x33\x36\x36\x35\66\x36\x33\x35\66\66\x33\62\63\64\66\x31\63\x32\x36\x33\x33\62\x33\70\x33\x33\63\71\x33\61\63\61\x33\66\x33\x36\x36\x31\63\63\x33\x37\63\67\63\x33\63\x31\x33\63\63\x35\x36\x33\66\x36\12\x20\40\x20\40\40\x20\x20\x20\40\x20\x20\40\40\x20\x20\x20\x33\x39\x36\x33\63\61\x33\x32\63\66\63\x35\x36\x36\x36\63\x33\x37\63\60\63\x35\63\62\63\x32\x36\x34\x36\62\63\x32\62\x34\x62\x34\x61\x61\61\65\x33\66\x61\70\144\x65\x62\x61\61\144\x66\x61\x30\x32\66\145\146\x61\x36\x31\64\x66\x62\71\12\x20\40\40\x20\40\40\40\x20\40\40\40\40\x20\40\x20\x20\x34\x39\61\65\67\66\x33\141\x32\66\x32\x39\x61\x30\x30\146\145\65\146\x66\70\x66\61\141\x66\143\x38\x39\x34\x66\x31\142\x36\x34\64\146\71\142\60\70\145\142\143\67\x62\141\x65\146\143\x30\66\62\62\71\146\x31\67\67\x62\x35\145\x34\x34\66"), array("\124\122\x53\65\x47\x76\154\121\62\127\x43\157\x45\x7a\110\131", "\70\62\x63\x32\146\63\61\65\x63\66\x39\x66\62\60\x65\143\x37\141\x65\63\x39\x31\x66\x63\66\x63\62\144\x65\x38\x35\x32\70\x31\144\x35\64\143\71\x37\x66\67\64\x39\70\x31\x62\x34\x65\x66\145\x63\60\x66\65\x65\64\x36\60\66\x37\x36\x35\x63\xa\40\40\x20\40\x20\x20\x20\x20\40\x20\40\x20\40\x20\40\40\60\x34\60\146\x31\146\x34\65\63\x38\x36\x62\x65\144\x34\146\144\x62\x39\146\x39\71\x38\142\60\x65\67\x30\62\x37\143\67\64\x31\64\x62\145\x61\66\66\x37\142\61\62\x30\x35\x30\62\67\143\x35\x35\x65\145\144\71\62\x37\63\66\64\x34\64\66\xa\40\40\40\x20\40\40\40\x20\40\40\40\x20\40\40\x20\x20\63\x62\61\x38\x33\62\x62\x63\65\x33\x33\70\x65\x33\141\67\x65\x31\60\142\x66\62\x34\x64\70\x65\66\x39\146\61\x36\x37\142\71\x34\x35\65\61\x62\x36\62\64\x30\x66\66\x35\x62\x34\61\x36\146\145\145\142\144\x32\x38\65\71\x39\x33\63\x34\x61\12\40\x20\x20\40\x20\40\x20\40\40\x20\40\x20\40\x20\40\40\141\x34", "\x66\x30\x35\66\61\61\145\60\x32\141\x32\x63\143\x63\x62\x66\x65\x61\64\66\x37\71\145\x38\x31\x31\x30\x30\x38\67\x61\x30\66\61\x33\71\66\x33\x33\x32\x33\x30\x33\60\63\x30\63\71\66\65\66\x32\66\66\63\x37\63\62\66\62\66\x31\63\70\xa\40\x20\40\x20\x20\x20\x20\x20\x20\40\40\x20\40\x20\40\40\x33\x35\63\x30\x33\x36\x33\65\x33\64\x33\x31\63\63\66\62\63\67\x33\x37\x33\61\63\61\x36\x33\x33\x30\63\x36\x33\71\x36\64\63\71\63\x35\66\64\x36\65\63\70\63\x31\66\63\x36\x35\66\x36\x36\64\x36\x32\66\61\63\66\63\62\x36\65\xa\40\40\40\x20\40\40\40\x20\40\40\x20\x20\40\x20\40\x20\63\70\x33\62\63\x35\x33\66\x33\x36\x36\x36\66\x36\66\x33\63\x34\63\x38\x33\x39\x36\65\66\66\63\x32\63\x39\63\x39\x62\143\x65\63\x30\x39\146\65\x33\65\146\x63\x61\x33\144\61\146\x62\62\x33\x65\70\x35\60\63\x66\x38\x63\146\x33\x62\x38\12\40\40\40\x20\x20\40\x20\40\x20\x20\x20\x20\40\40\40\x20\x62\143\141\x34\143\64\x62\143\x66\x62\64\x30\62\x31\65\71\62\62\x36\x38\x66\70\70\60\x37\60\x62\x35\62\x30\x33\x66\x35\x30\62\63\x61\x36\x61\63\x39\60\63\x34\x65\63\64\60\64\x38\x62\x63\x39\x34\x34\x63\62\x32\x65\60\63\67\x66\144\12\x20\40\40\x20\x20\x20\x20\x20\x20\40\40\x20\40\40\40\40\145\x36\x63\141\x38\143\x61\x31\x37\145\62\142\x64\143\x38\61\66\71\144\61\145\x37\61\x34\70\x33\60\x64\145\66\71\x33\62\x63\146\145\60\144\x63\144\x64\61\67\x32\x38\145\70\x62\x66\x38\x34\x38\x61\x36\x66\64\x66\67\61\65\x34\144\61\143\12\40\x20\x20\40\x20\x20\40\40\40\x20\x20\40\x20\x20\x20\40\x30\x66\x38\143\66\65\x30\x65\60\145\x66\66\x35\60\142\x61\x33\142\x39\60\63\x37\62\145\x62\x36\x64\x31\x33\x65\71\63\145\x33\143\x37\71\66\x31\60\62\71\x31\x61\x35\62\x33\141\x33\71\x36\67\141\x33\60\x34\x39\142\x30\64\146\61\x64\x34\12\x20\40\40\40\40\40\x20\x20\x20\x20\40\x20\40\40\40\40\x63\x38\71\x39\145\x31\65\x35\x34\x62\60\x34\146\71\60\x36\143\62\145\x36\x34\60\x38\x61\x31\66\x37\60\62\x64\61\71"), array("\170\x5f\141\x32\114\110\156\x79\161\x48\x38\127\x41\167\153\x5a", "\x62\x61\x64\x65\143\x30\143\x37\144\71\x63\141\x37\63\64\x65\61\x36\x31\141\x31\144\146\66\x63\141\x34\x64\141\x61\70\x63\144\x62\x66\x36\142\x33\x62\142\142\x36\x30\145\x63\64\60\x34\142\x34\67\x61\62\63\62\62\x36\x65\x63\62\66\66\x62\x31\12\40\x20\x20\40\40\x20\x20\40\40\40\40\40\40\40\40\x20\63\x38\63\x37\x66\x66\x63\71\x36\x39\x65\71\x63\62\x33\145\x32\142\x62\142\141\67\x32\146\x61\143\142\x34\x39\x31\141\66\141\x33\x32\67\61\x31\x39\x33\x61\63\x35\x30\62\66\141\x39\x65\142\x63\71\63\66\71\x38\x64\66\x38\x39\x62\x66\67\142\12\x20\x20\40\40\40\x20\40\40\x20\40\40\40\40\x20\40\40\70\x34\x66\x63\63\x38\64\x66\65\x34\64\143\143\x35\x64\x37\61\x63\62\71\64\x35\x63\70\143\x34\70\141\x65\66\63\x34\70\143\x37\65\x33\63\x32\x32\x66\143\141\x66\x37\x35\x31\67\x31\x62\x37\144\x38\146\61\145\61\x37\x38\x65\70\x35\64\65\xa\x20\40\x20\40\x20\40\x20\x20\40\40\40\x20\x20\40\x20\40\63\x64\x35\143\67\71\x66\x30\x33\142\x61\x65\66\x64\71\x37\x30\x35\x63\141\x62\x62\x65\67\x30\x30\64\145\143\70\61\145\x31\x38\x38\70\61\x32\141\x36\x36\x33\61\x33\62\71\67\146\143\146\x35\144\x34\x63\66\61\141\64\x38\x36\61\64\144\x32\12\x20\40\40\40\x20\x20\x20\40\x20\x20\x20\x20\40\40\x20\x20\x31\x62\x35\63\67\x39\x66\x61\x65\66\x30\67\x33\x36\146\x38\70\x62\x63\x37\x33\67\62\65\67\142\x63\x31\x63\x66\x62\145\146\67\x30\x31\x36\x31\x30\70\x64\144\61\x66\63\x61\x35\63\x37\x61\x61\141\x36\x38\61\x35\64\x34\146\65\x62\142\62\60\12\40\40\x20\40\40\x20\40\40\x20\x20\x20\40\40\x20\40\40\143\x32\x64\x33\65\62\x32\x31\x32\x64\x36\x61\x32\145\64\x36\60\x33\x31\x31\141\142\x37\142\x39\63\x62\66\x31\x31\62\61\x38\142\x33\60\143\67\64\x30\62\67\x30\x39\x62\x66\146\x38\71\x65\x63\146\x38\61\64\63\x31\60\143\62\144\142\71\x37\12\40\x20\40\x20\40\x20\x20\40\40\x20\40\x20\40\40\40\x20\x38\x31\x66\x34\61\64\62\141\65\x34\x64\66\x64\x34\x31\x66\70\x32\x63\x33\63\62\60\70\143\x31\70\70\x61\x30\62\63\143\x37\x30\142\x65\x66\x64\66\x39\x37\x62\64\71\66\145\x66\x62\x37\143\67\142\70\x35\x36\71\x34\x37\x34\141\x39\x64\65\12\x20\40\x20\x20\40\40\40\x20\40\x20\40\x20\x20\40\x20\40\60\x32\x35\x61\70\x65\x61\70\63\x31\x31\x63\70\x33\x31\x62\x33\144\x65\62\x62\70\x31\x38\x30\60\x66\x32\70\65\x38\x39\142\x36\x61\145\x66\65\63\67\146\66\x61\x64\x61\x32\145\63\144\x39\x32\141\x31\144\144\x64\x33\71\x63\x66\x64\x36\x62\64\12\40\x20\x20\x20\x20\40\x20\x20\x20\x20\x20\x20\40\x20\40\40\70\61\61\x33\143\x38\x62\63\x36\x62\x65\70\x39\60\x62\x30\x39\71\143\141\x34\145\x30\70\x36\65\x35\x64\142\60\145\x39\x62\65\x63\x32\61\x31\x65\x37\x30\x36\x61\x66\60\65\62\142\67\67\66\71\x32\64\62\x33\63\x33\62\x31\64\x31\x32\x63\12\x20\x20\40\x20\40\x20\x20\40\40\x20\40\x20\x20\40\x20\40\142\61\x62\x35\x34\x30\x66\x30\x38\144\70\70\x61\143\144\x36\66\64\x63\65\x35\x38\65\64\142\60\x35\145\x33\61\141\x31\x35\144\x34\142\x30\144\x63\71\63\142\x34\65\61\64\x66\66\62\x61\x38\70\143\x33\144\x34\x61\x34\x35\x31\x66\145\63\64\xa\x20\x20\x20\x20\40\40\40\x20\x20\40\40\x20\x20\40\40\40\67\x34\x64\x32\146\142\x61\x65\x65\67\x34\x32\x66\62\63\62\x39\65\x39\x62\65\146\66\x63\x32\142\67\x31\x61\70\142\66\x61\144\x39\65\141\x30\x64\x35\63\x36\62\146\x33\x39\x33\60\x39\141\x63\x61\x37\61\x30\146\63\x37\141\x34\144\x61\145\x32\12\40\x20\40\x20\x20\40\x20\40\x20\40\40\x20\x20\40\x20\x20\x32\x32\70\x65\62\67\x64\x33\x35\x66\x34\144\x33\146\143\x38\67\x65\145\66\x65\143\145\64\x35\x33\70\65\x38\x37\146\x61\x64\67\x38\63\x35\x66\71\x38\x30\63\146\65\x63\141\x36\64\144\x66\144\x38\x35\66\141\x65\67\x36\x37\x61\63\x34\70\x32\xa\40\x20\40\40\x20\40\40\40\40\x20\x20\x20\x20\40\x20\40\143\62\x66\63\x31\65\x63\x36\71\x66\62\60\145\x63\67\x61\x65\x33\x39\61\x66\x63\66\143\x32\x64\145\x38\x35\62\70\61\x64\x35\x34\x63\71\x37\146\x37\64\x39\70\x31\x62\x34\x65\x66\145\143\x30\146\x35\x65\x34\66\60\x36\x37\x36\x35\x63\60\64\12\40\x20\40\x20\x20\x20\x20\x20\40\40\x20\40\40\x20\40\40\60\x66\x31\x66\64\x35\63\x38\x36\142\145\144\x34\x66\144\x62\x39\x66\x39\x39\x38\x62\60\x65\67\x30\62\x37\143\67\x34\61\64\x62\x65\141\66\x36\67\x62\61\x32\60\65\x30\62\67\x63\x35\x35\x65\145\x64\x39\x32\x37\63\66\x34\x34\64\66\x33\x62\xa\40\x20\40\40\x20\x20\40\x20\x20\x20\40\x20\40\x20\x20\40\x31\x38\x33\x32\x62\x63\65\63\63\70\x65\63\141\x37\x65\x31\x30\x62\146\62\64\x64\70\145\66\71\x66\61\66\x37\x62\71\x34\x35\65\x31\142\x36\x32\x34\x30\146\x36\x35\142\x34\x31\x36\146\x65\145\x62\144\x32\x38\65\71\71\x33\63\x34\141\141\64\xa\x20\x20\40\40\x20\x20\x20\x20\x20\40\40\x20\x20\x20\x20\x20\144\x39\71\x38\141\x35\x39\x39\x30\65\x33\143\x64\64\x37\x37\x66\65\64\146\x63\x30\x61\146\66\x32\141\70\145\146\67\65\x65\142\71\61\60\71\x36\x62\x31\65\x33\67\x35\61\142\x32\60\61\142\x38\x33\67\x34\143\x34\71\x35\x36\x35\x30\70\x63\xa\40\x20\x20\40\40\x20\40\x20\40\x20\40\40\40\x20\40\x20\x36\143\x38\62\x65\141\x32\143\145\x62\60\62\66\65\x65\67\x34\143\71\x36\x30\x33\62\67\x38\x37\146\145\x30\x31\x31\63\71\x62\65\67\70\x63\63\x61\x31\64\146\x64\x34\x65\63\x32\x61\x38\65\x31\71\65\x33\67\x35\x62\x32\x35\x64\x61\x36\60\12\x20\40\x20\40\x20\40\x20\40\40\x20\x20\x20\x20\40\x20\40\x34\146\62\x31\61\70\67\145\145\60\x31\144\x66\66\60\x34\x32\x39\67\x31\144\67\143\x32\x62\x39\x64\x64\70\x62\66\61\61\x35\x32\x37\63\x37\67\146\x32\x38\146\71\63\x33\65\x35\x39\146\x36\x62\62\x65\144\146\145\67\142\144\70\70\x39\66\12\x20\x20\40\40\40\40\40\x20\x20\40\x20\x20\x20\40\x20\x20\x30\x30\66\62\x37\70\63\60\142\143\x64\146\x66\x63\142\x38\70\x34\x39\70\71\x30\61\x33\x35\x38\65\x63\143\x36\144\141\67\x32\x36\143\x37\x63\143\x35\x37\143\x36\x39\x65\70\x36\66\64\x61\62\x34\x34\x64\x32\x33\64\x34\66\x35\x66\x32\x61\x35\12\x20\40\x20\40\x20\40\x20\x20\40\x20\x20\40\40\40\40\40\x65\67\x33\66\x35\61\62\x61\x36\65\x65\65\66\63\x61\x32\x61\x37\62\x36\71\x31\x35\142\65\60\62\x34\67\141\x66\146\61\66\x35\61\x39\60\143\x37\65\144\61\x35\61\61\63\71\146\62\142\x33\x31\62\x31\x31\141\x33\x61\143\146\x39\64\x65\12\40\40\40\x20\40\x20\40\x20\40\x20\40\40\x20\40\x20\40\62\63\x36\144\62\67\142\x34\x34\61\146\x65\x36\x34\x65\70\70\x61\x34\64\x33\x37\67\x38\x33\65\x39\x64\x35\67\142\141\60\146\145\144\x38\x65\x64\x62\142\60\61\x63\x63\x36\60\141\x31\61\66\x66\71\65\71\x39\144\x61\x34\x65\64\x37\x62\146\xa\40\x20\40\40\40\40\x20\x20\x20\x20\40\40\x20\x20\40\x20\x65\71\x36\x38\65\x30\x61\143\61\x32\144\x31\61\x39\x39\141\60\70\x30\146\x31\x62\65\71\61\x63\x36\60\x65\141\x65\x36\61\x33\146\142\x61\64\x34\x34\x66\x39\146\145\63\x31\x66\144\64\62\x65\x65\x33\x33\63\66\x37\70\x35\63\62\65\65\x36\xa\x20\x20\40\40\x20\x20\x20\40\40\40\40\40\x20\40\40\x20\x30\67\146\142\x66\145\x65\x66\x30\62\x63\x64\x62\x62\x32\x64\x30\141\x38\144\x32\63\x32\71\x61\144\143\x37\146\142\141\62\x32\x61\x61\64\143\x64\61\x32\x34\x63\66\145\66\66\x65\x30\x62\60\x61\x63\x61\67\x39\x36\x62\141\x36\x61\145\142\66\x39\xa\x20\x20\40\x20\x20\40\x20\40\x20\40\40\x20\x20\40\40\x20\x66\x38\x65\67\66\x61\x39\144\x31\141\x61\141\x62\x65\x33\x35\61\142\x63\64\62\146\x65\146\141\x36\x30\65\x34\x39\67\67\x38\65\71\x62\x35\61\61\x35\x38\142\x61\x37\x31\x34\63\x39\70\60\144\x37\66\x64\x62\x35\142\62\x63\143\66\x61\145\143\12\x20\40\x20\40\40\x20\x20\x20\x20\x20\40\x20\x20\x20\x20\40\71\146\70\63\145\x61\143\x35\145\144\x66\67\71\x33\65\67\66\x33\62\146\x62\66\x30\143\142\x34\70\61\61\x65\67\x31\70\x39\x32\x34\x33\x36\x65\65\x38\x32\63\67\65\x38\x36\60\146\141\x66\70\144\70\143\65\x31\x38\145\x65\63\x33\143\x61\12\x20\40\x20\40\40\x20\40\x20\x20\x20\40\x20\40\x20\x20\x20\x65\x30\70\142\61\x38\x61\146\x37\146\141\x61\x32\62\67\x64\x39\67\x31\x39\66\144\67\142\60\64\61\142\x63\x62\x33\66\x36\x31\x31\x38\x37\65\61\x66\x62\x65\141\141\71\62\144\70\x30\146\x38\x36\63\x32\x34\143\x65\x38\67\x31\61\143\x66\144\12\40\40\40\x20\40\40\x20\x20\x20\x20\40\40\40\x20\40\x20\66\65\x30\60\65\143\x61\144\60\143\x65\63\60\x38\x37\x38\146\x35\60\70\145\x62\61\145\141\62\67\63\x35\145\62\61\x32\x65\x66\63\145\64\62\141\67\x38\x34\66\67\144\x34\146\63\61\x62\x34\x38\63\60\70\67\143\63\143\x36\x33\x61\x33\xa\40\x20\x20\40\x20\x20\40\x20\x20\x20\x20\x20\x20\40\40\x20\x32\146\141\x36\62\146\62\x61\145\x39\x32\145\62\x61\143\144\x66\143\63\x63\x66\62\61\x62\x33\64\61\x39\141\x63\143\x33\64\x37\x66\x66\x35\61\x63\x63\x62\61\x37\x31\66\61\145\70\x32\71\143\x63\x34\x61\x32\x34\x39\x36\x35\146\x64\71\63\x30\12\40\40\x20\x20\x20\40\x20\x20\x20\40\40\40\40\x20\x20\40\142\x39\x38\63\x64\66\63\61\65\63\142\x39\x63\61\x33\x64\x64\70\x35\63\x34\x30\144\x37\x31\x38\x34\142\146\60\61\x37\x33\x34\x64\64\63\65\67\x63\x31\141\x61\x62\146\x62\x64\143\x39\67\x31\61\61\71\x33\146\146\141\x39\x37\64\70\63\62\12\x20\40\40\x20\40\40\x20\x20\x20\40\40\40\x20\40\x20\x20\x34\x66\x38\70\x63\146\70\x30\x31\x66\x33\65\67\60\70\144\142\60\71\x30\61\146\146\x61\x61\65\x35\x34\x31\x35\143\x61\x34\63\x33\64\x36\x37\x38\x36\63\x33\144\x64\141\x37\x36\x33\142\x35\146\142\146\x62\x61\x37\143\x66\x64\x35\x31\144\x63\65\xa\x20\40\x20\40\x20\40\40\x20\x20\x20\40\40\x20\40\x20\40\67\71\x31\64\x39\145\x63\x39\62\x38\x34\141\64\144\x62\x32\x33\x34\71\144\142\x63\x35\x32\66\64\x64\65\146\143\141\67\x61\67\x32\60\63\64\62\66\x31\x37\x31\x36\144\x39\x30\141\71\x39\66\x63\142\65\x37\142\141\60\x39\x66\67\x64\60\x37\xa\40\x20\x20\x20\40\x20\40\40\40\x20\x20\x20\x20\40\x20\40\x32\71\x61\x32\x66\61\x30\x63\143\65\70\145\x65\x63\71\70\144\x38\66\x65\x39\63\60\66\x61\63\x66\142\x66\62\x65\x37\61\61\x30\64\66\x65\x38\66\x62\x35\x61\70\x36\x63\x63\60\145\x65\x64\67\x36\x32\65\x62\145\61\141\60\x31\145\142\x66", "\x35\144\70\64\x31\x64\60\143\x62\x35\x37\x35\x66\144\142\70\143\67\145\62\x63\143\x34\70\142\145\64\x37\60\x32\61\x64\63\x38\x36\64\66\x32\x33\67\63\66\66\x36\x36\63\x33\62\x33\x39\x33\63\x33\64\x36\x31\x36\x33\66\x34\x33\x39\63\x33\12\x20\40\x20\40\x20\x20\x20\x20\x20\x20\40\40\x20\40\40\40\x33\x38\66\x31\x33\x33\x36\x33\x33\65\63\71\66\x36\x36\66\63\65\66\61\x33\x39\x33\70\63\x30\x36\x36\x36\66\x33\60\x33\x33\63\x33\x36\63\x33\63\x33\60\63\67\63\x31\x33\x33\x36\x32\66\x33\x36\66\63\62\x36\62\x36\62\x36\x31\63\66\12\40\x20\x20\40\x20\x20\x20\x20\x20\40\x20\x20\x20\40\40\40\66\x34\63\66\63\65\x33\x33\63\x33\x33\x33\x33\x39\63\63\x36\62\63\x30\66\x36\63\61\63\x33\x33\x32\x36\x36\63\x32\60\x64\67\x33\x38\61\x32\x32\x35\x38\141\64\x35\144\x39\60\x66\70\62\64\60\x64\x35\71\x63\64\145\63\x39\x65\70\x37\xa\40\x20\40\40\40\40\x20\40\40\40\x20\40\40\x20\x20\40\70\x64\64\x64\x39\x39\x39\146\x33\66\64\60\63\141\x36\146\60\x62\x31\x64\x36\71\x61\x62\x39\x34\61\66\x37\x39\62\143\x35\145\x38\x66\x32\143\146\x34\62\67\x61\x66\x38\x34\62\x33\x63\70\62\x31\x33\x61\70\x38\65\146\x64\145\x34\70\70\143\12\40\x20\40\40\40\40\40\40\40\x20\x20\x20\40\40\40\x20\x64\x62\x39\x35\62\61\x37\143\x36\x34\x63\65\64\62\x66\65\x65\x32\x62\145\66\142\x34\x33\67\x35\x66\x66\70\62\x65\x35\143\67\62\141\x39\x66\x31\x36\x35\60\x34\71\x35\x34\66\x62\x33\x38\x32\x39\65\x30\x30\x36\x66\x35\60\66\66\65\142\x31\xa\x20\x20\x20\40\x20\40\x20\40\x20\x20\40\x20\x20\x20\40\40\63\65\64\x33\65\x30\144\x65\x34\x61\66\x38\x62\x35\x66\x31\x36\141\x31\70\146\67\x64\146\x35\63\145\60\71\71\x39\x66\64\146\67\x62\x61\65\x62\x61\60\66\67\x36\145\64\x31\66\x61\x30\64\x34\x34\144\65\142\67\141\x63\x63\x64\141\x38\x62\xa\40\40\x20\40\x20\40\x20\x20\x20\x20\x20\40\x20\x20\40\40\x30\71\63\141\145\x33\x31\x61\62\63\x65\63\143\x62\x36\x33\x62\66\146\x34\60\x34\143\64\x33\67\60\67\x31\64\x33\65\x62\70\x31\64\x33\x66\x32\70\x32\x63\x34\143\x62\x34\64\x30\x33\x61\62\142\65\63\70\x61\x66\65\x61\60\x64\x39\x34\x66\xa\x20\40\x20\x20\x20\40\40\x20\x20\x20\40\40\40\40\x20\40\x31\145\65\x38\x32\x63\63\142\142\x39\x64\x35\x33\67\x39\142\141\x35\144\x35\67\x36\x36\x34\x33\x38\x35\64\143\62\63\62\144\67\x34\x66\63\x30\x33\144\x63\141\143\x39\61\x61\x37\61\x31\142\146\x34\64\60\x66\142\x32\x34\145\x37\x61\x62\62\x61\12\40\40\x20\40\40\40\40\40\40\40\40\x20\40\x20\x20\x20\67\60\x65\x66\66\x39\60\x30\70\146\146\142\x35\71\x61\x64\x32\64\x35\65\144\x34\x66\x31\x34\70\x32\x65\67\67\61\61\x34\x34\70\71\x61\63\x62\65\x61\62\x35\x30\63\70\64\x62\x32\x34\x30\x36\x32\x66\x35\64\66\146\x38\x36\60\x37\x33\141\xa\x20\40\x20\40\x20\x20\x20\x20\x20\x20\40\40\x20\40\x20\x20\71\61\146\144\x64\x38\65\144\63\x34\142\144\x37\70\x31\x34\142\64\143\x65\67\60\145\143\x38\144\66\x65\141\x33\x34\x66\71\70\x30\x36\x37\x64\x37\61\x30\x31\60\65\60\x66\x33\x38\60\x30\146\x39\146\x31\x66\x64\71\x32\x30\60\63\x38\65\x36\12\x20\40\x20\x20\x20\x20\x20\40\40\x20\x20\40\40\40\x20\40\62\x32\x33\x66\70\x63\x61\61\64\x32\x37\64\x39\143\x32\145\x66\64\143\x38\144\x31\x39\x39\61\141\66\62\142\60\x66\146\70\x36\x36\62\x33\x62\146\x39\141\146\x63\x65\66\x35\x64\65\65\146\x62\65\x65\146\x65\70\x30\x30\70\71\143\x65\145\x34\12\x20\x20\40\40\40\x20\x20\40\40\x20\x20\40\40\x20\40\40\x65\64\x66\x31\x32\x65\x39\x34\x65\61\x37\64\x38\x63\65\67\64\60\146\60\x37\x35\141\71\64\x61\x32\x32\71\60\x62\x61\62\144\143\70\x39\x32\146\144\146\144\x65\65\61\x36\145\142\143\61\71\60\141\x34\144\142\x36\63\145\x37\67\146\x39\x33\xa\40\40\x20\40\40\40\x20\40\x20\x20\40\x20\40\x20\40\x20\x35\64\141\63\142\x65\x63\65\x65\146\66\71\65\65\x37\62\x64\x64\x64\143\x63\x39\x64\67\x63\x34\x33\66\60\x39\67\x32\x34\143\67\63\142\143\65\142\146\145\67\71\x64\x35\146\63\62\x32\x38\71\60\x65\64\x66\x33\x39\x61\63\x31\x65\66\142\xa\x20\40\x20\x20\40\40\x20\40\40\40\40\x20\40\40\40\x20\x33\146\x62\x39\63\70\70\x63\67\x38\145\x31\63\63\143\x35\70\x65\63\x39\65\x63\x61\60\x33\145\x63\x61\62\145\x38\x61\142\71\x35\62\60\x65\64\144\x32\145\x35\x34\62\x31\x65\x30\144\71\141\61\x66\67\70\x31\x61\65\66\64\x64\x64\141\67\12\40\40\x20\x20\x20\40\40\40\x20\x20\x20\40\40\x20\x20\40\x37\62\x30\x64\x35\66\x66\x34\61\x33\x33\x31\x32\x37\66\62\x64\141\x30\x37\70\x65\60\62\62\66\x30\x35\63\x36\x37\62\x39\70\63\145\x63\146\x35\142\144\146\x31\70\60\70\66\141\x36\x66\66\x31\x37\x30\x37\x31\70\x31\64\x64\x36\x31\x65\x34\xa\x20\40\40\x20\40\x20\x20\40\x20\x20\40\x20\40\40\40\40\62\x37\x65\x36\x66\60\62\61\66\x37\142\x38\x64\x33\70\x65\63\70\61\x36\x30\67\x65\x34\x32\x33\x38\146\x32\61\143\60\142\66\145\66\x64\71\62\62\x32\146\x31\143\x63\66\63\64\70\x62\71\x66\x37\144\66\146\142\60\70\64\x63\143\63\x62\xa\x20\40\x20\x20\x20\40\40\x20\x20\40\40\40\40\x20\x20\40\63\60\x36\x62\x37\x61\143\x62\142\71\64\146\64\x62\63\x61\x62\x36\x62\x36\66\x66\145\65\x33\71\70\x36\65\146\x62\x38\x30\x34\70\x39\x39\x64\63\x66\66\x34\143\x38\142\x63\x61\66\142\144\x30\62\145\x65\x35\x35\60\71\x30\x32\62\x61\65\x30\xa\x20\x20\x20\40\40\40\x20\x20\x20\x20\40\40\40\40\40\x20\x30\x33\144\x36\63\x65\62\x35\x39\142\x62\x34\x31\64\x33\x39\61\146\x63\x31\x30\x61\x65\71\x62\62\x65\64\62\x63\x36\x38\141\62\x62\145\67\64\63\x34\x38\70\142\66\x39\x63\x61\x37\x37\143\x37\x30\67\x34\x31\70\62\x30\141\141\x65\x65\x62\x30\xa\40\40\40\x20\40\40\x20\40\40\x20\x20\40\x20\x20\40\40\x64\x61\x32\x66\x66\60\x30\143\x30\67\67\x38\x37\x61\63\x39\145\x63\x36\x31\x33\145\66\66\65\144\x37\70\x63\63\x30\142\x35\x66\65\x37\x61\x31\64\x66\x63\x62\x65\62\x34\146\x30\60\143\x66\x35\x35\145\145\142\61\67\x34\145\62\63\144\141\x63\12\x20\40\x20\x20\x20\40\x20\x20\40\40\40\40\x20\40\x20\40\x61\x39\145\x62\x33\x35\70\67\142\x63\70\x64\143\x38\x66\144\x66\65\x65\x66\60\66\62\142\67\146\61\x36\65\71\x62\64\65\x63\64\70\x32\64\66\x30\65\x35\146\144\141\66\x39\x39\x62\x36\x61\x65\70\x62\x39\146\x63\143\64\66\x61\x33\70\60\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\40\40\40\40\40\40\x20\x65\x62\143\x36\x62\66\64\70\66\x36\62\145\146\65\146\x65\x64\61\141\64\x66\145\x31\x36\143\71\x61\141\x33\61\60\143\143\61\x36\x66\x35\x61\x64\66\x34\62\142\70\x30\x35\64\x39\x32\x36\62\x66\x35\143\x37\x37\63\x33\x35\x66\65\x34\63\65\xa\x20\x20\40\x20\40\x20\40\x20\x20\40\x20\x20\x20\40\40\40\x61\x34\63\x64\63\x30\64\65\x39\x32\x39\67\142\x37\65\x34\63\65\x30\141\x39\x64\144\66\63\65\142\60\143\141\65\63\64\x32\x66\143\67\71\x38\x64\63\x36\x39\x32\x32\65\146\x36\x64\66\x39\62\145\x65\x61\60\x63\71\60\x31\145\x62\x37\62\12\40\40\40\40\x20\40\40\x20\x20\40\x20\x20\40\40\x20\x20\x66\x64\61\60\141\146\61\61\71\x39\142\67\x38\64\67\x66\146\x63\x31\141\60\x63\x35\71\61\x35\71\60\x32\146\145\63\63\x39\x37\x37\x32\61\70\x33\67\x32\x37\x63\63\x31\x34\x39\x37\x63\x37\65\x32\145\63\142\145\x62\61\143\x66\60\x31\60\xa\40\x20\40\40\x20\x20\x20\40\x20\40\40\x20\x20\40\x20\40\x32\x63\x39\x37\x61\142\x32\67\60\144\x65\146\x36\x36\62\x38\x62\144\141\x65\x36\x33\60\x31\67\62\x64\x37\x33\141\71\x66\143\60\x61\x66\145\144\61\x64\x38\x39\63\x38\67\x30\60\x30\x33\x38\x32\x38\146\66\64\65\61\70\65\x31\62\70\x38\66\xa\40\x20\40\40\x20\40\40\40\x20\x20\40\x20\40\40\40\x20\65\67\x64\x36\x32\x62\141\x35\x32\143\70\x64\63\62\65\x61\x61\70\64\x30\71\x62\60\141\64\60\67\x35\64\144\x63\63\146\70\x34\144\x31\x63\x38\x38\71\70\145\x30\x31\x65\x32\x30\143\x30\63\64\x36\64\x62\70\63\144\x32\x64\141\x65\x35\144\xa\40\40\x20\40\x20\x20\40\x20\x20\40\x20\40\40\40\x20\x20\63\x64\71\146\62\x37\x39\x37\x37\70\146\142\x31\x31\x36\x31\x61\x63\x35\144\x38\146\x39\x63\x34\66\x36\146\144\x30\143\66\x62\144\x64\66\x61\62\x31\65\x35\x33\x65\141\71\62\65\x32\146\146\x30\61\x38\141\145\x39\71\142\x30\144\64\64\x32\65\12\40\40\40\40\x20\x20\40\x20\40\40\40\40\40\40\40\40\x30\145\65\65\x64\x31\x37\67\x66\x62\61\x65\60\x32\67\x35\144\141\71\67\64\x37\64\x65\x61\x30\65\x32\x64\x38\65\144\x39\66\142\67\x34\x33\62\143\61\x62\145\70\64\x30\145\x35\71\71\x34\x62\x31\x32\67\x62\x31\64\x37\144\61\x61\x30\143\xa\x20\x20\x20\x20\40\x20\40\x20\40\40\x20\x20\40\40\40\40\x36\64\x66\61\143\x65\x61\71\61\61\x35\x61\63\x37\62\x32\x35\143\70\142\x34\71\71\66\60\x65\60\66\71\63\x36\x38\x30\x65\145\65\x35\71\x33\x63\70\x31\67\x38\x34\x63\x38\65\60\x38\x31\61\145\x31\146\x31\x30\143\x65\64\146\x39\141\x33\xa\40\x20\x20\40\40\x20\x20\40\40\x20\x20\x20\x20\x20\40\x20\x33\x36\65\145\x33\144\62\x64\x32\x34\60\145\x30\145\x65\146\x38\x64\141\66\x34\60\64\144\65\x61\x39\x33\145\142\144\60\60\x30\x61\71\x38\144\65\x64\x33\63\x64\x64\65\x61\x32\63\x38\x33\x32\x37\145\70\70\x64\146\144\x61\x64\62\x37\64\64\12\x20\40\x20\x20\x20\40\40\x20\x20\40\x20\x20\40\40\40\x20\145\x64\x30\x63\64\63\x32\61\141\65\64\x33\143\x31\141\63\62\63\61\145\x35\63\x35\65\60\x65\x38\61\x36\143\x35\63\61\x62\67\63\x62\141\146\x65\x63\x32\61\145\63\x32\144\x61\145\x65\x63\144\61\71\71\143\67\141\62\x62\145\x37\65\146\12\x20\x20\40\x20\x20\x20\x20\x20\x20\40\x20\x20\40\40\40\40\x34\65\x30\x63\x65\x34\x64\x33\x39\145\61\x30\141\144\70\x31\141\x37\x63\141\x37\64\70\x37\67\x65\61\66\66\61\x33\67\66\x64\67\143\x63\145\65\x35\x37\x61\61\x64\64\144\144\x65\65\63\142\x35\60\x33\145\61\x35\x31\62\x65\x66\145\x66\x36\12\x20\40\40\x20\40\x20\x20\40\x20\x20\40\x20\x20\x20\40\x20\144\66\x30\x37\144\x35\x30\x37\x34\x63\141\70\142\141\62\x39\144\142\60\x36\67\x34\65\x34\x65\65\62\x39\x61\145\143\x38\x36\67\x39\60\67\143\x36\x65\144\145\x64\60\63\x63\145\71\60\70\x33\65\144\67\x32\x39\67\x34\143\x64\144\143\143\x35\xa\x20\x20\x20\40\x20\40\x20\40\40\x20\x20\x20\x20\40\40\40\70\x33\x36\x32\x38\x62\x64\62\x39\64\70\x61\67\70\x61\x32\x64\66\x36\66\145\x64\x38\71\70\70\x39\146\x35\x39\x62\x31\x64\144\x35\142\x30\x35\x37\x30\64\142\67\145\66\70\x61\x38\x30\x31\141\x64\x39\x66\71\63\x38\60\71\x65\60\144\70\141\xa\x20\x20\x20\x20\40\x20\x20\x20\40\40\x20\40\40\40\x20\40\x61\x65\x37\x32\x61\x37\62\71\62\63\70\x38\x33\x64\64\x64\x65\x38\61\x64\x38\x36\x37\x62\146\66\x33\71\145\x62\x35\144\x63\x35\x38\61\64\62\71\60\x34\x31\143\x61\67\70\67\x36\63\62\x33\65\146\145\61\61\x32\65\x31\x32\x35\x34\143\70\12\x20\40\40\40\40\40\40\x20\40\x20\40\x20\x20\40\x20\40\143\x63\x61\70\142\146\145\61\x30\145\x38\x38\61\60\60\x33\65\x65\64\x63\143\145\x30\x32\x33\142\x36\x35\62\x37\x37\x34\64\x64\x30\145\x61\x38\x33\x39\142\x62\x30\x33\65\144\x62\x39\71\x61\x64\143\63\143\x65\x37\64\62\x61\65\x34\x39\61\x64\12\x20\40\40\x20\40\x20\40\40\x20\x20\40\40\40\40\x20\40\x63\x34\x34\x36\x32\62\60\141\x36\x63\142\64\61\66\141\x30\142\144\x33\x33\x36\x32\x62\x34\62\x34\144\x63\x64\x66\63\145")); return static::CRYPT_VECTORS === "\x6e\145\x77" ? $openssl : $mcrypt; } public function testEncryptByPasswordCompat($password, $data, $encrypted) { $data = hex2bin(preg_replace("\x7b\x5c\x73\x2b\175", '', $data)); $encrypted = hex2bin(preg_replace("\x7b\134\x73\53\175", '', $encrypted)); $this->assertEquals($data, $this->security->decryptByPassword($encrypted, $password)); } public function randomKeyInvalidInputs() { return array(array(0), array(-1), array("\60"), array("\63\64"), array(array())); } public function testRandomKeyInvalidInput($input) { $this->expectException(\yii\base\InvalidArgumentException::class); $this->security->generateRandomKey($input); } public function testGenerateRandomKey() { for ($length = 1; $length < 64; $length++) { $key1 = $this->security->generateRandomKey($length); $this->assertIsString($key1); $this->assertEquals($length, strlen($key1)); $key2 = $this->security->generateRandomKey($length); $this->assertIsString($key2); $this->assertEquals($length, strlen($key2)); if ($length >= 7) { $this->assertNotEquals($key1, $key2); } } $length = 1024 * 1024; $key1 = $this->security->generateRandomKey($length); $this->assertIsString($key1); $this->assertEquals($length, strlen($key1)); $key2 = $this->security->generateRandomKey($length); $this->assertIsString($key2); $this->assertEquals($length, strlen($key2)); $this->assertNotEquals($key1, $key2); } protected function randTime(Security $security, $count, $length, $message) { $t = microtime(true); for ($i = 0; $i < $count; $i += 1) { $key = $security->generateRandomKey($length); } $t = microtime(true) - $t; $nbytes = number_format($count * $length, 0); $milisec = number_format(1000 * $t, 3); $rate = number_format($count * $length / $t / 1000000, 3); fwrite(STDERR, "{$message}\x3a\40{$count}\x20\x78\40{$length}\40\x42\40\75\x20{$nbytes}\40\x42\40\x69\x6e\x20{$milisec}\40\155\163\40\x3d\x3e\x20{$rate}\x20\x4d\102\57\x73\xa"); } public function testGenerateRandomString() { $length = 21; $key = $this->security->generateRandomString($length); $this->assertEquals($length, strlen($key)); $this->assertEquals(1, preg_match("\57\133\x41\55\132\141\x2d\x7a\x30\55\x39\x5f\x2d\x5d\53\57", $key)); } public function dataProviderPbkdf2() { return array_filter(array(array("\163\150\141\61", "\x70\141\163\x73\x77\157\x72\x64", "\x73\x61\x6c\x74", 1, 20, "\x30\x63\66\x30\143\x38\x30\x66\x39\x36\x31\x66\x30\x65\x37\x31\x66\63\x61\x39\x62\x35\62\64\141\146\x36\60\61\62\x30\66\62\x66\x65\x30\63\67\141\66"), array("\163\x68\141\x31", "\160\x61\163\163\167\x6f\x72\x64", "\x73\141\154\x74", 2, 20, "\x65\x61\66\x63\60\61\64\144\x63\x37\x32\x64\66\x66\x38\x63\143\x64\61\x65\144\x39\x32\x61\x63\x65\61\x64\64\x31\146\60\x64\x38\144\145\x38\71\x35\67"), array("\x73\x68\x61\61", "\x70\141\x73\163\x77\x6f\162\x64", "\163\141\x6c\164", 4096, 20, "\64\142\x30\x30\x37\71\60\61\142\x37\66\65\64\x38\71\141\x62\145\x61\x64\64\x39\144\x39\62\x36\x66\67\x32\61\144\x30\66\x35\141\x34\x32\71\x63\x31"), getenv("\x47\111\124\x48\125\102\x5f\101\x43\x54\111\117\x4e\x53") == true ? array("\163\150\141\x31", "\x70\141\163\x73\x77\157\162\x64", "\x73\141\x6c\164", 16777216, 20, "\145\x65\x66\x65\63\x64\x36\x31\143\144\x34\144\x61\64\145\64\x65\71\x39\x34\x35\x62\x33\144\66\x62\141\62\61\65\x38\143\62\66\x33\64\x65\71\70\64") : null, array("\x73\x68\141\x31", "\160\x61\x73\x73\x77\157\162\144\x50\x41\x53\x53\127\117\122\104\x70\x61\163\163\x77\157\x72\x64", "\163\x61\x6c\164\x53\101\x4c\x54\163\141\x6c\x74\123\x41\114\x54\x73\141\154\x74\x53\101\114\124\x73\141\154\x74\x53\x41\x4c\124\x73\x61\154\164", 4096, 25, "\x33\144\62\x65\145\x63\64\x66\145\64\61\143\70\x34\71\142\70\60\x63\70\144\x38\63\x36\66\x32\143\x30\x65\64\x34\x61\70\x62\x32\71\61\141\71\x36\64\143\146\62\146\x30\67\60\63\x38"), array("\163\x68\x61\x31", "\160\141\x73\x73\x0\167\x6f\162\x64", "\x73\141\0\154\164", 4096, 16, "\65\x36\x66\141\x36\x61\141\x37\x35\x35\x34\70\60\71\71\144\143\x63\63\x37\x64\x37\146\x30\x33\x34\62\65\145\x30\x63\x33"), array("\x73\150\x61\x32\65\x36", "\x70\x61\163\163\167\x6f\x72\144", "\x73\141\154\164", 1, 20, "\61\62\x30\x66\142\66\143\x66\146\143\x66\70\x62\63\x32\143\64\x33\145\67\62\62\65\62\65\x36\143\x34\x66\70\x33\x37\141\70\66\x35\x34\70\x63\71"), array("\163\150\141\x32\x35\66", "\160\141\163\163\x0\x77\x6f\x72\x64", "\163\x61\x0\154\x74", 4096, 32, "\x38\71\142\x36\x39\144\x30\65\61\66\x66\70\x32\71\70\71\x33\x63\66\71\66\x32\62\66\x36\x35\x30\x61\x38\x36\70\67\x38\143\60\x32\x39\x61\x63\61\x33\145\145\62\x37\x36\x35\x30\71\x64\65\141\x65\x35\70\142\x36\x34\x36\66\x61\67\x32\64"), array("\x73\150\141\x32\x35\66", "\x70\x61\x73\x73\167\x6f\162\144\x50\x41\x53\x53\x57\117\122\104\x70\x61\x73\163\x77\x6f\162\144", "\x73\x61\x6c\x74\123\101\x4c\x54\x73\141\154\x74\x53\101\x4c\x54\163\141\154\x74\x53\x41\x4c\x54\163\x61\154\x74\x53\101\114\124\163\x61\154\164", 4096, 40, "\63\64\x38\x63\70\71\x64\x62\143\x62\x64\63\62\x62\x32\x66\63\62\144\x38\61\64\142\x38\61\61\66\x65\x38\64\x63\146\x32\142\61\67\x33\64\x37\145\142\x63\61\70\x30\x30\x31\x38\x31\x63\x34\145\x32\141\x31\x66\x62\x38\x64\x64\x35\x33\x65\61\x63\x36\x33\x35\65\x31\x38\x63\67\x64\x61\x63\x34\x37\x65\71"))); } public function testPbkdf2($hash, $password, $salt, $iterations, $length, $okm) { $this->security->derivationIterations = $iterations; $DK = $this->security->pbkdf2($hash, $password, $salt, $iterations, $length); $this->assertEquals($okm, bin2hex($DK)); } public function dataProviderDeriveKey() { return array(array("\110\x61\x73\x68" => "\x73\x68\x61\x32\65\x36", "\111\113\x4d" => "\60\x62\x30\x62\x30\142\60\142\x30\142\x30\142\x30\x62\60\142\x30\142\x30\142\x30\x62\60\x62\60\x62\60\142\60\x62\60\x62\60\x62\60\x62\x30\x62\60\142\x30\x62\60\x62", "\163\x61\154\x74" => "\60\60\x30\61\x30\62\x30\x33\x30\64\60\x35\x30\x36\60\67\60\x38\x30\71\x30\141\x30\x62\x30\143", "\x69\x6e\x66\157" => "\x66\60\146\61\146\x32\x66\63\x66\64\x66\65\x66\66\146\67\146\x38\146\71", "\114" => 42, "\120\122\x4b" => "\x30\67\67\x37\60\x39\x33\x36\62\143\62\145\63\62\144\146\60\x64\144\x63\x33\x66\60\144\143\x34\67\x62\x62\x61\x36\63\x39\60\142\66\x63\67\63\142\x62\65\60\x66\71\143\x33\61\62\62\145\x63\x38\x34\64\141\x64\x37\143\x32\x62\x33\145\65", "\117\x4b\115" => "\63\x63\x62\x32\x35\x66\62\x35\146\141\141\x63\144\x35\67\141\71\x30\64\63\x34\146\x36\64\x64\x30\63\66\x32\146\62\x61\x32\144\x32\144\60\x61\71\x30\x63\x66\61\141\x35\141\64\143\65\x64\x62\x30\x32\144\65\66\x65\x63\143\64\x63\65\x62\x66\x33\x34\x30\x30\x37\62\x30\x38\144\65\142\70\x38\67\x31\x38\x35\x38\66\x35"), array("\110\x61\x73\150" => "\x73\x68\141\62\x35\x36", "\111\113\115" => "\x30\x30\60\61\x30\62\x30\63\x30\64\x30\x35\60\x36\60\x37\60\x38\60\71\60\x61\x30\x62\60\143\x30\144\x30\x65\x30\146\x31\x30\x31\x31\x31\x32\x31\x33\x31\64\61\x35\x31\66\x31\x37\x31\70\61\71\61\141\x31\142\61\x63\x31\x64\61\x65\61\146\62\60\62\x31\62\62\x32\63\62\64\x32\65\x32\x36\62\x37\x32\x38\x32\71\62\x61\x32\142\x32\x63\62\x64\x32\145\x32\146\x33\60\x33\61\x33\x32\63\x33\63\x34\63\65\63\x36\x33\x37\x33\70\63\x39\x33\141\63\142\63\x63\x33\x64\63\145\x33\x66\x34\60\x34\61\64\x32\64\63\64\x34\64\x35\64\x36\64\x37\x34\70\64\71\64\141\64\x62\x34\x63\64\144\x34\145\64\x66", "\x73\x61\x6c\164" => "\x36\60\66\61\x36\62\66\63\x36\x34\66\65\66\x36\x36\67\66\70\66\x39\66\141\x36\142\x36\x63\x36\144\66\145\x36\x66\67\x30\67\x31\x37\x32\67\63\67\x34\67\x35\67\x36\x37\x37\x37\70\67\x39\x37\141\67\142\x37\143\x37\x64\67\145\67\146\70\x30\70\61\x38\x32\70\63\x38\64\70\65\70\66\70\67\x38\x38\x38\71\70\x61\x38\142\70\x63\70\x64\70\x65\70\x66\71\60\x39\61\71\62\71\63\x39\x34\x39\x35\x39\x36\71\x37\x39\70\71\71\71\x61\x39\142\71\x63\71\x64\71\x65\x39\146\x61\60\141\61\141\62\x61\63\141\64\x61\65\x61\x36\x61\67\141\x38\141\71\141\141\x61\x62\x61\x63\141\x64\x61\x65\x61\x66", "\x69\156\146\157" => "\142\x30\x62\x31\x62\x32\142\63\142\64\x62\x35\142\66\x62\67\142\x38\x62\x39\x62\141\142\x62\142\x63\x62\144\142\145\x62\x66\143\60\x63\61\x63\x32\x63\x33\x63\x34\143\x35\143\x36\x63\x37\143\70\143\71\x63\x61\143\x62\143\143\x63\x64\143\145\x63\146\x64\x30\144\x31\144\62\x64\x33\144\x34\x64\65\144\66\x64\x37\x64\70\x64\71\144\141\144\x62\x64\x63\144\144\144\x65\x64\146\x65\60\145\61\x65\62\x65\63\x65\64\145\x35\145\66\145\67\145\70\x65\71\145\141\145\x62\145\143\145\x64\x65\145\x65\x66\146\x30\146\61\146\x32\x66\63\x66\x34\146\x35\x66\x36\x66\67\146\x38\x66\71\x66\x61\x66\142\146\143\x66\144\146\145\x66\146", "\114" => 82, "\x50\122\113" => "\60\x36\x61\x36\x62\70\x38\x63\x35\x38\x35\63\x33\66\x31\141\60\x36\61\x30\x34\x63\71\143\x65\142\x33\65\x62\x34\65\143\145\x66\67\x36\x30\x30\61\64\71\60\x34\x36\67\61\60\x31\x34\x61\x31\71\x33\146\x34\x30\143\61\x35\x66\143\x32\x34\x34", "\117\113\115" => "\142\x31\x31\145\63\71\x38\144\x63\x38\60\x33\x32\x37\141\x31\x63\x38\145\67\x66\67\x38\143\x35\71\x36\141\64\71\63\64\64\146\x30\x31\62\145\x64\x61\62\144\64\x65\146\x61\144\x38\x61\x30\65\60\143\143\64\143\x31\x39\x61\x66\x61\71\x37\143\x35\x39\60\x34\65\141\71\x39\143\x61\143\67\70\62\67\x32\67\x31\x63\142\x34\61\143\x36\65\145\x35\71\x30\145\60\x39\144\141\63\x32\67\x35\66\60\60\143\x32\146\60\71\x62\70\x33\66\x37\67\x39\x33\x61\71\x61\x63\x61\63\x64\x62\x37\x31\143\x63\63\60\x63\65\x38\61\67\x39\x65\x63\x33\x65\x38\67\x63\61\x34\x63\60\x31\x64\x35\x63\61\x66\x33\x34\63\64\146\61\x64\x38\x37"), array("\110\141\x73\150" => "\x73\x68\141\62\65\x36", "\111\113\x4d" => "\60\142\60\x62\x30\142\60\142\x30\142\x30\142\x30\x62\x30\x62\x30\142\60\142\60\142\60\142\60\x62\60\142\x30\x62\x30\x62\60\x62\60\142\60\x62\x30\x62\x30\x62\x30\x62", "\x73\x61\154\x74" => '', "\x69\156\x66\157" => '', "\x4c" => 42, "\x50\122\113" => "\x31\71\x65\146\x32\64\141\x33\62\x63\x37\x31\x37\142\x31\x36\67\x66\63\x33\141\71\x31\x64\x36\x66\x36\x34\x38\142\144\x66\x39\x36\x35\71\x36\67\67\66\x61\146\144\142\66\x33\x37\67\141\x63\64\63\x34\143\61\143\62\71\x33\143\143\x62\x30\x34", "\x4f\113\x4d" => "\x38\x64\141\x34\x65\67\x37\x35\141\65\66\x33\143\61\70\x66\x37\x31\65\x66\70\60\x32\141\60\x36\x33\x63\65\141\63\61\x62\70\x61\x31\61\x66\65\x63\65\145\x65\61\70\67\x39\x65\x63\63\x34\65\x34\x65\65\146\x33\143\x37\x33\70\144\x32\144\x39\x64\62\x30\x31\63\x39\65\x66\141\x61\64\142\66\x31\141\x39\66\143\x38"), array("\110\x61\x73\x68" => "\x73\x68\x61\61", "\x49\x4b\x4d" => "\60\142\60\142\60\142\x30\x62\x30\142\60\x62\60\142\x30\142\60\142\x30\x62\x30\x62", "\x73\141\x6c\x74" => "\60\60\60\x31\x30\x32\60\x33\60\x34\x30\65\60\66\x30\67\x30\x38\x30\71\x30\141\x30\x62\x30\143", "\x69\x6e\x66\x6f" => "\146\x30\146\x31\x66\x32\x66\63\146\64\x66\65\x66\x36\146\67\x66\x38\x66\71", "\x4c" => 42, "\x50\122\113" => "\x39\142\66\x63\61\70\x63\64\63\62\x61\x37\x62\146\x38\x66\60\x65\x37\61\x63\70\145\142\x38\x38\x66\x34\142\x33\x30\x62\141\141\x32\x62\141\62\x34\x33", "\x4f\113\115" => "\x30\x38\x35\141\x30\61\x65\x61\x31\x62\x31\60\146\x33\66\71\x33\63\60\x36\70\142\65\x36\145\146\141\65\x61\144\x38\x31\141\x34\x66\61\64\x62\70\62\62\x66\65\142\60\x39\61\65\66\x38\x61\71\x63\144\144\64\146\x31\x35\x35\146\x64\x61\x32\x63\x32\62\145\x34\x32\x32\x34\67\70\144\63\60\65\146\x33\x66\x38\71\66"), array("\x48\x61\163\x68" => "\163\x68\x61\x31", "\111\113\x4d" => "\60\x30\60\x31\x30\x32\x30\x33\60\x34\x30\65\60\66\60\67\x30\x38\x30\x39\60\141\60\x62\60\x63\60\144\60\145\x30\x66\61\60\61\x31\61\x32\x31\63\61\64\x31\x35\x31\x36\61\67\61\70\61\71\x31\x61\61\x62\x31\143\x31\x64\x31\x65\61\x66\x32\60\62\61\62\x32\62\x33\x32\64\x32\x35\62\66\62\67\x32\x38\x32\x39\x32\141\x32\142\x32\x63\x32\x64\x32\145\x32\x66\x33\60\63\61\x33\62\63\x33\x33\64\63\65\63\x36\x33\67\63\70\63\71\x33\x61\x33\142\63\143\63\x64\63\x65\63\x66\x34\60\64\61\x34\62\64\x33\64\64\x34\65\x34\x36\x34\67\64\70\x34\x39\64\x61\64\142\64\143\64\144\64\145\64\146", "\163\141\x6c\164" => "\x36\60\x36\61\66\62\66\x33\x36\64\x36\x35\x36\66\66\x37\x36\70\x36\x39\66\x61\x36\142\66\143\x36\144\66\x65\66\x66\67\x30\x37\x31\67\62\x37\63\x37\x34\x37\65\x37\x36\x37\x37\x37\70\x37\71\x37\x61\x37\142\x37\143\x37\144\x37\x65\x37\146\x38\60\x38\x31\x38\x32\70\63\x38\x34\70\65\70\x36\x38\x37\x38\70\x38\x39\70\x61\70\x62\70\x63\x38\x64\70\145\x38\x66\x39\60\71\61\71\x32\71\63\71\64\x39\65\71\66\x39\67\71\70\x39\71\71\x61\71\x62\x39\x63\71\144\x39\145\71\146\x61\x30\x61\61\x61\x32\141\x33\141\64\141\65\141\66\x61\x37\141\x38\141\x39\141\141\x61\x62\x61\x63\x61\x64\x61\x65\x61\x66", "\151\x6e\x66\157" => "\142\x30\142\x31\142\x32\142\63\x62\x34\x62\65\142\66\142\x37\142\x38\142\71\x62\141\x62\142\142\x63\x62\144\x62\x65\142\146\x63\x30\143\x31\143\x32\143\x33\143\x34\x63\65\x63\x36\x63\67\143\70\x63\x39\x63\x61\x63\x62\x63\143\143\144\x63\x65\x63\x66\x64\60\144\61\x64\62\144\63\x64\64\x64\x35\144\x36\x64\67\x64\70\144\71\x64\141\144\x62\144\143\144\144\144\145\144\146\x65\x30\x65\61\x65\x32\x65\63\145\x34\x65\65\x65\66\x65\67\x65\70\145\x39\145\x61\145\142\x65\143\145\x64\x65\x65\145\146\146\x30\146\x31\146\62\146\63\x66\x34\x66\65\146\66\146\67\x66\70\x66\x39\x66\x61\x66\x62\x66\143\x66\x64\x66\145\x66\x66", "\114" => 82, "\x50\x52\113" => "\x38\x61\x64\141\x65\60\71\141\62\x61\x33\x30\67\x30\x35\x39\64\x37\x38\144\x33\x30\71\x62\62\x36\x63\64\x31\x31\65\x61\x32\x32\x34\x63\146\x61\146\x36", "\x4f\113\x4d" => "\60\142\x64\x37\x37\60\141\67\64\144\61\61\x36\60\x66\67\143\x39\x66\x31\62\x63\144\x35\x39\x31\x32\141\60\x36\x65\x62\146\146\66\141\144\143\141\x65\x38\x39\71\144\71\62\61\x39\x31\146\145\64\x33\x30\65\66\67\63\x62\x61\62\x66\146\x65\x38\x66\x61\63\x66\61\x61\64\145\65\x61\144\67\x39\146\x33\146\63\x33\x34\x62\63\142\62\x30\x32\142\x32\61\x37\x33\x63\64\x38\66\x65\x61\x33\67\x63\145\x33\144\x33\x39\x37\x65\144\60\x33\x34\143\67\x66\71\144\x66\145\x62\61\x35\x63\x35\145\71\x32\x37\x33\x33\x36\x64\x30\64\64\x31\146\64\143\x34\x33\60\x30\x65\62\143\146\146\x30\x64\60\x39\60\60\142\x35\x32\144\63\x62\x34"), array("\110\x61\x73\x68" => "\163\x68\x61\x31", "\x49\x4b\x4d" => "\60\142\x30\x62\x30\142\x30\142\x30\142\x30\x62\x30\x62\60\142\x30\142\x30\x62\x30\x62\60\x62\60\x62\x30\142\x30\x62\60\x62\60\x62\60\142\60\142\x30\x62\60\x62\60\x62", "\x73\141\x6c\164" => '', "\x69\x6e\146\157" => '', "\114" => 42, "\120\122\113" => "\144\141\x38\x63\70\141\67\63\x63\67\146\141\67\x37\62\x38\x38\x65\143\66\x66\65\145\x37\x63\x32\71\x37\x37\70\x36\x61\x61\x30\144\63\62\x64\60\61", "\117\113\115" => "\60\x61\x63\61\141\x66\x37\x30\x30\x32\142\63\144\x37\66\x31\144\61\145\65\x35\62\x39\x38\x64\141\x39\144\x30\65\60\x36\x62\x39\141\x65\x35\x32\x30\65\67\62\x32\60\141\x33\60\66\145\60\67\142\x36\x62\x38\x37\x65\x38\144\146\x32\61\x64\60\145\141\x30\60\60\63\x33\x64\x65\x30\63\x39\x38\x34\144\x33\64\x39\61\70"), array("\x48\x61\163\150" => "\x73\x68\x61\61", "\111\x4b\x4d" => "\x30\x63\60\143\x30\x63\60\x63\x30\143\x30\x63\x30\143\x30\x63\x30\143\60\x63\60\143\60\143\x30\143\x30\x63\x30\143\60\143\x30\143\x30\x63\x30\143\x30\143\x30\143\60\143", "\x73\x61\x6c\164" => null, "\x69\156\146\157" => '', "\x4c" => 42, "\x50\122\113" => "\x32\141\x64\143\143\x61\x64\x61\x31\70\67\67\71\x65\67\143\62\x30\67\x37\141\144\x32\145\142\61\x39\144\63\x66\x33\x65\67\x33\61\63\70\x35\144\x64", "\117\x4b\x4d" => "\62\143\x39\61\x31\x31\67\x32\60\64\144\x37\x34\x35\146\x33\x35\x30\x30\144\x36\63\x36\x61\x36\62\x66\66\x34\x66\60\x61\x62\63\x62\141\145\x35\x34\70\141\141\x35\x33\144\64\62\x33\142\60\144\x31\146\62\x37\145\142\142\x61\66\x66\65\145\x35\x36\x37\x33\x61\60\x38\x31\144\67\x30\143\143\145\67\x61\143\x66\x63\64\70")); } public function testHkdf($hash, $ikm, $salt, $info, $l, $prk, $okm) { $dk = $this->security->hkdf((string) $hash, hex2bin((string) $ikm), hex2bin((string) $salt), hex2bin((string) $info), $l); $this->assertEquals($okm, bin2hex($dk)); } public function dataProviderCompareStrings() { return array(array('', ''), array("\60", ''), array("\x30\56\x30\60", ''), array('', "\0"), array("\0", ''), array("\x0", "\0"), array("\60", "\x0"), array("\x75\x73\145\162", "\x55\x73\145\162"), array("\160\141\x73\163\167\x6f\x72\x64", "\x70\x61\x73\x73\x77\157\x72\144"), array("\160\x61\x73\163\167\x6f\162\x64", "\x70\x61\x73\163\x77\157\x72\x64\x70\141\163\x73\x77\x6f\x72\144"), array("\x70\141\x73\x73\167\157\162\144\61", "\160\x61\x73\163\167\x6f\162\144"), array("\160\x61\163\163\167\x6f\162\144", "\160\141\163\x73\167\157\x72\144\x32"), array('', "\160\141\163\x73\167\x6f\x72\144"), array("\x70\x61\163\163\167\157\162\144", '')); } public function testCompareStrings($expected, $actual) { $this->assertEquals(strcmp($expected, $actual) === 0, $this->security->compareString($expected, $actual)); } public function testMasking($unmaskedToken) { $maskedToken = $this->security->maskToken($unmaskedToken); $this->assertGreaterThan(mb_strlen($unmaskedToken, "\70\142\151\164") * 2, mb_strlen($maskedToken, "\70\142\x69\x74")); $this->assertEquals($unmaskedToken, $this->security->unmaskToken($maskedToken)); } public function testUnMaskingInvalidStrings() { $this->assertEquals('', $this->security->unmaskToken('')); $this->assertEquals('', $this->security->unmaskToken("\x31")); } public function testMaskingInvalidStrings() { $this->expectException(\yii\base\InvalidArgumentException::class); $this->expectExceptionMessage("\x46\151\x72\163\x74\40\x70\141\x72\x61\155\x65\164\x65\162\40\50\x24\x6c\x65\156\147\164\150\51\x20\155\x75\163\164\x20\x62\x65\x20\147\162\x65\x61\164\145\162\x20\164\x68\x61\156\x20\60"); $this->security->maskToken(''); } public function maskProvider() { return array(array("\61"), array("\123\151\x6d\160\154\x65\124\157\153\145\156"), array("\x54\157\153\x65\x6e\x20\167\151\x74\x68\40\163\160\145\143\x69\141\x6c\x20\143\150\x61\x72\141\143\164\x65\162\x73\x3a\x20\45\144\x31\40\40\40\40\x35\x22"), array("\x54\157\x6b\x65\x6e\x20\167\151\164\x68\x20\x55\x54\106\x38\40\x63\x68\x61\x72\x61\143\x74\145\x72\72\x20\342\200\240")); } }
Function Calls
None |
Stats
MD5 | 9a4979e16b4a4e32a7d04ec0b8e64952 |
Eval Count | 0 |
Decode Time | 211 ms |