Revision control

Copy as Markdown

Other Tools

# Test cases created using the reference implementation https://github.com/cisco/hash-sigs
# HSS with 2 levels:
# Root Level: LMS_SHA256_N32_H10 with LMOTS_SHA256_N32_W4
# 2. Level: LMS_SHA256_N32_H5 with LMOTS_SHA256_N32_W8
# Signature signs only root level
PublicKey = 00000002000000060000000324fa7601ab93e539a3509136aca588aff0b8840fa459c3c1fd00e4212f85a280a1e3f35e9f42fa2fd14394706426eb90
Msg = 000000050000000433d2fe4dcc7de5604114b68cb77e1daa6573aa17df94f516109ae9743c1a9300052dfc3b6b33fe27d0db3064c23daa21
InvalidSignature = 000000000000000400000003a6391ea95c206bb1f17e1444f4557580b8d7ce580773c159c4eca8f12dc5aba7080f2e4f0af402ff44195ec2cc9ef338cf072bcb792cf8f97fd60f4c1fd171aaf741665a1924942122988c5ee7280b74c2160fb4004d957b75299838bfe3d9daa1848f3277220ad1f97578f0b44efa9e88627b3e700af1475c311245a898d3bbb708f065c3e1aa85979f5b57f94dddfe3444f1841b44438c526eb9d3456f617cec51fbad86aa39a06bfb3464c557e46d4b4e8fb1a1dd310b23466bacc9cb583f3099eb3a9bd6bb32562b3c152df94fd67e402fcb777ce8e71388fba1ed84b5f738ff9439e7e15829879e76dc36f0b9ecf3c8b4861851db88aa553025bb6bf0b6ee7445343dd575b8c8c73f5f43abe4dc543e13e59c2105d17ff12228cb03cf87a28f453cd8450fdcc107372ced5dbc4d9fde3b5bc92ee833ac475ae090cfaffda6db9e7a8d9ae795cab9a4b1bdb94dc4fc362d16bd31344a9d689301daec2041be493977f7fd8d73f1281b4d176ce0cfae46308686216793d429a71fbb9badb6aa1df8ca4020bda55f9dab9799fec922ee898e8f7dc7271653b396893abeef79217401e5bc70243b35c3bd4a9bcb4d0e83a31fb7caf3de2f547dafdd50cb82d93dfed1625f5926fec3c695885e021bd28391774b9d8310186ec5179b43a965ec84daaea6ab35c95cba4f153da37657d9c347ff5e8e67633f68b0c05a9c400e116091a9370fbc8f0736a4b85fe5e3b1b6bcd2d3729050b157019dc27bd02fd52d89959cdf74d3a0d1bf4d598e64f49bead0e3b980c0bef524aae4af1417377e2142b31518c4cceee6ba4d46b9973fa9705cfc0cc7ae41e97e66857c0b985a427bf2b20194f35f08e662c0b0ef151b89b1750c73a1ae786fdc0e03c3099fe41efe365993bb9bf13f1faf6349825d477d9c799e861704ea08337224332dde0012cd9fcbc7971eb7c10b1251431c079285dec4d3b957ccd8ebee7cad591fdc86eed8a82432b1ff52df1217008e62e614c0bda18f3fb06d247063c8ff570044f56c5b7e03693f7095babacfa81ce56f2746397a89c752cd91c532a9e468340e1557c4167316ae2eed4a483c34703fa7acf64aa700f7ef3f1480c2ffe0283d41b7b4085f4ef7210919cbc8d36c6871856a04be79a5e9893a2874efa6e5f1d9739ecac5e615b6d2f48bb3bf7c299371711021e614ea8b5253ec2f0655723e4165157a8543473d848c050e83568a6cd4f179b698b63e8fd16d50cde116cbd38b0048dc975d49afa6d6749d8efb467c5ce5bcbcf8fd9c31c6666bfab5ae2c7becde50a0f6dd7c40b054933f811c0793548675026437211b998b1befcf251648e25c0c67e1440bbb7c8e8766b2b7d994bbf8602be2acaf8869dc98cf1461e78f451d2c810216b405a38fac33051fbf7ef0239c3c0325504de5e73c5caecb9a7a8423b3174acf1d9770523d107b5379122a23439654bfe2f443a765875bdc893f00681e1ce7d127668b54e854d5194dd0968b1f7ed65f5e8908efa90928098b8a84970f6e7174f28a635850d7fa7e01d3b5f387a15237fcde359f56fe08a652e75652eba9a4bc000d3cd94176f2a71fe2ff8f63c4645eb6a406bdf95011ee9ad218b4b016875e592eeb8af6aa75806988ee984b2b0a946d220d1ebbe5ba07132c318981a30fa9e77c9f67a213f605155f0cf482c8330c214ccb4adcccf79ac3fa1f56b567b0ca1d26d9157837a040095cff4ead264b9b0a41164faa05fbeb3394bff15909f2f3a72d17eb194907622c5a350d4958df63c969bf4f8150697ec25755b39df9addc22fb057255d4e306572f3b30ec3be401101b8ba45e1e64867d85bc183786f334cebf0ad7ce7e1e5adf79e01fffae1b2eb5e5ebfef8611f1c72f6cb310cff200b6150450a396f6ad31f72f72da0498b88eb805cbd9f8e48229fab6208e3c545845880f5d7c2ce82ef53027596feab8828a85021e3d46271d1cba191e9b3b0e1773e0c9359e4e7d5ad82d60ee26b0dc5ea4676d3afecc1a7130bd4ed2150784748128e7879c04f088f9740ccde1cf286394a249d7a1867859e0f8c78e439b2b0f96a174c4346485dc9b4f27541c2bf6166e684f546b60deca9f2126705a4a4453c500c2bc4cb6002371d89f34247642b6a4d8c4bff98c63e6bcdf78dcedd0b27dd2bc0f9a2c6dcd945a56e0a2b6db5761150b6989e6f69543455ac22053068020fa6e1a84f05516ea5743fcd7b65995047e8274dadcdd4ba7708d26637855bfc2c282ac86113fa0ba5234d802b2c4f4f4b49c8ae2800d8e036573ec8e6ba509f9592d1e5f569307c266ccae492a738f084b5e19d33ae0a83687c8970326e8423baca398e3e0da4b7d1dc5e29011ca528b39e7387f676574e9e7252768f7f6e398f31233d248ef757ace08df1da275b3f463b1081cc80c2bf252dac6170940491d2024c979869be6c44f81ddde792abc728f9752c6fbe6a434d176dd6fcb5ddda6edb25c8c1342b44c5db5a63115d0c1a553e83d1468b2effa13965b30ecd36b048412ee4e94b8884b3962f70c4c90717a61285e03f839f5332f128578b99d5a5ef349370e6aca168e549afa5542a222ff7da757a179491904e27f3f7875d1b74ecb13b007ba12f8250a2a5d3c8771cb28c65d5f08b6b71ee5ec5a1caaff432e7084935efd216fc1aefbea9357a0c2169a7379a7752830823af65a69640a12099c757e5a4a36cfe16ad03d7ec8073d8c53e75ffc87f68ce41df27cb07897df1c0efc7be4b36b8e115645deaebc6da5fa2012d6e306049d7b48e2d1ed61ccc67c953177c3f6673127eb33f13983b8a5c686c16360ebbc116034f9cfd53698f6bbe4183ca5ba510301cc109058efb9ece9a497f0568bc39c6fa3408b8fa5d509346f813573312a31d47a16dd5c376f67b8c5a81c9cae72a205ca5bc53f3cac5b7983bd300b5e909eba6418c8c4b38246259bcec7f56bfdeb89395fee0673c84017201dac2f0c6e48a810e202c445715e76f6b008df3a43aa06b0ac1b9410ead0f52a68a3af94fa517f65381d7363126ca793a901cbc7fae2c3689c25eccd2b63fb0000000068400814de2eb6f52766beeb27d3cefd7246cbb6734fbd7f55f40648fb4ed8bb0ab2feddcea6451cba949f9a63e644b0a5793a49a3c3d7b1f89fcbfbec62b84e6b0ed1018d99aaf3884634d5a41ebc577991f0ed496b98e44ae25ff3df635098944abdc9e77353e61541aaafce88f05378787f8d6a4dd2cf3dee37045eb86b12114a821a12a4ad8159dd276fe85aa09a94de1b2bb7e559ca6896e19ae53eca7539d33ff6f58bf1cf097e313ad44bc6d6c5a796ff77f98c642ed82587413e162b58f8a23634fab60bf261da8058d9d2d8731f28f907cd5b8efdbeec5d83d59621daf220114dbc06a7a83be557e4c3535bce0ca9c7aa121f291daab84f361474d6a6a7e1c8be7dbce8969a6a5aeddc23fcb3b096d41ea0c523079b63c53eeab1ccb811326d7186cdf89c2f3706fdfa6d310242091cdb0c7d98de70ee5a2a03af5cf
# Unknown OTS type
PublicKey = 00000002000000060000000324fa7601ab93e539a3509136aca588aff0b8840fa459c3c1fd00e4212f85a280a1e3f35e9f42fa2fd14394706426eb90
Msg = deadbeef
InvalidSignature = 000000010000000408150015a6391ea95c206bb1f17e1444f4557580b8d7ce580773c159c4eca8f12dc5aba7080f2e4f0af402ff44195ec2cc9ef338cf072bcb792cf8f97fd60f4c1fd171aaf741665a1924942122988c5ee7280b74c2160fb4004d957b75299838bfe3d9daa1848f3277220ad1f97578f0b44efa9e88627b3e700af1475c311245a898d3bbb708f065c3e1aa85979f5b57f94dddfe3444f1841b44438c526eb9d3456f617cec51fbad86aa39a06bfb3464c557e46d4b4e8fb1a1dd310b23466bacc9cb583f3099eb3a9bd6bb32562b3c152df94fd67e402fcb777ce8e71388fba1ed84b5f738ff9439e7e15829879e76dc36f0b9ecf3c8b4861851db88aa553025bb6bf0b6ee7445343dd575b8c8c73f5f43abe4dc543e13e59c2105d17ff12228cb03cf87a28f453cd8450fdcc107372ced5dbc4d9fde3b5bc92ee833ac475ae090cfaffda6db9e7a8d9ae795cab9a4b1bdb94dc4fc362d16bd31344a9d689301daec2041be493977f7fd8d73f1281b4d176ce0cfae46308686216793d429a71fbb9badb6aa1df8ca4020bda55f9dab9799fec922ee898e8f7dc7271653b396893abeef79217401e5bc70243b35c3bd4a9bcb4d0e83a31fb7caf3de2f547dafdd50cb82d93dfed1625f5926fec3c695885e021bd28391774b9d8310186ec5179b43a965ec84daaea6ab35c95cba4f153da37657d9c347ff5e8e67633f68b0c05a9c400e116091a9370fbc8f0736a4b85fe5e3b1b6bcd2d3729050b157019dc27bd02fd52d89959cdf74d3a0d1bf4d598e64f49bead0e3b980c0bef524aae4af1417377e2142b31518c4cceee6ba4d46b9973fa9705cfc0cc7ae41e97e66857c0b985a427bf2b20194f35f08e662c0b0ef151b89b1750c73a1ae786fdc0e03c3099fe41efe365993bb9bf13f1faf6349825d477d9c799e861704ea08337224332dde0012cd9fcbc7971eb7c10b1251431c079285dec4d3b957ccd8ebee7cad591fdc86eed8a82432b1ff52df1217008e62e614c0bda18f3fb06d247063c8ff570044f56c5b7e03693f7095babacfa81ce56f2746397a89c752cd91c532a9e468340e1557c4167316ae2eed4a483c34703fa7acf64aa700f7ef3f1480c2ffe0283d41b7b4085f4ef7210919cbc8d36c6871856a04be79a5e9893a2874efa6e5f1d9739ecac5e615b6d2f48bb3bf7c299371711021e614ea8b5253ec2f0655723e4165157a8543473d848c050e83568a6cd4f179b698b63e8fd16d50cde116cbd38b0048dc975d49afa6d6749d8efb467c5ce5bcbcf8fd9c31c6666bfab5ae2c7becde50a0f6dd7c40b054933f811c0793548675026437211b998b1befcf251648e25c0c67e1440bbb7c8e8766b2b7d994bbf8602be2acaf8869dc98cf1461e78f451d2c810216b405a38fac33051fbf7ef0239c3c0325504de5e73c5caecb9a7a8423b3174acf1d9770523d107b5379122a23439654bfe2f443a765875bdc893f00681e1ce7d127668b54e854d5194dd0968b1f7ed65f5e8908efa90928098b8a84970f6e7174f28a635850d7fa7e01d3b5f387a15237fcde359f56fe08a652e75652eba9a4bc000d3cd94176f2a71fe2ff8f63c4645eb6a406bdf95011ee9ad218b4b016875e592eeb8af6aa75806988ee984b2b0a946d220d1ebbe5ba07132c318981a30fa9e77c9f67a213f605155f0cf482c8330c214ccb4adcccf79ac3fa1f56b567b0ca1d26d9157837a040095cff4ead264b9b0a41164faa05fbeb3394bff15909f2f3a72d17eb194907622c5a350d4958df63c969bf4f8150697ec25755b39df9addc22fb057255d4e306572f3b30ec3be401101b8ba45e1e64867d85bc183786f334cebf0ad7ce7e1e5adf79e01fffae1b2eb5e5ebfef8611f1c72f6cb310cff200b6150450a396f6ad31f72f72da0498b88eb805cbd9f8e48229fab6208e3c545845880f5d7c2ce82ef53027596feab8828a85021e3d46271d1cba191e9b3b0e1773e0c9359e4e7d5ad82d60ee26b0dc5ea4676d3afecc1a7130bd4ed2150784748128e7879c04f088f9740ccde1cf286394a249d7a1867859e0f8c78e439b2b0f96a174c4346485dc9b4f27541c2bf6166e684f546b60deca9f2126705a4a4453c500c2bc4cb6002371d89f34247642b6a4d8c4bff98c63e6bcdf78dcedd0b27dd2bc0f9a2c6dcd945a56e0a2b6db5761150b6989e6f69543455ac22053068020fa6e1a84f05516ea5743fcd7b65995047e8274dadcdd4ba7708d26637855bfc2c282ac86113fa0ba5234d802b2c4f4f4b49c8ae2800d8e036573ec8e6ba509f9592d1e5f569307c266ccae492a738f084b5e19d33ae0a83687c8970326e8423baca398e3e0da4b7d1dc5e29011ca528b39e7387f676574e9e7252768f7f6e398f31233d248ef757ace08df1da275b3f463b1081cc80c2bf252dac6170940491d2024c979869be6c44f81ddde792abc728f9752c6fbe6a434d176dd6fcb5ddda6edb25c8c1342b44c5db5a63115d0c1a553e83d1468b2effa13965b30ecd36b048412ee4e94b8884b3962f70c4c90717a61285e03f839f5332f128578b99d5a5ef349370e6aca168e549afa5542a222ff7da757a179491904e27f3f7875d1b74ecb13b007ba12f8250a2a5d3c8771cb28c65d5f08b6b71ee5ec5a1caaff432e7084935efd216fc1aefbea9357a0c2169a7379a7752830823af65a69640a12099c757e5a4a36cfe16ad03d7ec8073d8c53e75ffc87f68ce41df27cb07897df1c0efc7be4b36b8e115645deaebc6da5fa2012d6e306049d7b48e2d1ed61ccc67c953177c3f6673127eb33f13983b8a5c686c16360ebbc116034f9cfd53698f6bbe4183ca5ba510301cc109058efb9ece9a497f0568bc39c6fa3408b8fa5d509346f813573312a31d47a16dd5c376f67b8c5a81c9cae72a205ca5bc53f3cac5b7983bd300b5e909eba6418c8c4b38246259bcec7f56bfdeb89395fee0673c84017201dac2f0c6e48a810e202c445715e76f6b008df3a43aa06b0ac1b9410ead0f52a68a3af94fa517f65381d7363126ca793a901cbc7fae2c3689c25eccd2b63fb0000000068400814de2eb6f52766beeb27d3cefd7246cbb6734fbd7f55f40648fb4ed8bb0ab2feddcea6451cba949f9a63e644b0a5793a49a3c3d7b1f89fcbfbec62b84e6b0ed1018d99aaf3884634d5a41ebc577991f0ed496b98e44ae25ff3df635098944abdc9e77353e61541aaafce88f05378787f8d6a4dd2cf3dee37045eb86b12114a821a12a4ad8159dd276fe85aa09a94de1b2bb7e559ca6896e19ae53eca7539d33ff6f58bf1cf097e313ad44bc6d6c5a796ff77f98c642ed82587413e162b58f8a23634fab60bf261da8058d9d2d8731f28f907cd5b8efdbeec5d83d59621daf220114dbc06a7a83be557e4c3535bce0ca9c7aa121f291daab84f361474d6a6a7e1c8be7dbce8969a6a5aeddc23fcb3b096d41ea0c523079b63c53eeab1ccb811326d7186cdf89c2f3706fdfa6d310242091cdb0c7d98de70ee5a2a03af5cf000000050000000433d2fe4dcc7de5604114b68cb77e1daa6573aa17df94f516109ae9743c1a9300052dfc3b6b33fe27d0db3064c23daa210000000300000004e59c87e946e6fefcf4bcbbed83d7b124f907a0d383a7c8b85aafe870272afe93663038a509b97210339530250ec470aa465fcde0290622c433d97190c09b16423c4d16fad30c4352387972a189aebdd28cc145b57c93da2121d4b75a31988dbe172243b1127fbfa5cf0a8079df0837d2b31ccb9092c66a69fe629b5f9e006c19123611a288c9455c469758992de721c402f00b5b1d7af0eaf1bc635360371e3ad18eda72a58241ef0195c43da9dfc2f425d042bff122b43615174de735e69c1aee9c38ca9cfdc6da8d5e25493d5f4eaca85496fdc601b1c6c866da4c038787097390974964de80b055b573cea1b9f4e528285eb4bce23015198e3e3b26a6a7c46cbd1d3dd4ebca33165ddb03de8f12ae90e7930f28ab7787bb56c0b24dbe0d3f4b452eb0957b9dfe7d06296afdad8efafe1a2ba4ef22bf00f61aeff94183b5494d7274b05e935dbdf648b72eff38be31c238192598dbfa3ddc1f4cc320e5bdad5243c6b7ca99c6d4dfce6d61e04cc04bb83ec188ff6ddca4051999651c6f184b58f3bbeb1823c21a751d2e8b8b39b2a24e583338133a78694b56583ec326cf4f5c26cc6bdcefff450342da9a9c064875b5f5a66ac80c1faa5056eca2bfc1466a0d01484117a0fbe807fe44d0efd3d15e8f139c67fbdcc3d30ab0963ecd9f2587100deb256d59d029ed7fccbee80efca0a6621ab7875dd98285cf2303a7b1fee2899f166b7e95c66147af1c9bad3eeb80c8acff8de18848e8c050e0b61a7561ddf0274f0a0ddf9ce2659b1ff2924e20fb0765c91c811b3421c1fe42bb8b983e514e3682257b6d5a83b2ec140bfd7c7932ab2d8326670528ec0e86c12dea14cb04add94def350ac605396471b607d44d227787db956b33e3f64aec805387be0038aa5630266c3265860594bd0275a2f029431485cb98f3f40992639a71d51317c23cd58b5e4fdbc718a628a15a71dd4fd133e9e526f8a18bf9645ba45f2f0c0f0ad5b9e4e7cf1a32d78e463599d0c706a62b145769c257e5eb84492b23966857c8297602322225036a8db0dc4195ee56ff2e5895505230b5234524d1d48b4a6ee6ebeccf578300888b2b0134b6be8cbf52502de22bfbc93afc6ca43df95b25899209dda7915ba13b81ab07fc2ef79875423d551b7592c13a0173df398f920ccbeefa05264a1cb6ad755c74c4a29e827b91fb3f4629cdd4f1eabb76ac33eae31e2dd19c773666a9b2f6f154e773c2ee0c01a256cadbf46865a2d34888726b2b19da250214c62ef956d6437d6e9bb2630764c1ac002985d84a583e458bedac766fd9034379af56015da59cfd014bd38c007ae4c6600fb958ad6e60696720bfb7d6668fc787d8c550678b21636f9e43ecf4a21bd706ecd082fbc654d46bb2f26ab6891c9668a17b96469f68f1318740cbcf7e9b6fb1328ea02912e1f1aa939ee6e6777b7281e4bb7f2bb723e3c3cd46cf7fa5cf0488150e342e4a25935c443d17a249d87cf4be0488f839f9dafba77d4eeac7818db6cf9288d41f8ce6cfc6d2acc8fde24feb41810a6ac8062c4c5a19706ec58bde7b0372273238499893563cbdde0f000000057db7cde50fbf0d556f6561be52b4ad591f48c6c147e5ae8ae8c7f979344435664871517c9b54c7e0582f0bea2103038b8de8dda699a520abb877c67aaea7b595712fe986fb30de9a455ae7792922351c22a38988c36cf8a85e1f4f38bbb4b766c744dd67ee2ee37f8fdf4fc34cfcddcbef6ad9db57dd9819ce922fbd164c583a7ce62bdbfce7e730544ba22e3b17927d85643018a2e6aa981dff9fcdae43bee0
# Empty Sig
PublicKey = 00000002000000060000000324fa7601ab93e539a3509136aca588aff0b8840fa459c3c1fd00e4212f85a280a1e3f35e9f42fa2fd14394706426eb90
Msg = deadbeef
InvalidSignature =
# Too long signature
PublicKey = 00000002000000050000000461a5d57d37f5e46bfb7520806b07a1b850650e3b31fe4a773ea29a07f09cf2ea30e579f0df58ef8e298da0434cb2b878
Msg = 54686520706f77657273206e6f742064656c65676174656420746f2074686520556e69746564205374617465732062792074686520436f6e737469747574696f6e2c206e6f722070726f6869626974656420627920697420746f20746865205374617465732c2061726520726573657276656420746f207468652053746174657320726573706563746976656c792c206f7220746f207468652070656f706c652e0a
InvalidSignature = 000000010000000500000004d32b56671d7eb98833c49b433c272586bc4a1c8a8970528ffa04b966f9426eb9965a25bfd37f196b9073f3d4a232feb69128ec45146f86292f9dff9610a7bf95a64c7f60f6261a62043f86c70324b7707f5b4a8a6e19c114c7be866d488778a0e05fd5c6509a6e61d559cf1a77a970de927d60c70d3de31a7fa0100994e162a2582e8ff1b10cd99d4e8e413ef469559f7d7ed12c838342f9b9c96b83a4943d1681d84b15357ff48ca579f19f5e71f18466f2bbef4bf660c2518eb20de2f66e3b14784269d7d876f5d35d3fbfc7039a462c716bb9f6891a7f41ad133e9e1f6d9560b960e7777c52f060492f2d7c660e1471e07e72655562035abc9a701b473ecbc3943c6b9c4f2405a3cb8bf8a691ca51d3f6ad2f428bab6f3a30f55dd9625563f0a75ee390e385e3ae0b906961ecf41ae073a0590c2eb6204f44831c26dd768c35b167b28ce8dc988a3748255230cef99ebf14e730632f27414489808afab1d1e783ed04516de012498682212b07810579b250365941bcc98142da13609e9768aaf65de7620dabec29eb82a17fde35af15ad238c73f81bdb8dec2fc0e7f932701099762b37f43c4a3c20010a3d72e2f606be108d310e639f09ce7286800d9ef8a1a40281cc5a7ea98d2adc7c7400c2fe5a101552df4e3cccfd0cbf2ddf5dc6779cbbc68fee0c3efe4ec22b83a2caa3e48e0809a0a750b73ccdcf3c79e6580c154f8a58f7f24335eec5c5eb5e0cf01dcf4439424095fceb077f66ded5bec73b27c5b9f64a2a9af2f07c05e99e5cf80f00252e39db32f6c19674f190c9fbc506d826857713afd2ca6bb85cd8c107347552f30575a5417816ab4db3f603f2df56fbc413e7d0acd8bdd81352b2471fc1bc4f1ef296fea1220403466b1afe78b94f7ecf7cc62fb92be14f18c2192384ebceaf8801afdf947f698ce9c6ceb696ed70e9e87b0144417e8d7baf25eb5f70f09f016fc925b4db048ab8d8cb2a661ce3b57ada67571f5dd546fc22cb1f97e0ebd1a65926b1234fd04f171cf469c76b884cf3115cce6f792cc84e36da58960c5f1d760f32c12faef477e94c92eb75625b6a371efc72d60ca5e908b3a7dd69fef0249150e3eebdfed39cbdc3ce9704882a2072c75e13527b7a581a556168783dc1e97545e31865ddc46b3c957835da252bb7328d3ee2062445dfb85ef8c35f8e1f3371af34023cef626e0af1e0bc017351aae2ab8f5c612ead0b729a1d059d02bfe18efa971b7300e882360a93b025ff97e9e0eec0f3f3f13039a17f88b0cf808f488431606cb13f9241f40f44e537d302c64a4f1f4ab949b9feefadcb71ab50ef27d6d6ca8510f150c85fb525bf25703df7209b6066f09c37280d59128d2f0f637c7d7d7fad4ed1c1ea04e628d221e3d8db77b7c878c9411cafc5071a34a00f4cf07738912753dfce48f07576f0d4f94f42c6d76f7ce973e9367095ba7e9a3649b7f461d9f9ac1332a4d1044c96aefee67676401b64457c54d65fef6500c59cdfb69af7b6dddfcb0f086278dd8ad0686078dfb0f3f79cd893d314168648499898fbc0ced5f95b74e8ff14d735cdea968bee7400000005d8b8112f9200a5e50c4a262165bd342cd800b8496810bc716277435ac376728d129ac6eda839a6f357b5a04387c5ce97382a78f2a4372917eefcbf93f63bb59112f5dbe400bd49e4501e859f885bf0736e90a509b30a26bfac8c17b5991c157eb5971115aa39efd8d564a6b90282c3168af2d30ef89d51bf14654510a12b8a144cca1848cf7da59cc2b3d9d0692dd2a20ba3863480e25b1b85ee860c62bf51360000000500000004d2f14ff6346af964569f7d6cb880a1b66c5004917da6eafe4d9ef6c6407b3db0e5485b122d9ebe15cda93cfec582d7ab0000000a000000040703c491e7558b35011ece3592eaa5da4d918786771233e8353bc4f62323185c95cae05b899e35dffd717054706209988ebfdf6e37960bb5c38d7657e8bffeef9bc042da4b4525650485c66d0ce19b317587c6ba4bffcc428e25d08931e72dfb6a120c5612344258b85efdb7db1db9e1865a73caf96557eb39ed3e3f426933ac9eeddb03a1d2374af7bf77185577456237f9de2d60113c23f846df26fa942008a698994c0827d90e86d43e0df7f4bfcdb09b86a373b98288b7094ad81a0185ac100e4f2c5fc38c003c1ab6fea479eb2f5ebe48f584d7159b8ada03586e65ad9c969f6aecbfe44cf356888a7b15a3ff074f771760b26f9c04884ee1faa329fbf4e61af23aee7fa5d4d9a5dfcf43c4c26ce8aea2ce8a2990d7ba7b57108b47dabfbeadb2b25b3cacc1ac0cef346cbb90fb044beee4fac2603a442bdf7e507243b7319c9944b1586e899d431c7f91bcccc8690dbf59b28386b2315f3d36ef2eaa3cf30b2b51f48b71b003dfb08249484201043f65f5a3ef6bbd61ddfee81aca9ce60081262a00000480dcbc9a3da6fbef5c1c0a55e48a0e729f9184fcb1407c31529db268f6fe50032a363c9801306837fafabdf957fd97eafc80dbd165e435d0e2dfd836a28b354023924b6fb7e48bc0b3ed95eea64c2d402f4d734c8dc26f3ac591825daef01eae3c38e3328d00a77dc657034f287ccb0f0e1c9a7cbdc828f627205e4737b84b58376551d44c12c3c215c812a0970789c83de51d6ad787271963327f0a5fbb6b5907dec02c9a90934af5a1c63b72c82653605d1dcce51596b3c2b45696689f2eb382007497557692caac4d57b5de9f5569bc2ad0137fd47fb47e664fcb6db4971f5b3e07aceda9ac130e9f38182de994cff192ec0e82fd6d4cb7f3fe00812589b7a7ce515440456433016b84a59bec6619a1c6c0b37dd1450ed4f2d8b584410ceda8025f5d2d8dd0d2176fc1cf2cc06fa8c82bed4d944e71339ece780fd025bd41ec34ebff9d4270a3224e019fcb444474d482fd2dbe75efb20389cc10cd600abb54c47ede93e08c114edb04117d714dc1d525e11bed8756192f929d15462b939ff3f52f2252da2ed64d8fae88818b1efa2c7b08c8794fb1b214aa233db3162833141ea4383f1a6f120be1db82ce3630b3429114463157a64e91234d475e2f79cbf05e4db6a9407d72c6bff7d1198b5c4d6aad2831db61274993715a0182c7dc8089e32c8531deed4f7431c07c02195eba2ef91efb5613c37af7ae0c066babc69369700e1dd26eddc0d216c781d56e4ce47e3303fa73007ff7b949ef23be2aa4dbf25206fe45c20dd888395b2526391a724996a44156beac808212858792bf8e74cba49dee5e8812e019da87454bff9e847ed83db07af313743082f880a278f682c2bd0ad6887cb59f652e155987d61bbf6a88d36ee93b6072e6656d9ccbaae3d655852e38deb3a2dcf8058dc9fb6f2ab3d3b3539eb77b248a661091d05eb6e2f297774fe6053598457cc61908318de4b826f0fc86d4bb117d33e865aa805009cc2918d9c2f840c4da43a703ad9f5b5806163d7161696b5a0adc00000005d5c0d1bebb06048ed6fe2ef2c6cef305b3ed633941ebc8b3bec9738754cddd60e1920ada52f43d055b5031cee6192520d6a5115514851ce7fd448d4a39fae2ab2335b525f484e9b40d6a4a969394843bdcf6d14c48e8015e08ab92662c05c6e9f90b65a7a6201689999f32bfd368e5e3ec9cb70ac7b8399003f175c40885081a09ab3034911fe125631051df0408b3946b0bde790911e8978ba07dd56c73e7eeaddadd