Berlian Gabriel

UIUCTF 2024 Writeup

Key in a Haystack

Finding a prime factor via small subgroups using Pollard's p-1 algorithm

Problem

We were given a flag encrypted with AES-ECB using a 40-bit prime key. The key is then multiplied with 300 1024-bit primes, and the result is given to us. The following source code is given:

from Crypto.Util.number import getPrime
from Crypto.Util.Padding import pad
from Crypto.Cipher import AES

from hashlib import md5
from math import prod
import sys

from secret import flag

key = getPrime(40)
haystack = [ getPrime(1024) for _ in range(300) ]
key_in_haystack = key * prod(haystack)

enc_flag = AES.new(
	key = md5(b"%d" % key).digest(),
	mode = AES.MODE_ECB
).encrypt(pad(flag, 16))

sys.set_int_max_str_digits(0)

print(f"enc_flag: {enc_flag.hex()}")
print(f"haystack: {key_in_haystack}")

exit(0)

Approach

We need to realize that, because 40-bit prime key is still relatively small, factorizing key-1 is fast. There is a significant probability that key-1 is B-smooth for a reasonably small B. In other words, given a random 40-bit prime key, there is a high probability that all of the prime factors of key-1 are less than or equal to B, where B is small enough to bruteforce.

Pollard’s p-1 algorithm to find a non-trivial factor of a composite number key-1. It is particularly effective if one of the prime factors is B-smooth. The basic concept of Pollard’s p-1 is demonstrated below for factorizing an RSA key.

source: https://www.math.columbia.edu/~goldfeld/PollardAttack.pdf

All that is left to do is determining the appropriate B value. If B is too small, we might not find p because the biggest prime factors of most p-1 is bigger than B. If B is too big, it will take the algorithm too long to complete.

We can approximate the probability of encountering B-smooth key-1, based on how big the B is, using the script below:

from Crypto.Util.number import getPrime
from sympy.ntheory import factorint
import math

# Generate a 40-bit prime
count=0
for i in range(10000):
    p = getPrime(40)
    p_minus_1 = p - 1


# Factorize p-1
    factors = factorint(p_minus_1)

# Determine smoothness
    def is_smooth(factors, B):
        return all(factor <= B for factor in factors)

# Choose a bound B, adjust as needed
    B = 2**13

# Check if p-1 is B-smooth
    smooth = is_smooth(factors, B)
    if smooth:
        count+=1
print(count/10000)

It was found that

  • For 8-bit B, there is less than 1% chance
  • For 16-bit B, there is ~16% chance
  • For 13-bit B, there is ~5% chance

Using an M1 Macbook Air, it takes

  • ~8 seconds to complete the algorithm for 8-bit B
  • ~16 seconds to complete the algorithm for 9-bit B
  • ~32 seconds to complete the algorithm for 10-bit B
  • ~64 seconds to complete the algorithm for 11-bit B
  • ~128 seconds to complete the algorithm for 12-bit B
  • ~256 seconds to complete the algorithm for 13-bit B

Based on the trade-off, we will choose 13-bit B. With, ~5% chance of getting 13-bit-smooth key-1, we need approximately 14 attempts to have at least a 50% chance of getting a smooth p-1 at least once. So it will probably take around 1 hour to complete the bruteforce, which is reasonable.

Solution

Pollard’s p-1 implementation in Sagemath to retrieve the 40-bit key, using 13-bit B

from sage.all import gcd, factorial, ZZ

# 13-bit B
def pollards_p_minus_1_sage(n, a=2, B=2**13):

    # Step 1: Compute b = B!
    b = factorial(B)

    # Step 2: Compute gcd(tmp1, tmp2) where tmp2 = pow(a, b, n) - 1
    tmp1 = n
    tmp2 = power_mod(a, b, n) - 1
    gcd_value = gcd(tmp1, tmp2)

    return gcd_value

# enc_flag: bcb0ed5c0b1624929c58597737cb83f031ec0ad196614b13a4063a7389ab366d9e3a20b11613c3f8b5a6008eb7fa06a7

n=0x20fcd4a5ff34d2482ef105b34948b04dc14d2c4cff2b7cff3dc39629ca7f3c89d1b710647130bf36d2e2f5af3dd2abaa72625df10859bf1566f748472f5420ad8c33b932cb7be18bc451cc3861f2b566f89114fb3b9014073674b50c489cf14a7fa3add433d8b5d99da647401324fae737fa2526423fe12a83d2b5ae052c9d90f4eb20f0c460ed9be279aa5eeb0c769d67a9df49d4baeabf15bee04a07619ea0cabaf3828de620218d85772f066f95cb38d3b471de4d85e6d49e8c6eeff60b33c661c4d8aaf925b68145e8441d4e2df40560b89f09cf57f4dfff35dd93faa6db4c4b56dd4d52a47f0f80578c9de1ab5c36b82b04d6257ff8001477ecab4e8efa5073d5af9464f04e4c9d4afa2f4e677404ef6fbd2c0c2c80028cdcf801fa9661da05e7d81caeb7a7c974c43ce67d6f1ba1cce798c05172ad31a4adbd330a76958198f1379a48c3132699fd52dc3b9a12f5e632d2c79981e41e4664fbf4deb7965fa217c776c753446480025883284fc82a09967a37e4a22e00507cbe8644a5abfe04398d1db606c4d5f88d39423e0788779975411aa0fecf7fd670a54f7ce000eaad62b3d359b0ec6244a654c1fe6f63883045b9d69f8a74570caca4f978fed3faea5b34c8826813382283d12303d4a94e301b98a565d85742571824244522fde2bff9801184194d54be9358a0b928c1aa2182cad8a9eb4a9d37b9152225f6c3c56958100de3c23ea4a7beaee2497f2826a3c6097e5093d8182ac5897e682241f2a7cc6bd5dc270572ffd340091c7c82f22a528089263e98a109b1c2defe01a3c677e7046a48c01739fee1b636e7c6568a3e02bed8875921d1aa26d19f58a5e6f9d3f4a993d6931d4b1d8ce3382b5a79c965cc78c1bbf882533a84a7952f9640358f07597b53075fd7cb4ff19d2c89f1ce42bb32cb21789f7290152fc08796d5840fd57048440339b1f752a4e6e39c6aa54721a05992f8d4769adcdcbf740430aa63af23ed225062f6aa0ca57df6e6ac553ee539e676cf52592e9c5a3087d015467ce0e3ce79a204cf995b826be3d5e365ba2398050a2a53d221d9dce8f41e00fdd2fb76ee81f2c7ababd4dcc579cb0af8e141ba0cb3a08d4b6a961ea0be569eca9c3f8051f377553fb7d51cc04b2fc43f90d530a14307576611dad56e0c2eeb0c8769aee66bc641b2c2d481733ae0d62b6e03f815f0237e5c08e2d43113779c5d999563fc160980f7f054ea84204cc4fa1ac5ac3a12ed27fcea488837d2b7e93fc3d75e024e1df74c03146d59aa57a35ad05a62abc60ed5afa17df0e86d80053aefa3c2adcc6dfd62fe929ee703c2da89b818f6748d6ac9f24b5392f0c3448f8dcbe2e39ffd942e356ac4d9ddde220b8accb927e0ee19775e74375513375895c8c8a5fda5b2ed6bc53fb5d9e6d8b780dff5ac092ad7ae152667a9730c1a9338ebeaf90299fea562897be2fa6c60196ce3deaa3ef5a853d04eab9a578b69236908c99b803203207cf18d9e57b0a30de9a41efd0ae1e8893e4e8d16fb32fc8ef4b780c66b4e446764dd3a84f922b1da91bffd0369bfa9a4cc1e57f2d4fd28fc0da9222d5a074cd0cd14eb2c1be686546d29de3d7213bda9553beed31b201b229f1942cc64e69852836e1a6ad8377dc48a9c54633e3269bc327e03a9000a2375dd84b58b1a6a74bd9b4f0abb1711280db0be67d36e4144dcecbd3ac0f15c96f2ca566a978c60a8fca43b9726e567335167da77b7e863051bccc545f894fc3656103198e2c15b669a5b32847b936f65eff9df2c2d48c29186554b3c57513dffdcbc53c4042b2e7250a07297a5a6e29092a982176519509cc738c5d99d41e94a81cfc4725b7881982d70f5d71cfb92a47fbff233ae5767e50e44e47bc2e0f326d61fb7e41bf96ad803fde3d7e0c9de781e7a8f783920a1ebf14b743d0d702a67dc6a8afe08bd49ca9d7f09f5197ac6cd859e133d0aa5156450f61de01a1659be7445631822ce04e3158f200c29510a5298deb8337f7277453fd871f310607d764b7c5da48d3f49e9529cde4cea41e4d75e7e57636de98b88b595e00d7095cdbcd295de65f6e657d54473bec96177de84a53d214d8a65c407df4802433201749f1b1d2b17e90c99cec866c3aca5433325ee5a79e8f319dccf16be48dd0386481c24fdcabdcadeeb85452cdcf99aa3e5649bea0ade18abf88472b94f6e5f74efd53405f5c18e69fdab8e9e3a5f5952f6884501ef296e14581a9af5c722667ce1cde27da95bdce82608d5387de6a549f93955a8765310cb18cc77c449f538d8cc91632aecd3c1f46be5311e034c7a023baefb56d0059c2a8f4554729c651f796f78d51d11e731ca7218fc402cef5446e12a3628bc330e2fd25bc4e801c4172e2e9e18bd0fd35b53ffdadfd5eedfeb1d4dfb20ffd3b51012b587ce1a0aceb685918a95e2efe183a017292a9d7a2ef67aed41acece21f891020baea6f11b398e1ef95da1e96ffd974a4dcc2c2283e0c942f650c8cc5d2534c5cbbabb9216be1862751896a4be0327f57a399cd4e3aeafeba30f02cdd054d22c3d59644d0b22ff6d230d3cc943b164d995f4e2290b3806a34162393619df5ae38fb6465827b035461f353f08edbf153692393015eb9d99395e8adfd4756c2d6f57756a2bc0684c12371a6f63ee6381859f40bae9b3aea039caa8afbd642b68fc9dc78e8b2b60db3a68e7b1c3d10d9855bacc96e1902bf1e08f988354388743b57eb4de0b1b664e7ba1531c3bfec4667fd265e1f9f900f38236bf5daa5846af4e9ce68b3fd748c1d2e1aecb71c59eca4f1b83e461db23e7144825862d8ec79841972049984fe40801db0bef3c87cb54fb78ce06bc9857ad49450451229e4c4c8b3d25cfe01a5e84da656024d298b4c0db0d717ed100fae95a146bba856fcd4dba2518b18861929d7fd66254e24f4ef6601ded94d7e00571db7cbb88d901e1898f7a859497fd2573aae306dc09ffdbb7c0443485ae8169e2bae827b19b0f4f0ac424f0ffb9ac544dc6a0ecf7ad178803f338f547b3bf99f243ef3e2845a30953f30aa54a1d0776dd892742ad09681edae6ece6d4a1ef1c7228b019cfa86532da86727b9805fdb6cb863937c82f5f629556f592d61f7231c1cc0165b32830eeaa9412fff879b42a225cef7859d3ff03e77b21e3c9024afdb9c196705385931489b7640eb224e107a9b7f6383988b306d4c6a731c81a274b387a0a5664d37b15eb042f4a37dae5232225bfa0b727663627a6b66813ca9ab0638fae0aae92b34d3dad7584ebcaea955b23360e2f6dd6c935d5005fd15a31f3b0b2f9107691facd1c490fe5a0e24370b93ed8fdd7fc573cb148055d7185f1b1455d1af674f3ead2e52a737aded0de260c85a25714e9df17c370c20f6e117b79bdb791936e1ca0697fc710de2d96563561a56ecd3ba149ab09eda9a21499c62c7595836da9373ea7e5529d8697d2892d9ecb99bebd6dc3b6dc78586424c7492f744a0a4c7a36dd4486518aa580b5e3d820fcf116ce5e617fc01228976edf37e6fec4e03d927f741f18fc5fd293e9c1d7faf16f93efd5011dc9fb3653c704a22ae10374db808790a82ffa48546f5b0a608811c4551df19f00b5251ee0eba0419c46d8df31dc9a8c0e6a4ab07fdc1cb4e86f6d0ab25e6d8fa32d279e4747cf5852dce3fab7119b289257b346efccc73663c37dabf2b19b02a9072e60c1ee4163587b4731bdafe359e1e792ade110086b255ef3accf5d5be889845c27789d26be14c3479813ca2a2f04b38f747d54ee90a1ad445ff6b1e83e01abe1e2b8b23e394675a461b019bedd63f709b5193b5e07995eac0b22aa1423e3d8c7a8f9d5c5d57b5688cfc9c1bcea68fd90caa2346ec68cd3698b6e630f95009bf41e96b5d898fa3a226707265e8580e3b71dccb17edf39d04b5927ce9f1cdbde17f1e9b7622cc5acbab8f4c8a4ccbdca4f729b5ecacb3ae472b1189f1bcb0d009d0047b958a3f8d115924f496645da12acae247a56068cb35e1e6af5bdb5ff83e50afb2a0b247c2be4de1cf43b16c54d3d9de60a5ea1001d658480e389fbeeb3a225b17fd5822248ffe24eff6f2d95658704699f19741052bd442fdf92deec52234e26462303fc606c8dcad7a6b40548e256e9e41b885f5bdd873bc51b8b348b8a46ae0de67bcd55d3464cc60c8caef7f8a16933aafc68def597bfb830699424b7c0ff6f4e465a210d9c6db6cc09a2f6e47492c5c04e340a7011c3e6dd01e946b0851b9d89bc18d0ffb8c97e6bf2bfb46aaf1bdf349aa61f97be9c41231e301803b16a6fbdf08ff72c5ad2d308e40110ad3e6eb9f0659df84ae214a58c943a847253bd9e9d6a31adbb606419c68d7a77603d7200124c59363a4dd5e9b0dc5a6fbb2da7c3497a248ead4c0915b055df9c1b327c08f7cb640bfec37364783189080f8a8f3aebb3328f81fd465bf61b83129b25caa83c5c69a3dbafcb2d5bbeac4902fe83bf11a191cce53f203fde110a44b029647b4503b3fa241dbb905863a476d0de18e89aa4da5b32bd39f13bd175b92af94fb80f951cff8c33f06dafce6b2ff5889613eb2fbc8c9d1381e0aa116a653cdd9a6652e7f34127f0989bbced7cf49985be0fe61fc918f21fae7fee74807ed00c96690dee76cf640431e0cd8c73fba0afaa3e54386f1be5caf342757d06c43900a8a46e2dba0c5af268a49356bbe24fbfc0ea5048b3007723186c03b0118208d275b714e3131a24cd75179b8fff4f0e2d9fed8521a1894f345867fbe6c70d8cda2c32b78ce2a18b3cf14b89e310d2b703208609ae8b52058be5101d79b041bb0dafba68ac1f56cd4f382f34c6d654b49819cc9b26d10fefa036cf718c0e65eb7f45087e01ab666ebb9a863aeabef417ce7ac5856f7f1612bbf3940b2165099a12045b939de0ab3c97b5cab473e24b178882f6b2edbcbc2d557da0fcbbfd2e3ba957037b070390b66a94dd1b057c2cae80ba2ffccac2b07632df80d888b5cfd9b5f470204b23df6b9cad8be11b582c5e02647031ca3b7eed73b963f5d9d068552c133d8a7c63ccab65ca9628d53d252e0d8c4788c0d9fc0fad2ce7953e408b99ee1a4fa7ca466cfc8da67b415824156a8574b40367afeda9da0f8c3cc785081494c889c1a59c2611fb4547c3474e6f35f08ad1cd49373bf52c3abc051a9127f961e69613d795a18499d90e9f4c879341b37955f6a5b55a2ab49994447b17d7ccfd266716f811632ad384e6166f836c933a9da3962ab4e34f27b8254e07974da9dd3566043f4fead8ea121da5547b41801403a89b69d6e3e202114344f98a421f2612a37093b6792a0e977b6c003baba5c36548fa10b069dbf8aee8332e461c787d75599948d85862051e48a645b482093f6099b3c8e3d333327a4ae6794a3fe81215bc0e85254882d4659ba1fea72f451f8be3ef058a4533aa181366be2e3983f79ad0bf0c4a0193d1cc50c146c08cfd2be4ab228c77c357452cc6f8b01b0123533b2112aba84e05c3b15e1288288a456b126f84c9dbfb61b3f2da9099fe299936046b2693c8d23b52d3b93119753a8cbfb8188778613526b1694a8d9f8fe73a3689341ba6e9ae35d20b73114f05aa54c2decef8f3247a8ed729cee93e302e53b1cdc56b5c15bb45a943c4c92cdea8252ad73c5b841c32feaca6e105c6cafc0e3bd7dd1b4e94817398d689c8dd2a7b667171fa3fc40e4e214a476fe602e5b906dc74830158b17789d57d83527f4db67b65d7adcebb15c8bc39d3b1ff4ab696016a919b32ab113a2ec78d575f0f4158c503d4f4d86cf9f12a399adb8ec315f8c59f2590db72869a1fa784f98184f00a7901bbc5906802527328417f7bd24c940af0d30eb13655e38b3689ad3e43abdc71179c2945700c6c12d779158922060f2651005cea542b34c49a9c2b844bfcef6bb6974012a2ec87b74515fbf0ff01e88409ce51f0cf40d3ef650ba149e2ea6fd1fcb2437cd034717616e06b7ddf629d6f69e9f2436d084146fee5a3e73313fe304bc63ea679e264eac33b96e074e050eae1cebd143dc6c4e359b20755c908d54c3561cbbeedb48b49e1f7fcbed3f4e93f334e59df66b5b397732c63d7410e217ea1ca47088083a0a1c582ce09cf07980f8ef250a0472a963aa2f009110d9da74020d463b812cc41199ac0bb36ab536155c520cec33eecddb4fb8f59f02b6fd1688e2186940339550b99bb35df5b3e37fef4d499dbff320811427d67bb7bfa6ef83eeb9dc2ad5ea88a4bc8f448933f38465873e8e365619fed3f09c399332c88501c08b23e71be8213a592130ba71ee0d41a8cff0a1dc2b47ea8f6f44fd06ef6c3b7e20342bdc5659ef57b5abefc246ca791bca49f3ed68ee7fcb31c287e13a04e849a536ca0078cba672d67f39ab0b047e2d19000fcc25f93fdc8574bb92381a39d8157f7d8f2f03e8c7e8467e3fe78451478bd85645d5bd2d304d156d737b87d6a302126a994dca0762fe9a18e388ec0481c68a3a8d6e0bfa32c7dbaea6e4b090d3834544bb904f2fbab21d87a6bdb203c558632ba41b51ff1437202afdb23561a50049689f5c0fd013874ada9bfa5fa792cd410b1d44dcfa5df6f2b9bb46f9a173877b7d902870d1c1070c9790d887b4db2a7d16f8c27fe75f33e9e9b04d21c35d19b3bbfd28cff3a45b582975df6a73d37726730c31a4a17ed34040d704a27256cb61396001d4bd4b5c1a02468cec7782331c641662e20711af117aedc628c9f70f7f735a4e1d1a87d53f8d4982d8097c3834d8e7f9bc7c9719aa4c93410be1279f84a0abb46314421ee51c896e0eca6813523915d43e959276a37f964e222c15e912de560fa845df816a3f93109fd197633d10a794d11db4ef58c1c2c2536da4a4f1ffe0c2c3552b819017309d062c49d9984d98f971670841d4259c16f9603f0ef6f756c00c3956caf7540e0acf468bdabbdff067953b8ac2b9eded49fc70bf66934c28568d3791c14a56936d55997b9c98c112b766f298032aa4b830b7816fff9b41489127c2f9a64cd0f1e421148124e55c4b6dd124ab68dd2873c9de316a7cd054c7284d69bc390e27612a1aea3fa31f478e00c519447422916c0a286a2e516a5dbd90da2a5211231d89397ee54d7dbcf67ae77eaf4bc4dbffffcab3f401d106cd5845b8e5edf84c0608461f856265ef8e7babcf0a5779e9199f100e5c92a87c057fd3125788388eb287f094d4d2ca2ff2725c580b34222eaab32da23d7611a013ec42af6d7462a85e9cba7d0b76b69f7056c3b26f9ff6a9c9cd7d64408051ea9c9b1fc576a57eb7ed918b326f62821e7cf254321ac03f041987d336aaed04e178e98db4f207d03c5a82b586cf20121b0a63204522746abcca16149736af2a97c34d00989eca8bd036d8279c1529bc8d4c91512d95b058040e06825ce22d7cf2805a82ff847d039cf206ebd372982508b430f5992ae19fae24aef9365850a83782c75d61b749048855a135d7e75c4cdc8e51eeca8781392ee4dc4239604345443b1726128dfc310a8369bcf8d45a681e07579d4eb3746b0992a281df6e30769f961592c6e71b09ae79483d1aeb709ef88dc9306b76294c85b992bbda604061de62b4e24a56a6068f74a9e8d9012ae4b42a5433c0545327ab3bab8f6cbc05894c7b69ef31a4de86948fdf68112ef200c76cb4041affaa941aed245811bc05261822e6f85d287e6beab1ad411436cdcc024619a012f50690e20aa77b1777b06258d78e2581aa93c037ce5f18f40c92f10d2ad80b288de241265eb7dfae80358b1f76df6698d0e83aee77e457b57dc08ae48067768cc91ca314eb9ae7ba1966d44c2f45d088f0e279689e835907cbbafa7aab8b722b1e4d1faf8dc922f41e7f6fa17c220d5ab63253c298bf24f60ca4c23b4b308737411d45b733fcd6975625d40da1780fa17fc93b133ce70e693ad9b75ec764db09cd8dcdf03b31d1c89c4e93cf5a5560589487e209086b8310ef6120783c8f026d6f94c587bdef515511ed4fc0584e475160edd92f481fed0bff17a3e6a1074030a92e66ce5dd2d8726c6f90d7ab0e9197c23a2735c81069fda7e1ff0ad60ecef8ab74843883766149fa810f1b4ea93c051c1b6ba3b0d435b67817f7d8067e06dc4b990275015476a2c302412b06ba92f17bde0a04839c6cf5f89db7c00aa0d293d6981ebebe348ee25a42ee76bf4593f96bcd1ef90967429cfe307c5823aef7a73657b9f1a413bc80bb4ce4316adef6e623a508ecd121bc611426b29361191562fa7de2315ce08bf4cb8c274710e5ce38cb2c15b99c0664fcba118b0fd2a580ecbc846d4ed43ccc6f8aa353e1946837f852de3b10de8a0356e79d2921ae74a476a23d1cbd74084270bad06405d48fe14ab30bfd597077cd0cfc5931b21fece4ceea7120dab0fe05842cd51d872cd968e76d62c9f93c3a37fd1d1459210235ce3a0157274c8a863f125b30e6cf466cbf23ac37081c45e83c514ca667d9bc56bdcdf1b17042b47e110c26643e8746ebfe26139464780b262e5f335d2e77f08f799b101424bd583e3c68327416e5c4d5d0d00cb711c3fe0db4b9f9a71d74c3814de9216b8c10cbced1349cb4270171ee1399bc40ad26f7776f04f9b2b8cce23dd34270c33d9921399eb5c557205efc07b9be5cde875b6a3fe830ff20c555500b8bdac3dcd4e71e6fec202f74f5df2958e9e8aa18866ecbe34fa11de7b742afca320f9318865cb792ee8fc09d779be39a00b4c4a465b9ec4d8dd7503c421ae80a2374d0dcf91188bd43807cf983b25fd2116908c7e1cf757021226d1c4fa4de73dfa84954eb0e1b6cdc2dcf63fce3ffbfc6e8c6d28347bef7d193a18342c06320815f31a9088d0857ceae2018661df2503497f18e7dd64eb33dfc5e9457ff7c245c10a7b49072061212560c690732d08fb63c33cc76b69a718a8710b9bff3e1525c31b1e516748b265e454a06c9cc53721b122771b2751fc6e0e21513c2ff540c966b083b1868abb6678e1ecd95203d04cf4e4b0c4477ff392715af4a221b9527597f4de3acbb62fb0e5b67112ffd537a7d1e04a15d3760a24937f2ccb7d6af905ac6bf7d99bc30381b2f91146fe2d166a68a88adabc494c07f2c89b73171c864c935fb34401930e4faa2986892280585991a47448914f6d20de952d3e5a6b4e8794d9b579f11512dc112152591d415691db15bc2e537ba9d74f28cd459720ec962da736b40065e74f214d1efa8bac00f3c39d9da0aa6b5b14a117c3a16720289aef37fff055976fc5a58894ddd1424f81a15ca61edd7d684a1ce4b23bfa94a279ed0c32229248914009e3d5c22d377ec69ba79426a4e4f89f37e7ce544b9f640a6745e3f03df4b80bb4b5a2090d1b2b9ac5c8e711eee9a5fcfcc218bd4c66b9c5e93a540d8192e096cf1dab1f9bd8bfbb5af4f48ddca2e38d627accdb896d06ea3d1cfed303e08c82b1f6de45c5bfd2d75ac38a43cf7e8e1e040588cec3869162b28f386b1a4fd946b582153e0a5eb5078c15539604aa358c7290e4118888e9dbc4f04156110e91e45131f675ce7fd1edc5cc5ba855d8064ab5fc4af8a029dddacda6323a66b875b5f2a848a4c1b229a05155b8bf7601c2468b4b640a0ce54d8a9b956ee042bd396f31d4381797546c0d7f598cade92f5166b0aa427247c56ed5e3cc727b15dff65c47341e165eae24fb8c61b0cc04acdd549d712e68c5ec4eb8ee37fac6fdf9dcdfaf3e2c767e8282f146768a44c9f4d3c2936718d8ad9deb7b966bb956489b669262d8302593ada8be380d140db3b6b50b0d9303c711481a67df26687ea391a365c17793ac7650688b2d7b5ab16757d5fc9b433a269892503f2d943bc4af60bddf4ce8065bb04d7b1a4c6ac5975cea0f31e42e44ed0f9202a539c847630b524a70ab35f32128a8e14c79a17a9f6c05fbda46f60f9e78292d8c53b95386da708accb9908ade4a3508125ff54e366bf3620d9acde95d15c325a959b3bf53e49cc083303a02847303fec7863bd51ba6e9110985e1f963873eb66ecae73a79a075c0ef8795d50233cafd176a74dcb78ae3a35ad34e09ff2cd11ffbb487ddefe2e598a7919d18cdd1ab153da47747df82b57cb224f7a1f7ba201fa1395c347a59602aa27d74b6b8fffa837bdd0339a81254ab3496e08f0e2a6713105f128393cf756f4b2ef1c3f9e89097d3774288dc2f39beabccc3a81d94210cd94ef19fafd14a0cd1ba806308ba4750779eaf0e60f2c5e8a701e4db2e8c8c7248b16242e444fa1ff48348ea849198f62572b856731f5b146b80ace48d49c2c88a90f6810e4a204d7d113a0906d7c5be7b102b3de3c7849cbe2a1739e05774438ae8a5a925911a85135dd4be124b6881d482fc6eee8e2e7dc4f184ed749d860e65a53c5cdd363a037900729618030105b88734bb2912553ea969d23b6ab2cc04ec1c7d8d64b8ee6b2ee51429d9d6e186de26be706b27fea8e1b699917f35c2381d182011b0a78c72f63dd0c30d164078f36fbc1d85793920460ffe4d7243c9f3cb7f45bf4b63a81ad068efb6ccdd412fb4cab78e42887c0fec1046ec8439de2dcd270fcf106aef97713e7bd5d3699ec3889fe1f3228b86e346f4e4436966f24818d286993c6a227ddf84e021cadc25c2a39b380a6a297fe03a5871d6ab48229d35b6101e8dfc3864975550a51b16237a8f3c5732090597b73ea0a443185f558e1147c8799fadc2a25e8a8400c5d82a8be6d0e878452e9ae5decd5610a964c84598ffc66a4619dc4c3d6e26d137087761693b3bd4d6c474de273144800360519dc3dcfb5de77e90e8973922c8d37482bd1d6c1e97b0b55dd0c4c91062080308d0a42b919ac7e666dd517853aea33e7d9b474b288d36dcb81df30f764bbf2db6ecc35c7b37eb1ff82f7dc7473e6eda2d066477d871e71b1d16998f7bd934c1acb17863e0f07269e17d1ac6fc8be0bb65e6c134ae9b9456a196b999d955a8c9fe851294c4c55452dcfd2e09f22afb0a0b8bfbdae495ca7f99b928f09b9400a2a9cf56ef23df81f39ab71d91ed71803272396f0bb0e792481ba2a4ec89dc93dfce2223874f04231fbefe19845476b02f0350990f7e3cf7f2eac9055c157639d1f021331bcd0c10a5d9bdba6826b40386165cded465e24eba771dd3f6369a8c86df46ab691b50de62fdb3c7f826382bdc5e4e8fdc0850ab1a4ea80a3715d5ba1cdf1b8e6cda94413e50526b9fb9afd4e0217f2dac59d6ce28c434d4220d4ff38a9b4f4ca82243da8de0fcad0ffd7ef6fd45c6ac6a490bd67607db16386613f9345d3677d16e4d004eac31ebfa876357e37d6bce042347f9f14a0653af2e20e7c85ca7c70a1b5c8ce0cb97270e6d358552afbddf8eae1d725b8f31533b4f2577c692ca4c2b17baebd772d7294f05d10b4e5bc2b00c2d5e0300e1fc3e864b014c9498dd2324bc711f5e140e8b326fed22325db1cd991b0a559ff40b7fd780296a237efa891a6395ec0daf1d79e91175b7ec8b065a656f5138adfc8754493aef475361913c33e1cc741b62296d18fd7d271b4f2df0597af2ae918b6f5357bf7900004db8392c487915021af111c4f3cad39e4cd0ac76041fd9b5f7ccdd3d7982511daa20e545f8b4b69c4733bff3e25346b85fdf27dac4f849bd1ffc1560c3ce8740f15b3611c2d2e24cddb3fdf2187dd710ec3a62f339ec9f4e6c52b14eb11132e6dc54b2fadfcf1456faf487a65936d5dee32e17995dc91d86ad7bba7a92dff72e958a550f216706feed55df688e416db9d137f3d37f9fc7324397afac32f2326f7e8d27ac00fde517b1e998f5ca910d6a36e4c29759fdd1c2584ec35f883c3b34ddeb8c153e02087b9b010a928aab0e86fa32dac065d8f092755fbd85df2b504642eeb26751740c5c13c5787995ef47d3bbccf7ab8cd8c43fb71d5f1e750569080e8547545a7f4d5fa0d23b18707a10aec1570fec43a65080927f64e8299068d5ea4cddb037970d9e204ef24dc9b488d5b89a39afbc244c975a69db1ab8c5d51c14ae2745b7a11f5d3b1895958d579c53a3d1bd877843b7b00347699a432437d4cd6a5e6011b700c94cebcd0642064eb7ec72353ee70c315d115268bbcbaf4de2f162c28a214c58f33c489e3a30b4b09b5eefe5410b257b3f05cb940655a412d4f43ffeff7a6e9dbedc2ed8dc428f23db3a7ef1cab9222db9e8b9ab95012d6a29eef4058c1ce339cd94b28083ce9465b348608eab79f0e529fbf8aa8092307938477b9cb2fcabc61c5ee14991e00cd58e7271e29d947c38165c61b4af6ab77d2a5ebee8bcba6b52c92bab96b61c8279f82af24ce370d394ed8c73f6c07b3f4d14e5cd8e1f3c9c198efb4cc4b35ca29122dff65ab01aeab3ee64c66a304ad8f877be214078fabe6e532752804698314bcb1379bdafc70f3c91e6151603433dc535d1c0f2bd24d08cb243d9b55830d202cfde029015fbe34a107dbc103e42683a0cf92bfff2123dc439683fb7bd047c3cf14609d1c06b72fd6846a80f93800d30bbc751fcfeeade21372599f52926a4b63acc62cbec8da487a4ed3fb6911e167bab89c214bf2c401194e58d4ef26d07f59fd52f92cf1ffb827344cb0e48b2f4470ce462893670ad88adc0fb8729d4ab95c2062bcb65d4c982ec379270c507f6438655a359fa6298fec4229978109df960ceb0080c11e956f25bf4cdbaba5afb523158b1328405c7c8b3a912ad565322e28f3e718a30c3f1e9964cd3c32658acf96f9991dd9096fa99ffeda351d4bbca9f2c79d5fa44e5a2d653c8589b275f29eb9bf5ea43ee74d9ea8946b0f5753a77675973a360cb8fd8ea55b7a5b66e2d5c3abe734a6cf5bdb8d6636543f273cdfdf96dc9f811573163c7411ecda578bafa191249d9d965e36372bc18dec6e3985849d9380d2d1a7edce7907fe4b8efdbb04bb53c7ae9580f15e6af0140afd7bf83321b4623f61fbbcbba2acabe10518cde106da67d8368044a2dfe000fb892315cc3a59a141a39abd4217913a2fc8398c327d1229f47bdb75502b05d8cda207ef54156425166def6bd3fec1fbcec8d4dada275d0e15d8272286f08967c093215e7f55a6bfd7b62086034ac319c60c4731de9039748ab7159e3733513b47cba451f516cbb1b1f6b3aba67fc8f0339a6e0a58698f0595ad06714e74cd8b509f810a4b4ae3a759d831b46cf1cc5f4b0f71ed4b265894e3447cbaebc948a585019bab056d53adb41a76ace93821351649494a96c37b527362e9dbd756f122649f12762db08f9fae0a7fc5689819be546e25c98bf89202a9871a7e6efab1c9b650b73385cbc34d03d881672e9415d9b2adf779b6c3097bc0f9ff3ea62eecd4baba25909bb5d0bdeb8314a3e97f1b00cd06e6d25e6e713057a333736680ca8fe91fb50c0aee91c95dfa4c5bbb252031ad21c1bc224be9bc7813b1fa8678473570c3f300b2c3a450d343d4dede32ccbd61a24030d9e5a045f076642482eb6f2a1f99bf2a523ec8ece1ba1202fffa67a0399e0e847b5c047ee65d6147e1a0e33a765f03bf8e852679862b7864d40a75837e79ccf793895848b1b00a28af6692fff129d4f113f68e193880ae5da1c6e82b4a849d729fcc1eeb5970e491fe7864677c2796ae59fe0bfb6a1778d74828fd0a432ee0d17441f04529b5dcae1e8d0341e45120d864c029c3ce9d9e19d1d8446b48e3b255c52c0f8d1db00e0f635bfdda83e4a6dd70577f6b491af7b89f295dea6c44b50ec0d0bdc6394eb6ff7cd72dd67ff3064ca62563bd10df9624e733286b20d51678b2440d2f1c79236597ae5ab74d683ba867c065bf33cc16c746e6181801534a6b274be95ddb0f99b0060f6c022457612ad6f8d3e4f3a210734d20bfed01bf963ec5ec3128f5023d92104b81e6f5354cc08c8b5746bc23bab283002217d29d4e813b54ddfe0e98ed01f59f2d664717590d2f5c66aff82cef2c56dbdb528107691c097f2c354da01978460b834304ba4d1754c292953cde87c1713b8dcec5dd09cd27d669414a4497b30e642cc1390197fc9bda1a8737a436a78e8c9194cea1cdc837203556ec2ad49402305b95603dbf39ef04ee80d40298dacb018460cf0fc072f0fc82c7333bd2b8ebf30c244cbf1b562a7c660647b848ce73c7ebc1e92b19068a3a0caba1b3a8a34499ed25f940379a8044c937acbd8e980b06c58d8a13a2fdd841c0017b95715f959591fb83a7127d31534c98ae085c02076d5661f6c61c46e62cca9a045ff072b5066cd69a451bfad2d230d35e9294d536eee9876148375ffa2f9f5d3ebe0ca9f9c92f26ddbff4f2dd739a47ebe2be731e71e62ddb0d0393cb78ac803990c37fcad2453cc0c3fd73db12effbe1798120ca75d52b96b5a9498a33a86bc7048aff8af485a6f7266f672938f73f2919a6fa2d2db7db8b3cc0908bbe615c81859c1e65e274734b02c084094299bc6f0207068eb6ba2e1b572b384758d0c4806a6becbd78b33ec77b55f4e75b4c8762da0613d3f06ee58046a2232b0b518243741db3f276881ad43e0d398e82ea0a26d55d98f4314e1daf5f98ec6928ca71c3bae85250a25ef2e45ab02bce167afafc4bb45b8b97f205fb3ac492de2883ba28e90ed1c2e88cec39f3e442aa36576617d8ec1a935c0e3ef9e8e3ae321a0349dddc5b7522e19ae103e3ee90883e05059512cfea20525648373d44e5caac4764781e78f27518713e94c3d229fc10ef62ff0a7ad63611e85198d9211be10ce83384450fedd13cbde834b2eafd87205c4fee58533b822d05e0a809636c507ce7222609dee053a07836de74a19dbf238961bb50df7ab1f4a35c053aab23bdf74cb427eeeb7a2a618131199b4d9ce3d144d3fc955f3e862af75b87909c9de9d9a5241e9f19b8df5094f2372e9662e758c561dfa752fc6c84ce6bf6afd9d7b64990cabef7908dfe8b81324869c84a89689336303bd5b5b6bc7cd37ab66fc8016854f94a862392d76f5a240497a9167790d3755ced5174b7f93899428a53392671e134a061c8b12a500e5419c0cc413f46e17cf46b2859d57c564be2fb1ad76dc94c922860edfdd57bf09ba026d0983601aea8afc33ee2fea19ddde7515353c5b92100376f70566402937550380bff2feba923858e1d496d854392fbfabe90b10bac81883e1b8a476e73d614951f2c47e2caac25921a6a4d5e1dd5c98833f37d97bba560f91481bdf63518cf561274503f6bdc37bb33ec3e178ab95041c1737cededc96da70f58bb13014be91d5b6936651877a4e4003deace36da0056151dd135daad3b8ac4e7a5ea8845042f801b3efe10d945c9f353ce4c9bdfc212170289df48bd28d677609c5fa9e40ce34b4e055697d64dccffab8b8f61ba77883e152a1c3c8906f73e4892895c5360d7a7adf8680c48f5c6b3546e71a1700a4f80954c501fd7c4aeff38c741187ece375035ad0cd24504b5898eadcd518b902a9b744ce655f354e9ad28f55fb0bb3d534194f05de85b09aaa6013b7d00ba817da125a5e9743ff96d2a0e3193c7617a75cbc4156f3ff49cd0f9c600557a2134c06c75b090387f236d367bf857d6ed49c4005f16d3bf13e8754143386d16f7c544bb4cdc623a4d8ab135dfdb5d7dede2eb53e828bbd510329c1c5f9c2f2db87ded5fe12d29f41c508add42086295fea7c9873ce3d3d9682667030eb42dbfb72f5b4bf1811da0ac693fece4c414f401a8ba306748de92fe57c6345442c6823718dc91a22cbde05dcc4b6e1064089c7c2e4c7305e633052aceb9625766da5ce8c6091d728400be8533c97f621568c0809ab76c0d5ee3b719a6ab604a72fda23f02d637de619977070d868ddff9d3169f19dce1d404d36e7ffce294234046af0bd3f524f904e63b06012e42b9c9609da474938a9f5b602944fa208e90c90061e4678b2efa559392873b188bf80111e692ea7cb519e7529b1a0c38ba9101172d3b22319d768fd71a8c46323216e7e2d24f3b17261b04499e9c03eed64a38c41b6c692d5b5ee4d303974ce6a0d27ba1f15e5950df7685da27aa200d5d0ebd17770ac0d777a38778ed453ee92851bb215ace4e0dc036b0c513f1543b5862809c0c033043dc6a5c82c52fca74d3e0e6d9e3d3a01f1bcb6088b142f9c97719b262aecbdf79bf9b23bae349b6d6f660937102e1f55ccf5d140525409c124de4e270ce9caff4ab135921ac925f34490c0c1d406162f78fa691c27be56b36491407f21f0af395d2efa6f22a1f3f4d984239529f6cc64d9b2aa92d2285325d728c4eb4c474e489e7a8fb6b3fc811ee0cfaf95ee5582322ef74f489d5ba2ac71f92eb3ae2019a3a1b55b27a4565aba15121885e2759b9973e8a7621b64fb1213af70d6493476503bd52c97c9aca5a77ee10a2903dee6d3656905fbdc6d1ead090aaa97647a2a714c7f1469d329bd72ff6352da053d53e8eee5e2bac0de66170accb632534210bc84ea5117927b7647edda4004d3392e1d9ee98d416432bf95c89263ccd0d581f37c6ca82af642816906fd2eb191be44124e1576ac6d9be7d938b1a1b39184ddf3880037018ffc44116b602bf6f9c57130181bcde30052564298d933a708a300dd2285c4ddc145b541b6fe3db7291319ba91081073f5ca0beb9df4612a56545765d57f246d5b2ebc01db1e2f8117a3de3ac193188b41b6f7d39bac31d067b1018656204c82869d3031069bebafb1afea6134f00e74bd402c539f1ffd97999ac3df0d91d76791eba6745452f3b0e6ef9db112077f07d389f998c2418da3107526a7da24865112c913add00171739076f84435cd910899c81ab5dceb6805139ce9832c489e01ff7e97bd496d07adbdd8d2f8e23c21094d16e88805c3395f470667a4b4e509f0b5f64cc607f3edc70f320b92473e990dcf9adb3c94d67bc1f5aa84c3cf635a1cc600275900ee41f3f2cb53b8987ff41283194cc5f7c46bfe34b5132af97a38e192ee8eaac1e85597417525af0b0bcbef2ac8110c338a761103647ce92edeade888ed5e784ec095098a303692e3db78fb6c09fb342af58d8aecad5a57f5f8a6be99c0d0ed9181620059c82036dfa5c45b6b71ee76f8f671d9469f4da344f60b7e90b01945cc3905da67aed6cff4cacec30dc4a35cd7de08fac50b71c87ed076b2d38ae2f8abdb748e4a47a37fa1bfe78e819563f33126d094df9b9790a4208b89ddf10a472aecf27b2f74c8314101d6dfb8771624aa10497dd0a26a017d0a2870cd4586858305e4a768d87de798894021957fb7e8ab9a55902aab2a49e55acbae0d86d2a5609f28d798788f658ab57dc146985db7f3e4ae18227be412069d57941f72911107cb35271d039ae9072acb19766a593c0e5a869e6af4acc6402a30c6314ed97b431d140f95d4e1330017f5649b5f7c655ad6338024d157e27edd6ad08a140f0c78726a48427bc208d17937358f803412c37248b7a75efd3f3503f4f6a08d6544cfe261c9f34762ca925b18c359d71a381c1e2474ccb1c5ce43b44db2a85b9b630d24d5f63513bb573cfcb41a88a02869bdb370c99a901ab282d413d472b94da9484b666f93e6e71ad929150aaf7c2a946b96e6c686c38c3533e3b6215cc8825cb7235d01cd855b2abfb67d53e64533ca96f1a22064f9c760f2a950a679b8d1a49e99054988626174d6c96a011bd04413bc41862dae9c36f4d7a41db649a2b1a934bf92a7a2c74029e94770baf92b0fb29dea33fbcca48349e3100207ab76970af84afa8987186eb786b3355dba3de7d4e795338a258a0fe7b27334236b555efff2fa4a17b9c2595d6a41247fdec25beebce6e7eb17092d58ba04a15fe2441f4425a9c891e048790e18f747b33f4f66eb3ff387292d49a7e172e7aa284cc3e107f51cb252cdeb87d3cff04865cebd9cd61a8782f5cc9075dda1d02ff8c28b6a545239ce33fadf48e0af67a8bc1ab77c5c9332e1383f2e3792f092adec0e574d9b6dfb72647e111f9342f4a9659a2d720d6ef7c0cf1937144db21cf71761142740a0d2dcd0c08f63572c3054a90ad1984e329ac5f01e7db0a240baec8f6df1a57e2c0c0110229ece4df7137135d915aecaca00e0d13b2f8216089d553ee6ec84a8e961974ad09ccf90cdb8e0f590063178f5ead2457adcebe1028f038c0368d0a5c1cd2e0b0eda0096aa191db9af930adae2df6f55c5ceba5e2e39e7e89a54f90ee3ecf570995178998852882df5a542f06230e07cebc72dbd85b279b3d3398889dd0aeb9a8074816cca8ea543f66e5a4cbb126e0876add609e640cd8e04b1e26b7e3e0b3956f208b79b1fb024b39eca7e51dce07d56092650a28edd6d20fdd424608876f31e2e568370a844dfacfbd98bab85133c51c725a4a33c66d6bf2cb31c9127d54bebf72e7e656a917d93d20cc3f7897cd6e1879ff42586f3f6881317a4a8f6f0959ee2bc76adb7d4e9d6c7a355e0ce42599c1a0eaf0ceaf2db1384f63fbb9eaa85e2246e458223878797901e3c2d4177648af74310e909134e2ea6eb3376e3b7b3d78df2fe50c2603d0ceb36d96c598ea36b692bb94f3a9f620fb8e7aa9b58228bf6105b7e4549e9d3cfb00a13f5253720af1cdb6418e349607f410f57e18fa78f2e8777f68da1da3ad9e98d22d53410a94d7558fc866accb6758f8d91ed87dfde62eb33a675c4a9d2df1dcff5afe542c0f386ae1402ec1ff9f388663a258cc288f64d8ded21e58adfc758b74d06d657c2169b39e2ddb247b5af4f04df24479ffdb0cb2b50510e5abd279dbdafabd2843edfeb01ce95fedc1be304b482156d869bb05d8e93f2471862f045cfd91987ad09f2a5e61be6aeb4ae56e1c0e86adf190be4b7e64880549c574a39dfaf228cbd72bba7595eb33567a1366fc4e2591dcac49165a527400fa193558c0d5e938ce11d32dbb86c0d0fc7ea5bee191efe3fafb8f11858d822a117f8baa9934b9125e28cc655b828dff33b40ca6ccb876efc629fee71f35f518f63d378c115364e3aaa102f40f1e4a2fe8a1cddb5d07affc15b595d80d8041fccd20c328bdab7313c2473a7056a34dc4dcf1d41e40ac53011a4e2a8f87e1c30b1f24d27b0ef07363f39301caf81b5d986bc76e0bb4d3e06024903dbc28a19464f8c67f55d512db9d4dbed23594a1d8e0a62257c14ef3e2409c62bd1d23385c38f08dba4c1a99157a0fbe30d6b9dd46b49b1d6d7cbff5e90f8e697c6601eca94461292ad9eb162fb5777cf89d55c180939a589ff91e8300b8f99fad9e696b6775e9160e799ea5e53c9c0d275166ac0210be445d993861c287572ecf38cbf8c09cffee1771fbd51d2a1f5bbcda2564b65be1bfd943dacb741349aa8b812b05feac6c4effee039f3639423cc600e3bd67ffe5d2b9e84ea32457dbf13a9044411cd9900fecfb53cde375b757c0d0be78e915af07ef83eeb557a9bfd14a79a57911f29590c55422de7fe1f16da3061f1252fc1f2ddf6d9443738283da1aff670b247aaf7fc401d4a960dee6fcad20be83e5d500da14a199600e37bc596177905800aa74dbb13687b158f1ff6c8156b7321d8b9bb5887d4888127555083f7df03d8d2b668e4d10d10152b5da8bc72c1d77c6b9e4a1d115fabde78bf5cdcce6246b9524b92397af931d2f33bf6ecb59e53a3ed22c469bc496908e80ab28c663873dcbb123b32c11495221b4c0f15c23a865b4876e4557dfb11c610efb6716b147715426f8202a2a421da21e9862c4011bea5e697d1945602d7ac1382acf6b6196883e32f1322ee3f616857722f93d30e1e862ee5257b27c610a4ff38b6d3f7f244e1d653683c375f310a00e0d37d6932aa3eb939a7363223b1d76d75f11468ce8142be680346a9df4816ff87e5ad013f6c6be9dd9fa9a3c6851290f83465c0aa9460f82eac211bab7f4c145f8213f6011151b31ec690d2dd2251f6a9cfff1d1c41fa9681d1fea2508f7e806b2f3e905e8e789c77aebd5d9e7a73f35e7f5da4a75d5bb8cdd8bf67a02768fb5c24d9e4861d1349ce10a24eb1b1e477e2bc4b02e257046ec2fc9a2452713d57304a97befa1a2e733bc7598eac878c7d4d99432941dfe78e3f50e4e9e982ec8120bcea086bee663f0f9f4609c7c35b6ac69fd680105940fe01b14ea2bbd5f3db699939d0403200ff53ac76468704fe25b6cc1f10353cde63da630293e7dbdc0e37165a900e629d959b4da42f9bce7b64f2867dde90a56a6e446ac746857f7b626b571544fad8a9aa2c7dd59457d869d08a72973218a68a7a6edb44b86db3a31d44eda958dd11caa83833b6fdaeede77202f37007c88d38ee2b71da45c1745c37ca81a7f2d8db07e95d439bbdc528be296592c404ee445036791a6f6748894334b307f6c51d2bfe7161709ece3a0c1a6ce0b91b64b527afa04a7b079c0efdb2c4b8162e1f242c28b701e8bfe0d895a28fcc4d32e4966e0f8c19d9fc90c86a2a4c51addf1aa4029f187e50865ae3e5ad482170d952ea944498c20e80a6aaa88cf2697fe8b003e2425d5dc2e217b8e9fd46a5f610dbde54d68705a79f05ea2aa8560dc71f4d56d2cbf3bab9910c9f013cd21683f19128b791ad753d040cc566d65151b620a88e8c77b105795496fb6550fb77d5a9ea4f8a9812267b84ba78badd9298b1243643132b11db6d62c0a350f540dcab25a8b11368a0596fb3add8880f6d700c8d644911333189934ca635320c8f2bc6a79b886fae2807e602d1319b80b2b7f149bb781862a2ea46204abdca995986179c5816dbfacbf75944e892b9d6d8c30abe38bb918cac4d9ee38502e469e03dc1ffd9f1d949c68c408b7bb919d7a099e3b90a0d1eace1bd1c3030cdfe464e7258d77ea2552a278d92e2141c30f68c80f56e524c4bcbd7c1ec277a2d11d1ad2a5f477fb7f4a7825f3ba86b327d65c43d04e126f68d15e776d7d79a1353e8be15d3e630726663c2dff485a0c06c04d6c5923d06b22b70ff2599e29eafd51cd9a2b340c061990493af93be5e5fa2460220daf16f266b5e59907acbc1d801d1ed3a313b0ec8ffb2c18fda34eb499868517d1cb4501c7eaa6679085a4c23fbc15617fa59754dc64ae7a56a005c012e40f1e504af2efbed7c5fa3a316fa017d5113e584be42c61421df690d16f26a3cc40f46d63631b5c14049792ea68f0ba04634453fde91c37dddcd62e468bc19baf9c4e3aee2420ace74c2515374080a7a85150540e2803dc2d83a31a4cb6659c7d395b72cae15dbff81ceab13070ebba9e4a1eb554a7adc0b11de250554a2cd3c0aaa4b80938c6bf66a789ab154e8da3b910b3a383f7598b642a09add12ecd22073502ec5cd003c61a9bc70155b7de8449885ac879bf52963c73640b40fa76811ffbb1f7d1f757dfcb2eeb927ac1b06070ee294ad5d1e393410dc9beccb53a7267402d215567bb5a6e68fa69badcb6ca57482a9355fd826bebe9e4b66a5dd73f5b1e9172c01078ce83da0937a606a22477ac6f479ae49607572b2a4605a4121e8cca15a5417dcac6eda1f8d046414f9b54d95a03fdbc10360dfea9d204d1fb274183a0100b341667b760ce5b81d88cc0618de2c880c2e12f2809caeb0ede110276d90395ffe466b13716a88c0358b991ec42c8ca08f8eb6f32a028db4646369e4ad08b34c71d3744bc0fdabe74cf70e9d6f16db16a0b25e62122159b0a0d5ceaab58f29b57991344ad5587d903724287e48875880563a2db8d098805dd9434e4f0e4b689fd8f4c7139b89db5655b6dd4e75e181ca21234f6d888c8611bbb4f064f163a6ced5d2a9eb56f8f3a9b6715ecb7ce5bf680c38e10be27433a0ffd59bed3676748309534bae1a85d4921c3c2fe24cd9ce7e599d20b228d71ac0d87274bb94abfea3c7c4733a530b843542197b113da162698ee1f313f1acdeb81bc9932bc2dd3207f4da301348857566485ef3918e7202db73b8e5a227df1ec7852c5007d1525b416fdc768c235d45d264bcd644a726eff189232ba0ad5b6f4364322385027d6e590b52ba46cabbd4d6f2774b8ea06def301fbfbc11c495b3a0db8f048afc314f84e393d2c21cf6d1ff16a84e851ddacde96b7582c300b35a254c49305bd15c5d7183f3a196741d461f5cd0616cd5bff3eecd296f130a93c47b4187da956be1b0f98828175df500fbc975c1c0b3c9ffa01df945b10b4ebb22405e9ae4787b0105d60385720d6e0c4cccb536020b4509946f2490e9fec2239d5ecfbc5b18a3e030fb6f16b983f004b9e0c3a57099010d274aae3607111f21cd6cb0baacdd4e98a61ccc36f0ca1a05b5aa27e2f18ff89b32bb3b908b1e5dd48a15fe2b8dae8dc55590815dcd9dbe4f47283c84f7ef18015fc4bad201bd57256867652cf611492993a74bdceb40ce0a3aa04c539cb2473a6e45ae727678fcde8dc258606296d8a5200570ca26bacb4a8deb4802d378c91533e4c4753f876eada275dffd5e227d07b5c6c144566f3b66d1c66b7438fa297c171b30387fcbdc2cf47caca91190693d80ad8f7955ad96d5a50020e5a8d889773666f384d2f7a853f54b9ecd9b9dd679597a72dfedd3284353835bcb0ee5e99f0793ea372743ac6840f6af086b40012040758b972f95c826b7e81d759352e3600f0798e8ea1ab2f721ba7266fe7e39b9742a9d905ff73056472bfb5cd2ebaec2cfa78b7634860ad52e8508fdf1ac91e458e541893ecfe368a8e9aafba6252fb6ee0145399eaab3524a884804229ad1879119d257194434d1a45d8c433894f98a259dc4a146828e94c72418a100886fc098476f30909ccf504ac3f315cbb46004d686d1e1615a167bbadb5cbfe05fb71cde0351798ba345707c8551a9b58273fd6b3b4e9d7b471569820a858eca9c264e29b41a575ce47fa7c201297d7bb28cc550472ff8bf9cda15d003bd95e4dbc9c43925d3b4536718daf08ae8ebd5eb83279bc9269692ef5c5846955f3c5ff8d177a1dfef1dace70226d38447b2389b0ca7e66358d97fb51e6782150b2d61b4e52bd52d189c3532a9b37dbbc3045b50e765803a63566c402fac8a2a01b231654be2790ba3651288da03db5cd13311ddc0efa0f1a30cf9d304b09d176b3c4f2a477fca79518c7c81c6255303a6b4826aedfcaeb8e4d40abbb540621ea17d0af845ff8ee16c26dcfc4bccd2aacde1c794b4b0de10a12a93c421770a06ee812a000978094b9bb450f9e2fc60bb9718954db780943dd138cbe4205c6f7c18ebab0dc982c2fc4b14bd5d365f8bc53591cfa71f4d5a1d24711a081cdb14b1357cd1406235bd262d441cf2d336181e61c97bf220412bcce41c64318b8b7e7e12c43b2fbe4a3208573db57ac46d415130c1d6382e846581d4b1a936ead35b240f4e84e32ba0486c7b956093e8f37a8807cfc8547f7f690800bfbe8ee1646e88b7b40ea72b81e365f5f59db584b17570ea80ab82619d2b6000db4faea3faedd509f7fbd90813aafce63f6efce0d6ba42080a2e91d40de3554e7fdb1a74ec98a644da87434cf58509866402ddeadd671e8295b718f96d074bd055a811d38a15fb4add1ae36d262eee1620de04f09bd129aafe98595e782fb20e80a5b202f72aef1ba25df49d4c4b118e6c1f29a7666f019dcce3c7c2d027d741623b917bd64af5b8ed926048f4bccae9ace740165c6aabc149528a3dbb9f1f723facad107c434745ee96e35eb7a811a4147f95b58e2b0b282229767ed8d2ae4750f068030b688078e7634930dea60682b3165107f72533f2277aa0ad1c7ab91ef1ffa09254132095ca3357d7a3f7549f214e55ad0a8f1310002ca44b92b9176f5bc09fdb9387115acd2d3095a90417e2c57c76819bb0473d737a75a97380dcb707d83596c3c52a90d648e17572b43e2a492e14ff9931af178b95868abcddd757f74d37700432dd18d5ce06bb166f4effb0fa19e3d4e28fa0ff5c4aa1332b46f3251dfcced0e49003ce54cb928b6a9fd77984ad0c1c027143c29a3eaf999a7417fcc7a74da0cd19cb96c385e40ffcd8eee150f89dafa5f7aea97524fefc9a597033f1b6e07f32cee9f82eb38ef931ba680eeb725bcdf9b6e24ce1c4d26b722123a2dfc2d32f1074dad9ecea7b19b3622eec416b8d6e11bf91e51c272634cbf3c76590a84539948e67cd71ac0a97ad757fb3ccb65036e4e173684af21e25700bbefe279727fc82582636dd024400434608456215e60645a6c03753cb4160015f2378aa2a49821eeae03938bc59217a49786b95bd24ce456ad6550d1bb832ff0dba69c8d7b0b3fc711afdd1705274dcbc9897f886bbcb391468de0522b5a689fd743ee46875512cf8ae71d4bee6b099fbc3262b693830a685db7eb60ce0c8a20ed6c15da89a0013b528c153014adb7bd118037abe9be51bafd97c0b6650faf304ccd6ed7df1a6784eccdcceacd75c36d77795b0d780913bdeb365c26b8087aebdebe6b1fffeef84adeba16d5720f2d0e4f8242bb7bebf2fcc73ae1277c3f9894cd88ab0c93f2cc5ac3369e3b0fa672e6b8b536ea53127fc81efaae536f4a79d22bd68a8deac30eaf9234ee2800d9ff8ebd181ea268d2a58c92965fd88b7eb431cae0add1602d41a5223913ceb88d05e5523be2ce9e0ef91af7d3fa3da3cba5bc34ea25b142079b64c4f85fcf44dd3c3553120e3b2decfb93797c6d7c7fb1e650e42297ea1f288c57f04fa01f7b81da1455f43e812cdccf7fcaeb609c0952277c4078a20d310389803ca0c5dd1cce817f7b855de99fe02887040b7c6c9896967cd714d6fbe5917e3bf3ac8c355625fe8b4d63335293892f9ff85abd9232f487225879198baed02a4ee44561125598a8ffebb21611941ecf07b1f03024bf9db436f6f9d32d2039b369168d075987cc5b14ff7fea4762b1cd73e2db69bba19075b35dbb9c0397e1dfe4b33afd354ae52d962a9cd6d62e67ec353e3c9facb570f0efc517bdf840c0a89d42359213ed90944ea8fb88cfc93430530689cae2a69ea47e3f7e48d6067a093f9fc2ac2e91f71f388515d2ac45a1f1d820c95d89a86ec26ef2f80d9e8c7682a3540c67225aba4907b9eb6baa606ea9dca122082ecc70344aad76edc291db9c7afa9c07495a99ce1cfc273e2060ee1545cd049a160a830813a5a49e241a57a0a888db3f70cc36e56720eac144788fb1d1db462ddaee627f98e9ba7cf514d06ead0ccb319e6e9fb6881e7ba9d76af0d6eac7a0ffed0e1ef3c2af7e1d916f429aa653b945ebb4640727d061d4173a122df545752aa7c037ba4e3eeda381b92c49510135f1244c6287e63536a7adf2453f8ffa19e43b4e36bbf4155716160b2af3790f13c3367419423360357422e1c5dbb0b783b814ca5ee104447dd867c6162816424248fc324c741a7de3bc2cbfb8f7d781a15aad8f87742554cdd0a1d380bd9bfd623ecb2a43333fdcee3a172b29081d93c474494fdc9d77ae585f53c0da1bee726d4fde749973e8bf4288ed4746f1a407ce091871ad1836b0891d56a3fd4186e610ebac8a756c9d91d6972dd739d48d36c6714fbaf3d18dcd7f8106697e18a72fe79fe5826ede6db94658f416736c5bee644e07353fa4569dc3ee8432607eb85f3c7e6d718715aa69aa772060ac9555396d9cffcb549e0f528f557aceee2398967cf9c65cdfe87eaa3ae30e304bf6abebf0a31476d0202cbc82b23df85aa3cc99591dc7629c7954490b5eeaf65f5905771a3622537f263ca686060f126c3dd4fcb28decb887ebdfea45fac28dd60dddeea1ed82ef2077f266199507b7edcf5d4970233146c9287817e53803d1e8fa945e9ca0ae6f74ce962081d2fd1eded7c28c091898b554cc949da479860e0f3e6f43fea16732a3c4926f6b6b0ba09ad79aa08a34121daf76bb62158312416c345af9e95352ca2088e90d97710bcd1e0436fd4076e135874195e7d5b837219f5b08b9db6d5bcd32712eb43c4f1c5bc64fb811141e2dafea6085ca2733fd230b446c2a3b5d391355afdd854742556d2466d6627922af40005a7555948547ec022f2fdc026b54867f146d1ec002aa12a983f23f5f9813a305db499d9bd005a91deb7d5e8406122748adccf0af8c85729d07771d8dd8d17837568a7943839371ede966cbcb6b8378fd84f1ccc26b01ebf4660afcfc57572273f5d3d690c187c21553c54a94c47bdd86ad6d3597faa242df7f17f625b8814ff9d68ea79f67793d8775b46890ded893d9e5446e118f8562303de544f8c95ffd1c2fdd6e5b07e2e629d53c87a388a4cb7fc443f8d392dbfcd479399684e261ebd3568254c7e59e394019644d7ddbb16eef458b80542b7d8a8e1d3eb6dd13816910676c281e1309cd3179f6e843806bcc60a50c07e30b021fb44793cc5b7ffc1c2be37104767c32d3ed50a7afb64ff95b36a46e5e599f96878d1c0210fb6a4e2fa7477430879b30c9c1ad2ab0e0182fec6d49cd375b8147bef3542b17380eccf544b62985ff197a0f20983e1d774f4a46dee9eec34f91fd520b26d43f3b1d15c1946d85fe5f93d0e13a061cd69c9320512bd65e6e668426bdf2c585ae2b66b7dc9262e91293d3b27b69e74bc24ac4aaeb627992961821d9187a665aa6a71786f12a54a78b14c72b6603efe93abbd3ef33c59690cb34f6dd73dc660c51f823378d4d39448415643ab29f4e7ac6ad6defbb107227164c156c170c4392161a6eb190565f89c044a7e1278ff046e1b3fca11544deed09bd22a37232cd1c0e44eeb105561204f0efe509b6ff51fb4de2e999c91dba972f020ed5770f1f10ed1c04bc3dab6afe73d9a10f8e7b1db4645fbba41d7cbf4ba63e5808e6ba9095844aa2f23021cb45b063b60c826e83eab14188719e4927ef373e0608e607c20851588985b2ce237933a8ea7973a19ec0ed4a5ac6160d570b9eec2dc63f71c39776863a0b86064b6f90e5dd74105fcef0301b2c63d7dd0e447da74c06bcaa3e6e568dc319617747809c9c986ac39d507503c597c3bba5ea13f2b8753aea7494af1eaacc4e6bce9f4e4ddda3c44895767f93257a3492d8cff5137c5b3c213dfd07786f7aaee2d85adcf6a6398d57782393fe581188ba790e6a5299cec72f441cbfac50f4592e932e1357444b7a97add30cf2a7c1bd1640b5fef127dc5b6623c1ab01aebcf90fe7bc7cc7994fb5536b541de44e0454449f6a101784978911c80e21bcb47c70aa62b0a38fe4c3c288f4fd2690dcc6efd4597e7cf625c2a8ae15bb6999d9a00242b958f4d5968ccccd0ff341e1527013f627e451e9cc0eaf0837dfde91ac50dd5700795a408f7b54016a8e3e5ed40e5212b6e9c609baa7797e13993751fa0d92e409a5a8ec68ae4f5c0a695eb6a1712b3c371ed6e2337da74edd34c61b19bed4c632ae9c6fd29af67bb07ca5974522aff10b7606fe7c0456d237892610011b9b0c943235661c59b624cc9c843d40554b8de29c7d21673ffaaf0917bf0c6b9b53ad7f199e3c9d7e01037949c662cbb15f34e801cb7eac97cde0df194265d718d28f6ecddbe548b028d7c35b4a25e4e84cab3d3180d82749c3c02c89fd70e405f3f286014ce82b49fb793e9dbf25dfaca867725675fc1accd346bc2959f45f7f051053441c2c941786fcedbd4833ef5abb744d9d130937ecbfc4d456af1a0c184ed5f5d55cddc3eda6e0c6e7b29c1d8ae89b90c8ffb5c9ff41154a9727d6ea25f3cf4cd77dcab8a6f72ac1f4292ad7ec185e5859f733f3d76e2432410ef4efc4bdc0e8f5af632b701180cd57abbcb1519b462cc87da7cdf5a7e95d80a61ffa868dc0419ce7c46138044c5d1c73a49cd3acacc43e9611e062997cfd6984a01ec3c92029e49c26835996e426a5bc9bb12dabeb61636f0ff33493cf72b2b698004a96bf43cc7b191e4ff760c05813becf17b51b22f14e37c49abdb8f6cf66adc2702821917a772fbb2c6d7e5b7dac37341c1c44f8b64f701dd33da407672d593d3781a2889cb6cb830e3bb2f38007ccf4b3ccdc9081de23dbe67c5e55aab06713145f6a0722aa5aa59060517dede346e8cb1436da0fc27efb01c52ec7f89ae8f8cf80cb9dc0a16e3b1dfca0445825f65c5e3dd4d671dc4b094156e2d17400239fba0061d2f3222940ec913e2b5b84e35bedc1371f63f2f0b140b1092b0ce3614f177490aa234cf593055a995e9772d6c93039cd8a9de09cd9a09dc6aa5d069d300fe667de2b952dd9b08eadbc5f5bbc6ad9a693aeb4f742a7c67b24114695b7225982128c1927752e6997b67b70d05f9d52b77716e30c6f93f19fac1fb1e815b74a2a2c4c48b6081529ec403a000a74d5be56bb9fd81b2b9c714a8129fc7b6d482bcae8d3871adf966ae4e8ac09f2d591373528807ee82ee91421d0c20ac23ca4e35ec555660fa75b4a0c1b2916eb049dc52b68231145653c261669dcdf0efc3db5d96dc01a88fa92ad9c0724d373e6735bdabfcf5a599276e922786e8058204b225224de35dc17acb072ecca6388b5b51c365c477cbfec24a5f7b3e1a81500dd09c05b83f646f0b6ec447fa80a595c66ecdf1e20218ceeef2f55995fdee48cd6cfb1dad399e75eec68b2ffb3c62d80c88a7b1d052570cc7b2b963b125f656b1092eafdcfdd967762f9cf12805bfa7e1652c1334f4c4bfdba4109a038e5298f06a285a37d8a1c2bb935f6ebdfac2cfc471c9ddad9ed6c92f6a05d0dcb692b0adfae44a4bf4b5dc68836aaf298702b3af595146e6c6ea58c90ebbc1a7424c8ff21a050a4999f1239da455043a94b1292401f0c01882bffbf9818f4d781af5c86fc45a7666acbc3139038f625cd30ba7c36637ddadc262cc330f2641b23c99c82d69d78c0d2ec93743edb10be5650b3712bfcb5c5b32ed56d15d1b48c2d200e243166c4dcd1701d8d4a87fbb7e144a72569f4396c5da8f2e9c83409cc9a142fa668899849128b6c4690bfbf18c01d8819b33edf221fe6f9a5294268b228211b73e6e456700abe03879bbf736ac40c7cd9777f219ba62e6e172053b664b951a1fadbd5d06c7f60f8b96eb94cc836ae6db5a3915861e1cb5674a1c4f284e95870fc6bc7acd894bd1c675cf62bf45a2483d7322c8dec66b050c4986dee39b10501a04a5ff4e0bc46c8e73a1fc6269c78f0810a2d15940b45d9034ba9301386f0f04ea789a05c875dfc376f49ae02710de25a0f3632d7ad88a5e3101e2dfc8de936ec1742e07ca40c87671810e377c866765e37e6f3c344ff80349e58b76019ef733fb29913a7fdba6ac2e47015ae3a114094d3ee2f68c3242dc1b1101aff56541d5e43d03062b000340bb4167d86cc1eceb6889dbf527918dd2a98b8ea591fa8ae65171dd4a1b2637ad6e6cbc97fbc8351d21ceb3fc6c33a808b5544d408dc61880560897aa889f78484550db62051ed110dfcfac5b53b70c304dffc6be3ed7b725d1aaa58be8c27370dff0c4c3da0928f602652e894d49662788974234dad44be856275d831b5f9167c341bc4538c9b7e31cd4d2f1857d9dfee793255b1a8812ff63e0255f934512f21a7fafadf49c9dcff9068c662f4fdb8eb95e6125cdbc9cddbeb2fcde84ca136c593f8aadca01b3cf7329154567b81a6846dc298b5bef74faa14ce4473fc1181987cfff5049e905ce0a3ff862ee54b8153954264d4f836b27f6f7e227584f8ef553cd565cea2fccde19a1c04bdea5752ff9d4f9471fa51b031e59563e4c1d1f0d9d1e93920f6e49086de5987045a548ee8ddd2bd8ac0aa19c8c5c6512dd6bb992171ea9a920ce079ab076dce0ff005888827605883f10ee3355d9dd92c92c24d67ffba008e7d59347fe276eaf0ad3875f139ffe8e5e28eacf0a6c86c106f27926639179f3c14acae3252ebaf5f491464b4446ef15e91da021ce2c8eb9dc246dfa556c7690156c5c3f3463cc820404468adb361e868291c091972b098e884ee8e227a4ba07e832453bf60f490a6dc61151bd5f582e4cb0a455132e2a1fc71733701e31fb62320b831a3c7941b26a8102b245dbe199e6ed15e8e75f905fc69a3bb5ffd80f9c0a5aa08a0d28d3aa87cd1febf589e0c2c3a3290930601a89086898ea63892603dc6f608ae4567752179590e231753294122c137b47d68c8439985331e6ac3da6354ed1d34da87ba3cc13072f4eb3869484120e852df6b14fca33bb367d3e69c794bcd588431122a81b57914c96a311a38861b0c68625d505bb8dc42f5a912614d7c2984625ae5cbd41b6cbb36f3e622586eb59b9724abef035350a95d8fea6a473594cbdf54e8cf2141b43ebf4f7e571b7a9db120bf44b4cde34bea0d6b7f3310502d5931bc2a60b888498edf5b040eec92a5d339f93011b99ef521eca2ddb67c6fe47ec57d312239885a12ad1323e538c1bf0a87a9cee922da240fe1679a7b87df7fa4ac62959a96382d221f980209bd597d2121859107ee6da295a2908b60ea871fd68b3a2edc88c04982c8a9744f04bf754a0a113597c76a29b2c8927c315bab70dca0d426067d004b1d245a98472f13661dc975f7660347119ae013369abc6ebed8788263f3d2b062ab979ea9cc5ffccbace4efc7c37004064e64bcd90f921024177196d221aea54974a613667897a5bca38cbb6c83afdcbe282d35fb43111a354f4e8b4a57c30e3f2a2e419418626bd4eff99547e4880e422743203705e7c11bdcc889edd59ccca529771b1ad9e01803c19efb4ca07dcc272005f108b42aed43eecc365659bd5265bd905e824cd2c31e7915001e269cc6a0b6c045d71d6e36e037edd45e77a0968577eb52743aa0d8932cc30f658896cedb7febaa1960fe66ae29952f3441a9a315ce76b13ee7069afa835bbc7f88dbe77ea6436b81185473a056a1fc4ae92064f125c0ec609d06ab20afbc4713ed0fe4681df8244f004fcf448c5c55ffea4a7fe8608a13391a493d94955232cb7a12ec1e35ce4303dc424a34f18d1224362a35ec87ca08d9ace61204c3793e6bee9d628a9057f9f435c22cdc8a57ce5b9ea9b3ccd05d161abf5653b97642eee03720da8c00f28562202d7d0f85248eb074d483b7685245d750b373381ca7a16ebb6b56ace2d0a7b5bac3c9206864bc314a47728982145c7be9d0fa18c50f3f5f5e5f8c45e93049a72d149275330e6c91276ec195d5f78923cd631b74ab3e715181c5d42130ba8733ccd11a092b692a163b7debdd23563aff3025b56df5f0e813ee3bfd54ee3c8591ed64e2716399724ce56149158d562533f607b55326e1bd03cd730287893794622f77107142fd73beba0f0e5ef16f1787047d56ac6aee4cc936bc3f32e3cd33f22462cbd47872c40efadde4b07d814365ceeb420878a451b98df9bb82cf750e043cf1d5c5875d611928fc6d8812c576dd26522d7f39cb2b518528b080a1e84e570587d267bf6ac44a8743c129a6978a8f392045a1a689559410b78ead8a045931ae22db5bb6efa2d75eca9d21cdb21c3bfcfc8ede2b2f4269015c38d817f28ec5d18346813df5ac7b5284be7970332dd9e92d1ed9acbb4e4037ea1f2327026f21001cd185eb37d085cd8720262ca165e82e79871d88fee16a3a998514abf08ef5cbc1155cd098857b25af3efc2a5e9ce59678c93837929465a09437ab2bb5a8b18249205f9ff8c666ca17c193395fbe4a6f8ce35e327661f50dc78736dc9e3f4cc0e0a8a28c5b9f1fbee7e5445c77c1998ea9641b191d0a7a1b80d553e21c7452e7262386f94fce20a1ad67583a53ef2d9079e372874a328b48da7bb737775c963efad76e26fbfd8efe971c57a50cda332e4ec800c3f39fb5edc7fcfca022835c8eab10b3ca35908773c66feb9f8228fba326d4972fbe4030efe77a6420bf3013706d6837dda50736c1818c5069b26d918a8d8eb3b0b817cb4c012de231d5d74c9b9b640b88cdf9ea221e06a406d658bb1dd6a3ab0fdaa9828343d550d235f534b790cc99c0f47b5539b4c6e2f7dfa679644cce9bea14511487ed3ef603515734f50e3a8fa25953cc29419cc4cbe363f9cd4bab88b6badec2a68e21727991a23bc4e82e070d8008f4c12898cd7ac038489838191e673ee4883fdaa6490fe16beb87dee59949be0333d9d007f65e86b586e0f004e968acc619bbb458630d7c815b44ca90354dc43b5525dd507c3ba90007a810174d0196aca6df04cf48ece6f47104b2cc01ef919f9250dd799fc818332335d3380f9eb856211baee0c0a8c717ff314ed597b09be93ac255789c666dade83b6a24e7b177d8cf2c529f54892d388e450d37e94d08b779a35eca3826da1f165e3fd1007278e0707091c04281de444112141360c950409069d332b57d61dd1be24aa1d2577d2f7ddd5d856f051ddc1427fa687648855a7420c233648f0cd6c90c52313768f41065332b34c4a481022cc0d3e8d2a726fb500ea46b235fec0f31236daecd7f9f11d19dbded19b9a77001c86d6a4a2048461c4ea310083d58d68b74e7f817f82d1298b10cf244a3941ab21b012a192ed0ebaa4fae4a74a13e9868f5b1f4e70a71b4938d4c91ffd83efa9c63005fc073b4782359683b0d37cc8d1fc1652a8c89136eef6ad16f39e9c9d32268bffafdd013ca937d7f38c0af6af6f1e392d5fedfe76c73227fd54875018a07f01f629cdc5d6a290fb36af1dc929f1ae3e747d6a40d0f4b32b3a9783532dc972b45b4d3c2b9cca0962c931d57345a9fddeba35e027702b0ace83fc24d57a2c35bcf9290112587c4309f50a4ef0152401ea10b3ffd61a2d57142b5ea0f5b937889eb2f2b37415a3b7eb67c6dcb2f62bc052a2cf50aed9b694bdef64fd5411ed4324c5b1e729203cd2f27b40cc66c87f9aec3a5df88879111931cf432cb8f16f579c75d22ee70da268675590581b97c422cece21099652c88cc7af969c786f15bfe296381730bb9a7425868e109ac0c4dbed04d3e18ed7ac0814f8f79c7ff36de2e901d17d867c7d5cd4279befdd53fda80073cba713cd6dfb1560865518edbeb4416db0e98d297625eecfe3ffdc529e9f75047d7f3c808b892964196d542cda819c7d858ea235625695860b307e82d0f7a9d2e8cee5d6b632c7ab8f376f6286c52b6b278d4f6d0a6b7f2dae562075ca9d59f6c2a117def4f4a32c3482a8f4dfcd137a7703cd0f4dbdcf5bc8ad49ec67ab69856de746cfebfaada50a0c5e44f3ba4149e2c0ebeac0cd8d7e676a578f4aff696a124733c349f60fc0374100fe62b29dea6f162ae61803aae459242b2af672a494efe796ba2e6e70043b62755f4e8b1b0d28b04f951fef47ba5196de3d0b7a14a20ac0c6acb57031ba5307ac2946b772930d65faaba2cc07de5bcd65ac752bb57f13d2b3bcadd5a76c9f8ecd021df5a4ae17a911842607746990a8d5954521afbc9da7f8224ce0454c8140e7af3bb9c96ca9587ea7eb048f2368b2aeb633fde4ecdac17e189dda1728be5cb7aae653b9d01e1750b12dfa5e08a99ed004594d6f57b8cdb4a0ba8eb7b4631aae0c422a99b44c2b1af9c7aa3a44f3305b79428630aee5083b26be8af0e3fcf1404dc18040e52463932197e812435097c76e046568a69a3e9b889486cbe20aa5c06dc06dc176b73348e4857829ea4ecc3be75360321ee3e90825aa8d919223bc016986ee41eb3b9a6e73e1e9673d3aab6eaef0a0d08a74302be08c0b90b7c72bd77ff0ccf57deea70461907b005f2322a66b9c0eb1bf918caa6c1b6eb5d2c128f3f1ef2514014e1f9ff512a582f895d218e3a2654c0d7bc786230cedc8d51c03afbd67aa64d0fb0254b115e1ae0cc280e3d082bad38da0184fb5493585eff4111e79870292e3b92feb207ff065762b3b54c9f3a73b42f1f7b205dbfd2182f414dd3231950089e7b39c581791221018b49c08d87b1d28082564eac35d6a398252a954d9abc073e96dec8bbafdaf9d41718fe0fb85da7ee6cdd9eabe69b28c188d8b78eb0912b9bd8b113a43272f520e58450fa9e3b2f71b27a28db7f326720427da357a4aceced2879367419b84d0764875fc6e3cb08f413a98e0fe30fb1234a8f35402fffe47a80211487e80fc3e43609a71ddd5f5e282f55db1f916a7e3ba85fea6ae6469bcd9bb1c8f52e5e93fd9dced3edb86e3e0562b0ff5314006888b7d8c052ef27b7976621a4b9cc5a9cb443d7f96a116a6caac072c7c9faae8db0d4e19303e1a3a322fe3d7b9a1e8e4b2805e7277586f3ef881cc9ef0889aac952d4a4ea6c0474136a6a3900a9602e85118a1c02a634f15c501470a626bf839cc3877a51dd6231a8fa53de1b5d4a1dba41bb39327b036ae255492912c5bb0a6dac3705b3f79912bb88e59d38eef93ad5e005a632965f6c96bc23179865fca1fdc6d58130f2841a53313825f97bfc6bac4c6fae9af588fa88a17e9c9c280d82a7645cb31ac9b2c404ce54738545cf326071f686bfd6736a6b86a461ddd3a1feb15d46d933ea05c3bc2032b321ccdadb7cfadb4ac1eda79f75751d5a0489b4f73f9c3622ec2e3687d5fe330a8d52d95956d02e2857485050213a3f4cef2c695a39166a4247ca665bd4a50d0d5fc9f1d877c9239053c97a85c5193b0cd5c807a1e08f035f9f23f32154603c82c69d3b8bb0de8c048d6a3b98e753c5b6e2a75874adb0c7a87fc6d54511982f3fad7d5799140f4fb01e89400c448794b5cabc0023194278d80e93f99f9535020e493e0deff4ec2fb643b77806fb0465c8ace3e0e7a780392cc67cb5d8c1bfe0f8b91a534fa44b109c38c9ea1966a1bf2fb24152be07ec9b617c2a3948e62219535245823bedee4f76670ad775475bbff0f449594ea6356c7fb35aeccd6f3054d767c6ea4893428f9f9fe5f7c4daafe658d772537b9b007fe806ce78d48369d077f3a53636e1c9897700763566f1fc719bf2364c5b458ca9fa00ca5981751472a4e170779e3366dff182045015567e8427019d2c54e132b27d83f7bba1839fda1078f7d726f429868a582bffb3b92e94f9be67f7b584d8741772d63847a3f9388e5b168efb2b504cc85032b3f3b9e5d8ab322e480cc37256eb6799c860c93e6008685aaea787db88485a940f3b833cb75b7d1bd5d61e9e42d25ce9f58337546597ddd303daac04a1c87be95ec688b609d63c4a45ea9b52c238b3b0e7f0553434733b8bdb110452965d016ae552f29076100b53483b15f4b67661c357ef8697c966942383a9f3a85ac1e218f2701188d5ad39c0b10ab20282cd5408efd18b8c69b550765ded634284bc2b4b6cee8f956301842525752610fe9df00c98f0dc4a191809a00b8e976cab9cc2420e18deb9292531dda059b46abc2f366ada3d658c758adceb5b544fe10a91809a9dc461ba9910e6a4257a04acc853d056e3048dc8c94feb69a9004f223ee23fa4f62e3e723301146863a8356259ca33a41feac0ed0c766721fdac6afcb85c087cb89b8eb81f7a9e771e7b34b27c82749e13ca6a45e75c04859fc7ba9d6b8d31b291b521c50c2afde1d5fa5d3d7d64dd6b06b96db46558cb23c2f6267c583d19742881df5fde9ff1c22ee6009b2e9c37941be72dc4bbf3f3915956a87e3046077d2c5607ee8655d785ee443293a9dda2f556a59f470b4aa830aa62f8a4b4efd63703bd08963fa523846181b9d16a993c34cf2b56e70cb5fe8b197efceca4e2d0ab45f67b471c38840027bf78a922c1de5475a19f0a3d1897a0811bed1e954871ecd6100cf8734aa0275fd1de00df7163c87099cab0b6699807f9377264efcf0866ddf59cf2d7da68f289de496bb537e7d8967058365df88c4fa8285ff5df57b2a51eb2506f4781fbe0ce8b35ce6833f7322da87ee8c1fc2518fb0700b05fd332899acfb9711b7d698087344b1063d5100c27ce274b3bbdc96ce5b7d62644992434d34c5c7c88feba6689194cecbf2863c308e24c9163b10e2503b6e8d8d0c4ff6edc190094e9e952edd1e6b0bfaa25ec944faa2f9498d4cb0586e508322551c6ee9a635a250b17a476c7cfc5a8576ded9597c2074613e6fa406bda38c32c2b8a66684f865a0bb8812fba8980366f029fc78a1a5c5f40d7211eb65918ca3656c0df3c5a1ea58ffbe6434b6d01acf9c26de1cf0c4fcd4c6ef88a6a89f3db509d15eecc68aa8fc2467901defa5797bff16c1f62090f252a876d79127d943a28c7283f5fdac9169045be85d3b00a10893e05f9792959da66c537eb9a3ccddd551c185ebf9349aa5dd934e30cec11f92e3904dcd04617808c9ccc87449abc967615ce1d27aa0602ea63fc233b696528fc7f69d54cfcb244456c8c2d323cb0d93032e4a118d4802aff4f8c934a7c45cbf86a0fa791d5090d4f4393fd2d1fdfeb7632ad8d1c3b15d920537028174fcc2f1f62b5ddc3f476fabb07a240d781c11b3b0f2f6c03df719a8918793ccacf1782b6bad924c5464728083bd10bf08b892c73875182fc9c81e7f8b4a8dc2567d399b8ff448967acf4a122affb3ccc2ec5ea0634e82ce14ef94b8f2a5426e2e03bc430229d632aad9ec590219eca90ee926c7687de92094df0fc50a7f1be1571d25d590de7bcae492885e734f4eabadb994b1297c8f97938bf25858af485afee0c6ffe6a907db5a50f33412888354409991b27ebcdd97b9db3b2bd920aaf71649b002cb7d732db581d9b34937c41899b346faaa95e71c75a8f9844b75f0e3bdbc8d4921e4a873cd1fbb7089beade590ab3ad507d9012ff03c659723ab9886398788ebc19d87e9d4d4d1194e2068812887b82e43b41c7e4ff27f233d78263435b95f15c706a4fef31f54f41909c1815391102f35a47f1a2e64e373f84962d9f5851298b58079e3bcf20ad4efb52946291ba23dffeb83bbb1551d864355e51d05edb2f10d8a01d3bd60b145c437ae149c882d9361bfde68f065d55d0e54ccd4b8aa882a9b85ddc88a4764f000177c78b3170b47d8ef1fe047ce5205650ef15868591943ab582aac3e3d0a513f28be01908e591282ebb5ae315dd8e22bb102167520037cb9a479d4f6f2fd1d2604d1c688b39be0ec35f3469ec5def440712afbd71049843ee313a487d0b0d6bd5d455a79a33034d6a137f0566bf557b0e7fc9797b75d8326e73574e9ac88fde3c6607187e1089950df7e95126e91bb19902aea9f2194a2b074221ebd1016b4deb7e31dd5368e4a8947134b42b657a55f9a1b988d169c467217cae1e0476392108e83d8467fc9281dc0bb9fcdfa3888eeeb877ca6e91b2b90f2ae55ff5f45cf4ff6307a8e20a28140143d3295fe097f328f9bbb6736afd80ddca8c07240859b7c4d5424fef912ec32fef0e8ed6a6b849ee80348b6fe36ed26ff9bb428202882c9581b945d79495992011351a8c230fefcb2270b8a002794c5a90f77e78a58694f9461dbc3e8091fa1f9f3b9d5a4c30d27daf095f7f48b500ecf06819ecc25a2b477c3fdbdb196e46984f8985cf72aaad5bd322965070b9f489fc44559fce2f1de48ea4281897ac845b649c0bc5984687307905bbb4443bc6464ae06c7b1617a07f6187426fe86b29265cffca11a3b55f7bbb3a382dda2799abbc61232a69d6a8a90115a90d6547580eec155b5686ca45fa73fe1f8431f0175491ccf6483e31d97127c802e5a7d098b4ccb7737bc99c16721eb1dab44e9164ec371a5841336753d0d4314151a7e6106e01d757fa91a8e0fa9e6ae0927d313a49d8ddfced330bbe1a0fcf46dad9be8cdd874751fb48201bfa92751f39663778197bb6a4daac5d350d17979d819c4dbaf83bf27cee840497948adc5c51373a550acc0d7f08e265c8dc84d1cc461686a775846d2561953628e5f9eb89c8ccba0db6928228b980089b36b6a5c613b9e9338963eaa6e12ca25e293e8f138f4775cb94b86782c623fd81829cf5458520a93336cfbee12cde4fdea342cdc2a8de0e693cd9682ad55ac8b421798502dd2d6e0598bc0eff6e45a633b9351722cb1c7ea907c4b04ce15dc3a43ce7d2e6d279f07688e1b1fd4597aebd7f3cf871a0de11117b24b58872e2e75435b7b7b1435f0931f6218459c649922eafb75ac4e6cae4cb40be65ca2f045adff68dc252b020485cd6c9554eb00fc20afc6c0f903f561652f663c59263865972a4849c68bfebe7d1f9aca4b2aa269e2661b2c4fbfef4fca78a4c03698285765c93de2d3adf0e4e8f2f7c1fc9c412b43e7f62249db0235f901a4d7e5ffbfe29cce2225756bd285168e6506e862bbdb2916227b850ef09bdc418e6a0abbd4ec886516bcd82625183290f6124045d8ba79a6b5d0f7c17647361f63e1149663c0b480a1d9c52aaf26bbbe1ef57c4311d425ff56bd8a8c8e61fd2ea82e26fdfdd50113db2b4d5988b4340e0e4948a9089528e3fccdaaa2667663bbb357f5d3eae96758d791e3f5cdac8c52309d19302bdaca15967a89e3d9a7d163355454f69b8fa7ed3ce1304ad302420d9c41ce8ae752d08ee4059be90bf6d3869dd4b36f0e5df6873802d13f6b8a2f9fa9723c1900baf4791d7f8aa8c3816c2219791b3b25e6f3f9c0dfa5a7691d69123a7d8fa2f243525b9c45cace83a9902b5f1189d01d17bc5af22352b0d1786ef81419cdc23cb87a6c8af66009370b7d4dee58255462e85c92d5aaa8140338a4f7a4c014e733eace479316b6965be7c9fa46bb7546406b8ec897115913c39207d0f726dc523b94bc76c18109e387fe6b47588849703f2dc17c441441b8dc2684bd0fb1a1330c07a80b08e2ec95e046708edf2208ddc8d83231e025bf73d5177462654fb6c962894a597cf79f535b45ee6c74d397f8b85f2c3f8ec07b6d9a148adc95efb0e6dada2e13d2c6856cc640f76c89aaf30e15cc268ad1df0c815c410c90ca71818130a756e96fd85102e2e175df19edf00a3279a6af6ad3ae6e633ff1a8065e03ab38a608dec2c99a8eeffbdab96ef06f5837ab9bcc13ce3c008fa5689eb1bc715aa9a37d83df237cd7e5abf594c9e8e4c0a41ab30a12281bf75edda33a391bd7b56f3db406618f1295a07a8fa78844c7cee20dd7f8a8e2fd233079360d5ef681b58df816c781b014afc3aff670f1ae2f99044c774eb27868b4586672d06194acd155eda7b793d7a8850cfb9af76b9b54d9fc83ec2fce9b2e6a0c7ea4b003c635ff16c22d4cb22039bf9fcaa1d868dd0df7e933fd6c0e1623cfaa6f7e481c805e97479814ec9356d00b31d96f1a402dfca1c81c3da2445eeb8f2ac5206b6a76c8512aa2aa0761d891f329ac7207b711a24f6ebaf639ea3542cd4798a0ba6bb3a221eed6e1fbcffad3cb03175695b007fe766d85442cf9b160968c2d61a4b560baf3f67cfb1a619afebdde882645ea263f000c289667eb747ee4786bf7a22ea4a52a2a94712b6616d074b302d4331537e5d2c4cc8a06d6f8ff7546566b8d99fa1a735e67dd91348cb7e5d77f49bb302fe1ab63c0387ef1a69863869dbd20f910d479b4c5c0d992180ddc3515dbd3fe7b64719f5149697a79aa5e36a4c51a81a94b1245a5ffc74bc481c93d2238418a4884136bc1636fc9f8bdbb7962937342c9552bd87ef72c0201f005a0e2665d74c211923bc237e1fd75aa5bd274ca3f28ab45c27ec9eaa495585331a312bd17a390b37f70ad6a04a8105e018f40c628bbd61d69ad51724c00c527b0cddca86870934afc11a55a2f0959aa4bc7a9a580be224c9bdfe09a2aea313c83f1c521fb3696f96a642a24bbb35df1d3df949773cc5056696c4de161a319d7f7de54391be480311fcaf15f5206f5cba7b7c3421dc2e16d69555516d4e29e62f50608c7055e84bce67c45ed6f4992332281dd0503db7beb3dd06980efa9665a4e85c276c36c8c5c6c3d6c213e95fd9033178026ac5a8b78cd94d7816447cbb98f00a60b5cd723f3d30bd430e0b19c0c071bad33a8014ea85a72d7e2a35d2a7c1e6609a376e4b99176515127a9e01c60bbb2e389e638ec29d500f3b512605e8e6b8cff3b544d6a2f91ec65ffb7f029d3fa655ae8fa67fdf124d008982fd0983f41c2d868911191565df4a1b4b291eb76c32ae3be41465bcd848e375dac11df51430b1111c591efd882e6943438a41c4e03300759ef62f5314d12c38e68000b9406b21089510eb94c368c179b9e5d3cd9c95260aae5c54320bce46e98615b0780484e85042381a3a729ce8d400fd641a05a87944e85a8e7e338838d5ff248a78abd4fec42db6c24e48f6902d0e9474126fd6bcdbf94aa7cdc6be6e5e9e6a6724aa9a1f9577f6c57076a366313e71927803e2d33f5523d0926a5eafd097df6eec6cc851e7f4121e20c3ae4dbb3c991fd215e007265f1584649ea775f0f51bef91612db651cfce2e118e1ba4b71032af8bb6ce68fbffde89eaf79e1d2aed46946e1d1d3760e73da6cf44cab4cbd9291ea26f5d0b59371db99610c8adff0a1247027db97391b56dfb1dc4726c4807186051524db0ee07f7d89eb8b62dfcf7bf57322b92cc10fa3fd95289d54008781875a557e028e3ef3b18002c2486f900288f2f3845d747e128f2ea53fc13d4b5aa9408fd5b07ec292943d789237e5cbed7d89552dc9c0b303eb65150767205032b60b2d49130ac158f078577e74daeeb18e80ee93e85d725cad00b4b3ac94c74da27b1f5014db02d50d562e8bdff4ce4299dec0f5d4312e8fc67409eff9d25beecf89a69316283edebdc131f8375dda7b91d21faba4d4343734aab5a857608cf515abd654a8493d62971db95cf06dea0cff10180b1c4b4a16b026af6de5d5474203262b99522126661320208011f336853f07ca8a71970a3b434c2f3e8ea66b0f0f80924adf5427254c0fa8788320d446200ff9f30ade52e339f7bed12259db00591917512f5503d64ef7aa7ed2cbd4015e3676cab3371cd697334bdcaf495ae737dfeb6428fc46137cf7db3eb7d1e8b9b223774ce35231b47db181d5d600b03a84f17494c6035784f0fa7a06dd3b7fadf10316349d2ea76014b3f948efe9b8cc0281bc69564d4d64acbb4d62a81072db01d949d793a4d49c37dbe7c6528899d1278ae510abc934bf7327013986688de328d585b80a0484409a7a68a32c1c609f0ed56a4ef3f213d2802c3024018b466c4c467ff166f576f7abbb75e612a129d1b7ce61f4fd3cb9e50d524d93b6b40f94f279f4b017576be50938623025294e20470e69974f767485929496967213ea06b41492e1faf5dd4082efbaa72fcd30caaacd424e15f29af70a36f6e5c14d393b9561a73b0b930de832a2a19675e7fa71da69a41a04900d3f8233c3959fe7fa602de466a80322f0ea109c539fdf7735b6f651168576ddfd93b83867a6790f9faa458020a28128952f0bfad41d4afb4802fb7fb03b831abed3723a74ffe64f994546899914bea91b626ea45ff911a27f137522720a649156bf7cd3c79c26af9521f43a39e64952e78f3064c8231dd3f283e12f6666f320716025c2d9037712e9cdf64f7ad69593cd504bd5d21b8145a2ee9b4642c2c6836ab80cf6e1ba09218d85a52a99936f595b0fc4465741c0c9ebae447a193fb9dab8e420a7e1f2e3d90028b9844cda519fec4067f85f6e5fcc3e1bffef531c8c943f21f2e1a6dabaaf4ab5ff6b486b3b7e6cb9aa681a51e4fa98137b179fc3a7e72f54be20882f75dda845a12abf4e405d246fb06a9c6028ddbe2d02c19fab4b40f6d25292d0b89c34c1ba8835c6ba4aeed936f1986cc50de17911037b228959b9d90838571ecbb8cac05227d5e278c371fdbc40698a9cb0c5a41a0443fbe70dd5642532a26dee06d22b4da0651b27f47a75f09bf3432173fa26b4bd9199d3b3effac3b5a644a335d2b091fb28ae232f0518fe1f9f5cad978b4918a0adeee04cc468c26e31022ad3e503d57136369c4746eebe27efb16a075b7bb11549a7d2db3547932654606d990e6cd4fd9f78148835d0ce3d4d8934bfd5b1df587849574e200d5720eef4b025c963ab96f32e54b2124e0c6478b97b21ad385ed2a1cf5fe5399f9fc327d6ad848d2c7a689b8d5c9be62be6dda2d3bc2067f52778faf080193fe81f2a4fb43a169854104756b3b8a1effc5207a02eec64e138321aa09d04682a08548bc8d6e4295b3a1d4874c7c9dbca21f4aa069d8b94be0a8726b39d968f430579ecee36c80a0f0d63317ed0a1c01cd50c4f87abeed495e5218ce4b8081b10eacdfbbf5048ba59e17c4d213af352bfef26e6a795c56781212534096e93014f8f024fe2af5a271eba4bc23029cda9cca2adeccc3c213e7be32869f05bf11a3d6491dc5236e1ec5102cfab0151bfb71f84093fe582d19d41c3188edd728d4ac1c16d858c15ab1cb136b135fddc66a092aca83edfc4c459baf423550e933f0d36b837aaee4a828860afd5e2c12ce42ee6229456859ebdd98c2cf739a3e8444ef97239fed2204f280bd4b8fdcd2f041d4cb69e59bd7a2ee9652ef100ff6f2a1eff6e089c997a090d848a7996dc4b81a6df763816180778a9c09864b6877b6241b3cd9402fb597809611b471f00d4fced9f9dbcf003a98b1d6992b37e48834f0862260dfcf8c6649d167395a623d376e2acafe4d834d16d2446a251b6078e16baeae73cb2a9602dc4dba8c142b859903c5083db985ef47081548d69eeafc7e4938ecebc221df669596dfb05eb6abf3f1bd33d38abcbfdf01f5113e3409daf91a2c31e497bbabc6d07604510224018d22520cb5a7162181ba61df7128cd4c1b0b9fe0890c101f662e6a1fd2fc79bcbe01f4f8a3e5f04d618feb73fc1e20714b74d0a865df5f3f66443a1ae6661db0dc0dd47c992a4426569aeff621565d4c13b74c917f30b72b40e0f7e876926b1a6b14e1ff60fba20196aa937f555b4985a7003e66bcfd33706e5cc3dfdb427721e9b1250596c6f67e1a1cf21c8fab7350ad068f4a2a5e431fce1f356f78685eb4bfc8c7be391bedd65c5f924844e1af830bbc6f0050ddf8a7b4ffbd2ec3cdf6536664c9bc468296f48f9fd43bb2f37158b36d47b27da07587e8b23f66bf059a948d414de3b42750226178e94c45c971e7cc958e2017235ffc80d267c32a7756dae27aeb42987abe6da434d5eed11b9f158e7369a9fed43df2216e0707410db3f7a98fd4d38f02ef0c1d033048a8d3c390c98943a5a696fb8bae82d76681fcca1c21507d93f93fb1daf7d033727a7c4b10acc398f6cd716ceb7ebdb63249249acbaa92ae08ba39838ac15387c8a70b8515beae1e0da70b53285bda8f8a1ec0bfb8493911c3cd27cd6e695c6988befbf0bdccbf4adf97bc00ccaabe3d636054d68e3d91088455ef793432e62753d3ce6ab4e8a82890c5d6302e231ecb94b5ccb1a09dd60c1ebdaa082ae3a1de5879874d48bae530bb44ea8a86f490244eb85e577b5b49504447fe22d7599c19f9313aa7ea0fed891d9c3e1baee83c6de4b76750adce3eee62b21471ba303a767e137bb199c4ddb70c2f61e87d02b29e31385a4085e03b20827d3044fdcce6dd793717359acaaf0c3db8c0c35f63c8cb5b0586b2cd0dfddce287f2f1264572cac1e589d31344bfa3e1276cc90ee6f90c04ea0c111043bc52adf8220884eb7e64d52701d2c01fa213ffac6aaa817bc8926bbb1755cac4ef3127208bd84a3d869d08b4fe6c07e6ea720796124c78a3f20ae368c7df914007d5573cd95c1ffce0aea55c0fbfac8e220a27a9134ec21dfbdd2031b73d71d980cc885a3a1bb7872f4717892578c925ae14bfda8ce634153d21275e37e09b94d9341e8ba0f386c3a03a836e989f428dfc2692e7880d536e86385e098e77466438a464fff2a6e8394b7d8089d614646eb3c1cd3e48ff6e0f73d464e0e7495d940b8e4f09c98761dac63a919ba98742d0f781464dc1734d96ff7d159e0391fcd02778d6e74e032708e4a14a1447c43fd47120298a3591dd31dc44ff7ae2db11264b444c489cf8c6d6d3673a2efcb3684ab708b82bd9920b5a7beb7f6fb1e08269921600256af89d58acad30f5403c3aedf3e806f2cf579ed9f5373295770771b178aeb18cbf8ce1f7ff8de9c4da36a32bfea1a89c811af281e69988f7c6d9156e2d5e2bb988742c7b7fd289dfce6c4842f58290470e5c9a045afcd14ff3886b55947f337f4d12db4a0ce21f2e803be301ac8147747b12abaaf13b807db44b92df154763d47bff82ab7f5383f73297555fa2153b7b7f3615a301e7bcaecb1bee629fe364fd084db67cc042e687f4b27a91b9c8527b20904946941ddc849b7657ba94010ce7c0e3cfd199a1e696e2a6764a798954b0e4c2a3b46414912218cd5b74797e993abc6c9851270afae9f2699c5b6695b60f3f7f8654ffaa2f4b7178572283a5bd9a0cd0a4094c31a211bb1e048e01ac5e67a6f73694bdae1e74df60d2842d2eb2085b301554daf910d0601758db3760e2d0479ccd8859a3f9401ee904e62ae28b7acea4254a18cc924119afa9562b126faacf5a0e2856098d7ef6df3ae895eec1a830eca2eec06aaff2136edb5bc4f5d920a579a843a79513fe3c8a77385d7e7afb6c9a42418535435c1dca98882ebd2f886de172efd3cf9fdfba029945c01331fee70709dfb5f0aa39a4f8e094da5430815b28675e0ff30a1ce270b501f4db132a5dc1cab5920d486682cfe6dbcccaff8f841e92ae608ce850fca9bf08a4f15308891bff4d3caca239f6e64bef30f0187011ca14373ac6e6318cad664a05461f188ef58805adbed808bb66bd1c4c26da0b0c5bff80deb599548c0e4f295a10a332b43ff4b8ce9b816fc53231eb39b4cc4b9dfe9948d604c140d639f2797179f627981371cef7aac482300dfac7955d8b553a5045187bd3e53711a78672934b4c2f47ce59a64f5d367b0ad7900c9e822d57b2a1bf46a803231881bd3a779b1891b916cafd49e9341018be72717665ad900f45dd698a7590c2c30eee0ede8f3cc18319c8b2e258a0e674a7d1f5eabfb86570aefc5d5121d5b10c02e2b179c42af254a5368163fac5b7d2bba0f70608426ce4905609bdaf2eb7064f7a9be4b65224f9a345239694f38344f0e21a41b6aae1d54ec9d64de3a3d114949270f028cc2e61c77cdc193aff02478be69ffe991ade9e5857ec38eb8b62cf238a42803dd5b93130fa805570b90fab5fce002bed9b5874236b83b31e36a80b012934b41d7464cb36941206d223f1ad7e5e2dd2f296fe9c7343a1152beca01dbddaddfd53722e39529f6d600b8c80913c7a69b9eed3364dddcf096f1588e4f47c92d005b4d95a807913f6fe7917ab15ed2c021c730d959a39cdd687ce2fa3f4f7ea1cf521d9491651af32271d66b975d937d3b2e49b02babef6fbeb4ee51579cf95bd84d83d3c38110eaa594804a122e10f3bd8c0b6ee3e6e39d48bf2f7e761d7ffe8c65e0333d38600e7ad49a735f2148ab172c13315cee7f8bf08d109f42736d12d151e2102bbdc50b4854392e6e67a56403844c6dfe401d072ac886dc7ffbbc32c135f46345e2404c2aa3d73bf3f5cf542876ed4fa330ff4df573ce97ec5e75dd043bb142bd158154928a54a76be95f8968720850ada87df491894cffd12090ddecad5973bcb385ffb19a43ee5b401f33d8842bd984054274d26175cc080164e020d97298bb4935dad7e67c59fc95d1edf35e84a0fe72fd7432a95ae492c3d8f7ade39642a10d798b62152af45e949b6c5c6a8d7f254e9a37ef3e76ebbd283cc041d31e3094ece58db7d08a4de316d3583996dd3ad48c04d8af1602e3b7f4bd9cc8a754d1770fa5321ab7601183b35668939b8e69fd95a64141ab6bc4896b15584eb148df2712d7a201218140edae5b9948c9dae898655e60d367c77ed6c955837e1012d1150221393c200a97783a38bb587a5ed544d9075fe1d2494d0c0125099406f778f6a001b1ead61119e77c1a3c4c3d0711aaa9ed3bf789492bec976b7683de2db0811f4fb2916ed98aa3ad5d8bab6710dde1b39640bd19907ea9bf415d6795ea3061149ead361bb4b1fa69f4d2f6b98aafb1039f73a66e3f9fb5c5d2a8df4a622d99ca2329820d7f495d8ad5e3f3736c10e74fcb195af5450fae79dc754a4f4700f70b83af145e46508b5f0e3207f577a8a48be69f66f736d35feb8fbacc88d5e70a5ec289c988b3cf1d13e10e9fec812f8a50cea00bb656833b961e5c04ac26954eab821829b74eb04b01a5b2dd211fc3d8d691304b2cd18dd2e671a434cf10bb243e6429e4277acfd3b3e025029527fee7cf20f401d5d4e1d548bec03f82bec92f1048609b8d318968bf6feb2682e99ad2a7e861632625ec64f761aa778503b2e8e44afd8151c61d3197eff3f8ba14035d7188d1a9cbf1317ca356ee23c6ffa55d3d78826cba515dd6bf47aabe64244270f1d6885d48afe6c688207717574fe52d90ee73a94fa62279a334120174b916533bf8b7d30fb05476d3d9105af0f052a07045800669fbd7a55a71b3001c50ff5023ff944ef7656e106cf483f3f42537d4b642c3bc4612f75b2ae3c3474b45592bf8997adb77756b2c3d1d334aec22402549a369cea77535f6275e7fb0c4ebe6f137c4c526c61e9bfa1cbdce7d8da06be04841a49240e10aa9041ec18ecf7fa37ba6396a938ff0296d83fc5e23c978ff8a384c8061d0bd48a8172422e1d3bf608fac4901b65ae98b36d0ac26cc916ccd1d7f7969c3ad3f66324a0336dbd4e19a52f5f7e492cf413fb4dfbb74d658ed14afc28918b1853dc0ac35b61eeec50707c943894c396dbdf6775315288508f1a341f8d4ca0416fb47f35e3a9f45688cc8d946e170e95ceff26043de40f3478fd031773277578ed1cf3cd22389ac904c75b8732ab90e90df767afa8235fe436ebdfcce5622e4a969250e537a2cfd0a7ec38e3752c14cb30a632c53163136abea44c0575030de7d0456816beb150654b77f78d6a85699ceddb1c9ba4f9b397754f9a5f9ef7e2b0019a3482a2c6a43bc932cffed676d737726a5e9e738068ade3b7b30929308ce28615da6a6017119d8d61d8e8577e3eaeb16d5d992c5b348a28adb27cf7e444879fefb20aadc8214a2cf8e62670012043636bb99de978b39d4770582a96131296357183bfb7a61b12d22b0d18228354a638668dff03fa543cc2d80b0d15488c4f2e6178f7bdeb9db2e57506ff93303dea0be5bc6ef8db9dc37086601c8a8184215c303c19df1975d61946b726586e7a65ed567d5962667562c7a196bdc489c931baf758c17242860d2a58a0ac0123d20fc7712f4c0e976a8e73c33947821349a536a1b53e67114b041ac7f8ebbdcb20550bb93827b8353f01e418311310049f549cc4bdd64a68943d6be9cea0ff499491972140e8402de301f823b28671acec772ef1242bbe9aa9b81c0458e9b863023cd88531e38a241d2adcce62439dfcc91b1a5ab3f64805e6690a7fa37f006e444cd31edb8ad7fc4b1008e102380e8a74a5e8969fe134b1673e179223a586288cc11fe5021f8e9cf1d99a8e693edd1eb94390c7a42b20b406bf3039e91328528ab9b23d4ae89cf2baf25017f5566e73404bc59bb360922929604d574ad8264ee6b6354253cb5fe95ba7d576b6d7d02066e7b5dfd83cba87e04b23b2279bfaa68bdd490d2380a665cff51e04a5880de28eccb4d618e3acdf343389dd4ae26fefc5c256d72c9123b1cf287493f80f436495cd4cb9e5fc03a2f33010541a363b8111d85e2214b7137efbd7f79baac8786e92358e7c659ccf01d6ccaf63d1571f82e1da396d950274a111af2f3860dddc2ed4f732f59ee2d50cf02bac7fc31812ba86e4599ec8514cc5c42fb744c5b8a5b555fc772cd0904fab438a2723ada55ce242a72dffa6195b6532e38a7eba23e9c2ddc9a47726e15460403178a9ff824b0706d24ea3972b23c18b7fc778556051106a47c4ee754ecf559c6ff5369092adc2912dd45453a7a1a01794634f76b642635e8885251860d020a0b1ec37a8cc276936d688887eca9951e5ef765e3ef6e48cf5ed6617c3ee85b4082e6707f7385a3cfdfbc2807f93f7a0949bf5e32e6092ea57994a51dd068419e689883037a3cbc0cc963023f21f581de6f194ef19098db20c9ea0652fe61a7e60ed6f2a3a2d202884f4e9934bd41e782d34e12db179e967c61764100866fbfcc2a704ed2a1a4140c104809d02f7c397478826b58c6b20d66a28ee8ee5a7a84b6002ed6a698c07b56c09a69d0c0e1b4dd2d4bb4e865c8eca46d61d1400bca22c293580d85b98f41026ac938a68bdd5dd04eba9242b0171e39a1cf829e6db3f3ccb73718c6d65063f1a829bbae19a5b1f3bff0a2d1fe0aa654c95658cab20aa6b1617c95f36dc6febad2199287d11b6c7f1c230c78d770413d2a129d1856ea178fea74d5e80cfc8368877c3dc4d4931c04eb94f3cdc7f823a851a625de74a82d245b946608a8e5218e35e3766035068f11d34074604276048da13e156ed666ea3ea110b8f2684b96b738ebcb56f07b9da97f29c1f44ba1666b551ec7cc2895d3f5d1162c3b726685ba7b4057a91080ad446ff92adc414aaeddef0aea3dde4b638dc3955ca4102dfe55973e89e0beae5bdb145500dff3658d8d0370b8bd18686e69224cb5109e94e529a3a0282dc3acc40e95d47f99e446c78f27706a914468529c254568ddcd18b1d1c7bad20cf80222f1ea6e2a029d8faf474658b766f451a1851f87d12f2df31c08441689ed7ec9b82a165110f67648160dc5c29591d752deeeefb740a29f7e5f54a25d1ed79d86c4416f3c1d2b34265d9806ebcd87bb762462435edb5bf35efc3784147029df6331d1fb8ec83e3b50328bf52f500714cd596af8b665bd1b2172b848eeda54ae80c492094130c6ba8a5cd65339874c90c6c825e4658d23b2bcb136319cf9a4d3fa9de18cc88b9b2e14fb228e3418c9f485c919719e61a33ad3d6a3dbef53eceef551199a2a97f8b7e9bf8b42a00d1cc897657a0edc112b160a3d467c3a0c7c578631902c8c53d04b14b51384839fe6fd1b947e7c6b73591f0234761858c2069fa39c6b43dffa6c6212c424ce4590ddccb89916f219ca24e10fbab286309cbc854d2d7092447db463323e0d275c54f87485837fa8bf429e4399be6c02d136f9889f03dae73e834676723e38c8ab35c08bac942ed824564b6e89ab63ab1e590e5096297a234dc5cd7cc373ac9c8414bf5b278aa582a21c94540d2a11afba658be9070cf848dd40de2ed1fcf72ed6d6b3756f75ab21461c5b819e8226abb350fcb2d03ceb202c61fba0c6ce43014211a96ccd87e5afc1f7c8022bd9b7b190b2089c6d6d96a63cc6b8036abba43395efbfd628120898e20bbfc59027baf9fd921ddfbff39561f43173115da792f91e6ceda70dd47ca5873c2e3a797dc76655c3c2e58aece96f2ffa7a600f6e3ca0610cc5cb0831f04ec3bc49512e0bf0be55eb9acdfd485966194c9bb3fa87d14fff519849c101957b3954a9ea8a4c880b4c8f27af3dbacf58c5fed57679d0bd25946cbe1ea3357c22c7003f260619e263b1f6827e38e53185b5e769e1ab21ba504131e2831f59e058326fdb187b8a21f5b8013bdd9645f7b83ba4ed52630c76a7d5044869f6820b679fc4e1b012529a19d5a4481e4b9ec602ddbdc0b8120eb60d5bf9fbfed346f75fe7e30b364b44f584894f630f617f53e76054dca19f77f34a6f75df233321eee42f6cd73a6cedbdc7003195b08f034c9c3c83dbd791303a971b41c0845bbdd4b20d0d37a727b969523f406daa3ec8cd5b163a86cbad0792a01f85cedf457e7faa53e9d78c6e897f25365a6a96fbdf639550771c4e490f1dbbf1b44c576bc84189945a58521860534e2d2855e28f88577bf45b2b7ddfc0678378ef7e4f3573a555ab6a3d03e5b456c6cab18be62576bbe39f3b7a8ff23628e5608d762d01c928f6abbd902508cfbd4e1d0205f4eaf02b946b29a5fcfd4f926b4045faf1dea70574874767b3c88e1f7e7cf2eaae22b8d0eb47fff39c7229f776549048161d3e0f11ecae713ffe83cd38488d172c7e396eef391e05b8d9a88e39970eca0bc6277f73f5a8b159c9ed7c448e4fb23d234eda92ff69792126000735dd4030778fad4d4d7eafc5876fe5e14634f4a93f8897af77dac1df6082eee720199281dbbdc914066ff18f661041f194da1e5cd45bf3a5ab6c09729a76ef65e1574e410606f3e681543ba79ee433c1b6da05da1c16e282a61037de47d50a34df5828c12554d4bd0648ff0403e9a2cf76664343cf13ea312aae7cc69479db5bd1bdc32ae55c70638daa49cd6baa596ada779db3363cffeeef6b7516bd9f55b564ad954672051aab21233e11d4c2c65a2d3023a42eed150470c582487ad510cf1e8ac0b13854d1ac84403ec8a4979906bf4cc5e53852c5e20719e032aeee914965f31b1afff3d78605e7f32f4d0912b3aae0fa49471fe6886a7779ce86b00d3316c3a7f5d2594e3eae88c6db33ac5e03143a1a2a6c49c0f1828b42962498b11356001b16adab6ab95003554513574e874a4807c4d54ae6528a8039f7d3e6a85ef40d8e942e72b67e83a19c111284c0d82c5ac33dd88c0462ff97eca712865b27ab4a55576ae5503437697859bb92a189af55f4174acc55cc326bbb084c48a811aa6bc14e613919a4e6d013aac22367ce250aa2b6577b8bb91e352749b839f6455c8497e40e3d462192365b1cebdeea11407c7368071a70dd066ae74e512257293fd75e64e42e519c4885ab833cfcb8e02da59f03f1187a74464aacb3718da37d84d8aea2e44e5c15a00b3d4b9821720b665e747325e4daa4d84a798f6bcd6c1c80cdabf128f8279353d807f409289fa48f8c6cc43f36a52d37e487f7a6ae895d2654ef4cbb00dbf6c73d3de51eb3a7cbdca2ea1e614b4c62e673edf91d0e67de29c30a27d1ed28c3cb9ae0509dd0cd1d7b0fcb421ff4a21eb41cadbb5cca4ba1c63da4eb5880591d620ca40ce74ab45f9c5f2bab4f18d5532a5e3ab77f2821e2cf1213b4b9527c1480ba2c31a7fec49815c4dde61b1f1e0911b6ea143fe789d021fca1265916494cbadb0d2df0cb518c449895a407d58b33a25a7daa56a7faa42cb9169443b5aece0578eaaa2ab9863fb16643b149f5dd4f69350d612ec0c907d37876ad9510a7e2dfe3ab7a41b4f2765cf199cbedf484e6db9828eef3b59212341a6f4d33ac7ff39d9393cfa63c7fca2667718b622d7058ee0392fb34e96d62a10a3f1ff251783aa36f4dd87c61b028f01bf825301de87ebfe546c3902c35526dcad43051fe36764ad33ffa423f49ffdddbc9e20527f193626ee6f41740f23d8d185dd0dfd3595b59d2a604759409b7081e01aa2e4d2712dfb9a424fc6e18ee0f74e76c3db9dd497101461167313cb89bb266b8ae487a7af5b1cd05ad97d69f0b1a15fb15365c18242aacadfa329bf7eb347ac389814c6abed7e689c13401f8fae6e115e37051a070723d33c288576390effef39c54c5c5a615840b8c351fa71c861057b25594d81bdc91d919be22a92045edb956c3650eb0c509530056226476b27ac6a97ca9703fee8f7abcf2e1d0c1c780b25e831f745e02a71c1689de798f848d3e28b8c27c1a05775683f3c26609bd374da65d5273e13d68402a0d28e0ddbe402fe8b17a30ba983a43cf218cbcfdd0425d3e461bd1f6af8081728cd93d54fc565f8ccf5d7727ccd886a59426fc3af1f072754b8efcc928e754532f576f3a43bfbfd3ecc3edbebc13b8daa1b78aaf2e6e88b224528c32f82bb6b22055e2ee17a13aad4c4ef7fb0851c182ed7117dda04cca9019103b1ccf1c2fccd88cee3c12cbd53926989c0a925936cbf8e024e56d4084771cdb733bfb73368a47066d15a2090813e2d05ad5451e92228002cb2fac509f5c153803f1b43e01e625e0c2fb9b2c2f149be1b43a28aaba6525eaef7cfef283bdaa9b787a02e54849e2dc52d1d376b4f3dc394362dc1d5a7490386d35e400b66bb91b96730f6727f589626b0dcf7227086b4acdd98a39980f11bc29dc6d70df9dc23ae5fc8043ebc0f2d00073c4a137d19113b909d2cb4c8acb5d32a50d57f1bef69054fe26489f4b15f7a1045c077c69ab76b5a7fd7081d8491e067fd558546590c88728009dd428b5c6733cf6c0e12b94814d6b03a5c32208ea39c56c48e8889882910135fcf63c17f7411498c0413cb951d5af4db2c7339e78bf55b3be22d12b7b2b98b3f763987b94c922557a4b0daf42946f9d282664ca45f1c71af12b3bce7ae12ad8b0156043e16aeab473f5a44aa9c2bde9f4f35bf3c2b4b7d3c2d55819de14c20f78751cf4d6ed452f0371ec5d449ba1d34395196f89488ca7bd9e0a6e53444dcef5fea36b1a5d5ddfd1d26572cce3904d1cc90c66af0e1c1a98d0fbf0bf33f1d990b886453bf19900286dcc5ce1ea342a1bff48c7cb82755bedbeca0c2cbd7dcbf6b9418aa880775f33753b12687121634f0996ed27db1c53388018dd8b8e91240bf4d0a8f897ddd651af18d2a050466c6407dba205bd7c10f19256148c471820a2107e6a224c08e80fd846d4c6eb49c3fdc4c2a2d7e7c9e03754469f0378a7ed5b0adf134312e8cd9b0651bf1ca7ed820b46e363d4f7c3e87d5d886adfddffdcefce4767fc361df0f82061b6f33493138daf15825ed71ab2dc95a7ff8c89fc498493289be5d450940d477711f7e942c33224a29aa882732878e4264cdd490377b7a59fbfc243bbd54bf6a0620ae5b33503cf2a05c4c87bb7727497abaad5a91ceb68d47e1caf528229c5617dadb6c57877d96e8a2c666d0eeb1055da05a2c8159e242ecbfd8b7460564f28ce15b8f4e8a8d21400da746ef5e638696714e9604e10ccf26aa6c0e14543b5a05eee2c1ab6e367fdb2c74f3f5da8f8e3fdba20eada1dfb828584fcb87eddeb0393b337e80cceeaba747657325b50ec7a573ec3779da74280bb2865393651a434fb874b056f63dfab30bbe32930185eee121264ba6637c0d792acf3554a51fb9b0e6ac876c67052301254cc1f13720b388586e39562eb925a3f278dfaf6bbaf44b7a68421d5adac3f9cb31ec35f0b69101ab89001a68b7c9b192da8a3d68fdf31079da0013de5154ae42a85158c42364aeed0a076ec2185aa26fa93f6fd6abaa0add001527d034629f61f69fee2badc2677359b4193e99f5d37988e3918757c8f0d668a007f501fbc7fd1762f2bc68b5b1d980f31ca333a5ad7256934cab49b29486c3eae3d1e681872df3046644689334099b68c97b18c9080a7c4857ed3d46e628dbee2f6a9cf9cc866bb680aab4a165a26210dca6dac7c9591c66685d52f7fba3cc5d5f454ec9271ab12aa2f5389f8a1b439002aa6c212ec37564bb04eb29adccfa2bdedf8a0e2c3daf037142f5fbec8caef0a4ad758ef17e82225d6b3e2f23a1791fd93c93e6d19f10bb4f5ba9559e3dd623a80e79350f3e9e266489dba9f86222eae809f30b0006470da6338a6f275c0d992683aa2ac5b434dd1c7589b7a6c0022f4b475cb9a91ed4a0c8df642544e462f62881e37472bb4dac12b0545e8e0cdf10ab3433a402d59a605fa31ec6b91d20caca1b4896c7d7dbee3208a8d7c46fdd0b2d92ad0dc69740e6ee869a15841268768aab14d8934983448ce50dc89aded7a34935b6021254c22ce86b96686e4b1c64b1932eb5e19cf7767692031bd5ff9d0559072f7dd0fd6b8569fe08b535f40c1cd8081e8dff6b55b9e6cf45911b67da0a9687210deb565a8db7976e686c866c5850817b440976df1e0a7f2629506d9065b1f51a46f3d6d55d167720583375a224622e02b979b6fd25efc41ec18bb9ba69754397a77692344ccb83eebc8590ef105bd5c6fe583826395c56c491ef4043782a50138e4f68a935adea62b7424bd6195fd9622e6d78aee70c9809594a32b01cfd0e2244588c7396aa4ec95f117d5a5c9ce5d4dc0a2abd3efc0130c5cb52c61d4338941e99e7c419e7ffec871a09a1ac102fe5f9294476d63fe001bba1a27de3ce39cccf63f926fc6dfce3def3a12855800d2c3df11b848eb5b7cd7409130f9ddd6e56764868f3133d172b02f7bd5e80f9321ca7f664d24ea0dbf7cf63be3083aaee58fc0405bcef4e71c273230f948933aeab3e86888bc20e8312b413bb885e88df3ef7de77a2325df367f60f601b5e81371154bc4b3447076c1d272c7c63c026ed8e76cb9301ae3ef3a21aa51df9b7e58ae2177be1fe0e7684a6522a3b8ddf4b92577880216050600494cf733e5b370e1314df7aff23c96acdb8084a016cc89f30ed79312845683eaf1653f097e20095b20e3f5830fd7caea5bef37710bf4d8deab8993435346716416ab599ea8f35b3c4e01c4c264794b72ec9babe6dd90d5fa534c989e02d383bf58d79362c1065c5773915cb5fad8fdd54850db0dba6d3b02c0ae0bff10633987a2a4b84eb6ecf79af112e7473b3491c8bd5bc0ebc83a54a7835fbc515ec5edf563601057d5d2d3145b5c846ee48ac8a0c811c80d3c71b8309062b41f63ab2ec81debca2404261b4915870668d03a450249998e21126ecef329d22ecccbd

p_factor = pollards_p_minus_1_sage(n)

print(f"p factor : {p_factor}")

It took about 4 minutes to complete.

For the enc_flag: bcb0ed5c0b1624929c58597737cb83f031ec0ad196614b13a4063a7389ab366d9e3a20b11613c3f8b5a6008eb7fa06a7
the key was found to be 904863707201

Decrypting the flag

from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from hashlib import md5

# Provided key
key = 904863707201

# Compute the AES key using MD5 hash of the key
aes_key = md5(b"%d" % key).digest()

# Encrypted flag (provided in hex)
enc_flag_hex = "bcb0ed5c0b1624929c58597737cb83f031ec0ad196614b13a4063a7389ab366d9e3a20b11613c3f8b5a6008eb7fa06a7"
enc_flag = bytes.fromhex(enc_flag_hex)

# Initialize AES cipher in ECB mode
cipher = AES.new(aes_key, AES.MODE_ECB)

# Decrypt the flag
decrypted_flag = unpad(cipher.decrypt(enc_flag), 16)

# Print the decrypted flag
print(f"Decrypted flag: {decrypted_flag.decode()}")

FLAG: uiuctf{Finding_Key_Via_Small_Subgroups}


Social Media

Thanks for reading! Follow me on Twitter and LinkedIn