diff --git a/Script/validate_p2sh.js b/Script/validate_p2sh.js index 6b15fa8..fdab4f9 100644 --- a/Script/validate_p2sh.js +++ b/Script/validate_p2sh.js @@ -59,76 +59,44 @@ module.exports.validate_p2sh = (prevTrnx, msgHash, transactionData, index) => { const hash = `05${PKH}${checksum}` const generatedAddress = Base58(Buffer.from(hash, "hex")) if (generatedAddress === address) { - if (prevTrnx.scriptsig.length > 288) { - let scriptArray = prevTrnx.scriptsig_asm.split(" "); - let signatures = []; - let publicKeys; - for (let i = 0; i < scriptArray.length; i++) { - if (scriptArray[i] === "OP_PUSHBYTES_72" || scriptArray[i] === "OP_PUSHBYTES_71") { - if (scriptArray[i + 1].slice(0, 2) === "30") { - signatures.push(scriptArray[i + 1]); - } else { - let str = scriptArray[i + 1].slice(2) - publicKeys = str.match(/.{68}/g); - } - } - } - let len = scriptArray[scriptArray.length - 1].length + const [, reedemscript] = prevTrnx.scriptsig_asm.split(" "); + const SHA256_PKH_HASH = sha256(Buffer.from(reedemscript, 'hex')); + const Generated_PKH = new RIPEMD160().end(Buffer.from(SHA256_PKH_HASH, 'hex')).read().toString('hex'); + if (prevTrnx.witness.length >= 3) { + let len = prevTrnx.witness[prevTrnx.witness.length - 1].length len = (len / 2).toString(16) - scriptCode = `${len}${scriptArray[scriptArray.length - 1]}` + scriptCode = `${len}${prevTrnx.witness[prevTrnx.witness.length - 1]}` + } else { + scriptCode = `1976a914${reedemscript.slice(4)}88ac` + } + if (Generated_PKH === PKH) { + //Performing OP_CHECKSIG msg = ver + hashPrevouts + hashSequence + outpoint + scriptCode + inAmt.toString("hex") + sequence + hashOutputs + HashTypenLockTime const hashMessage = Buffer.from(sha256(Buffer.from(sha256(Buffer.from(msg, 'hex')), "hex")), "hex") - for (let i = 0; i < signatures.length; i++) { - for (let j = 0; j < publicKeys.length; j++) { - let publicKey = publicKeys[j].slice(2); - //code modification needed - let result = verifySignature(signatures[i], publicKey, hashMessage) - if (result) { - return result; - } - } - } - - } else { - const [, reedemscript] = prevTrnx.scriptsig_asm.split(" "); - const SHA256_PKH_HASH = sha256(Buffer.from(reedemscript, 'hex')); - const Generated_PKH = new RIPEMD160().end(Buffer.from(SHA256_PKH_HASH, 'hex')).read().toString('hex'); if (prevTrnx.witness.length >= 3) { - let len = prevTrnx.witness[prevTrnx.witness.length - 1].length - len = (len / 2).toString(16) - scriptCode = `${len}${prevTrnx.witness[prevTrnx.witness.length - 1]}` - } else { - scriptCode = `1976a914${reedemscript.slice(4)}88ac` - } - if (Generated_PKH === PKH) { - //Performing OP_CHECKSIG - msg = ver + hashPrevouts + hashSequence + outpoint + scriptCode + inAmt.toString("hex") + sequence + hashOutputs + HashTypenLockTime - const hashMessage = Buffer.from(sha256(Buffer.from(sha256(Buffer.from(msg, 'hex')), "hex")), "hex") - if (prevTrnx.witness.length >= 3) { - let str = prevTrnx.witness[prevTrnx.witness.length - 1].slice(2) - let publicKeys = str.match(/.{68}/g); - for (let i = 1; i < prevTrnx.witness.length - 1; i++) { - let signature = prevTrnx.witness[i] - for (let j = 0; j < publicKeys.length; j++) { - let publicKey = publicKeys[i].slice(2); - let result = verifySignature(signature, publicKey, hashMessage) - if (result) { - return result; - } + let str = prevTrnx.witness[prevTrnx.witness.length - 1].slice(2) + let publicKeys = str.match(/.{68}/g); + for (let i = 1; i < prevTrnx.witness.length - 1; i++) { + let signature = prevTrnx.witness[i] + for (let j = 0; j < publicKeys.length; j++) { + let publicKey = publicKeys[i].slice(2); + let result = verifySignature(signature, publicKey, hashMessage) + if (result) { + return result; } } } - else { - const signature = prevTrnx.witness[0] - const publicKey = prevTrnx.witness[1] - let result = verifySignature(signature, publicKey, hashMessage) - return result - } - } else { - return false + const signature = prevTrnx.witness[0] + const publicKey = prevTrnx.witness[1] + let result = verifySignature(signature, publicKey, hashMessage) + return result } + + } + else { + return false } } else { diff --git a/Utils/calculateTransactionHex.js b/Utils/calculateTransactionHex.js new file mode 100644 index 0000000..d27114e --- /dev/null +++ b/Utils/calculateTransactionHex.js @@ -0,0 +1,107 @@ +const { encode_compact } = require("../Utils/encode_compact") +const { intToLittleEndianBytes } = require("../Utils/intToLittleEndianBytes") + + + +module.exports.calculateTransactionHex = (trnx) => { + if (trnx) { + const ver = intToLittleEndianBytes(trnx.version); + const version = ver.map(b => b.toString(16).padStart(2, '0')).join(''); + const ltime = intToLittleEndianBytes(trnx.locktime); + const locktime = ltime.map(b => b.toString(16).padStart(2, '0')).join(''); + + const inLength = encode_compact(trnx.vin.length) + const outLength = encode_compact(trnx.vout.length) + const witnessExist = trnx.vin.map((script) => { + if (script.prevout.scriptpubkey_type === "p2sh") { + + return true; + } + if (script.prevout.scriptpubkey_type === "v0_p2wpkh") { + return true; + } + if (script.prevout.scriptpubkey_type === "v0_p2wsh") { + return true; + } + if (script.prevout.scriptpubkey_type === "v1_p2tr") { + return true; + } + }) + let msgHash; + if (witnessExist) { + msgHash = `${version}0001${inLength}`; + } + else { + msgHash = `${version}${inLength}`; + } + + for (const prevTrnx of trnx.vin) { + const rTxid = Buffer.from(prevTrnx.txid, 'hex').reverse().toString('hex'); + const output = intToLittleEndianBytes(prevTrnx.vout); //convert to 4byte little ending + const index = output.map(b => b.toString(16).padStart(2, '0')).join(''); + //const sequence = Buffer.from(prevTrnx.sequence.toString(16), "hex").reverse().toString("hex"); //convert to hex + const seq = intToLittleEndianBytes(prevTrnx.sequence) + const sequence = seq.map(b => b.toString(16).padStart(2, '0')).join(''); + + if (prevTrnx.prevout.scriptpubkey_type === "p2pkh") { + const scriptSig = prevTrnx.scriptsig + let len = prevTrnx.scriptsig.length + len = (len / 2).toString(16) + const prevout = `${len}${scriptSig}`; + msgHash += `${rTxid}${index}${prevout}${sequence}` + } + if (prevTrnx.prevout.scriptpubkey_type === "p2sh") { + if (prevTrnx.witness) { + const Script = prevTrnx.scriptsig; + let len = prevTrnx.scriptsig.length + len = (len / 2).toString(16) + const redeemScript = `${len}${Script}`; + msgHash += `${rTxid}${index}${redeemScript}${sequence}` + } + } + if (prevTrnx.prevout.scriptpubkey_type === "v0_p2wpkh") { + msgHash += `${rTxid}${index}${`00`}${sequence}` + } + if (prevTrnx.prevout.scriptpubkey_type === "v0_p2wsh") { + msgHash += `${rTxid}${index}00${sequence}` + } + if (prevTrnx.prevout.scriptpubkey_type === "v1_p2tr") { + msgHash += `${rTxid}${index}${`00`}${sequence}` + } + } + msgHash += `${outLength}`; + for (const vTrnx of trnx.vout) { + let value = Buffer.alloc(8); + let vout = vTrnx.value.toString(16); + if (vout.length % 2 != 0) { + vout = "0" + vout; + } + let v = Buffer.from(vout, "hex").reverse().toString("hex"); + value.write(v, "hex"); + let len = vTrnx.scriptpubkey.length + len = (len / 2).toString(16) + const scriptpubkey = `${len}${vTrnx.scriptpubkey}`; + msgHash += `${value.toString("hex")}${scriptpubkey}` + } + if (witnessExist) { + trnx.vin.map((data) => { + if (data.witness) { + let tlength = encode_compact(data.witness.length) + msgHash += `${tlength}` + data.witness.forEach((wData) => { + let len = wData.length + len = (len / 2).toString(16) + msgHash += `${len}${wData}`; + }) + } + }) + msgHash += `${locktime.toString("hex")}` + } + else { + msgHash += `${locktime.toString("hex")}` + } + + return msgHash; + + } +} diff --git a/Utils/coinBaseTransaction.js b/Utils/coinBaseTransaction.js index 07c8f20..8ad2692 100644 --- a/Utils/coinBaseTransaction.js +++ b/Utils/coinBaseTransaction.js @@ -1,4 +1,7 @@ const { sha256 } = require("js-sha256"); +const { generateMerkleRoot } = require("./generateMerkleRoot") +const { calculateTransactionHex } = require("./calculateTransactionHex") +const { readFileSync } = require('fs') const hash256 = (input) => { return sha256(Buffer.from(sha256(Buffer.from(input, 'hex')), "hex")); @@ -10,7 +13,13 @@ const WITNESS_RESERVED_VALUE = Buffer.from( 'hex', ) -module.exports.coinBaseTransaction = (amt, root) => { +const calculateWitnessCommitment = (wtxids) => { + const witnessRoot = generateMerkleRoot(wtxids) + const witnessReservedValue = WITNESS_RESERVED_VALUE.toString('hex') + return hash256(witnessRoot + witnessReservedValue) +} + +module.exports.coinBaseTransaction = (amt) => { const ver = "01000000" const marker = "00" const flag = "01" @@ -29,9 +38,20 @@ module.exports.coinBaseTransaction = (amt, root) => { value.write(v, "hex"); const voutScriptpubkey = "1976a914edf10a7fac6b32e24daa5305c723f3de58db1bc888ac" const witnessamount = "0000000000000000"; - const witnessReserved = WITNESS_RESERVED_VALUE.toString('hex') - const witnessReservedValue = hash256(root + witnessReserved) - let witnessScriptpubkey = `6a24aa21a9ed${witnessReservedValue}` + + const txids = readFileSync('./validTrxn.txt', 'utf8').trim().split('\n') + + + const wtxids = ["0000000000000000000000000000000000000000000000000000000000000000"] + for (let i = 1; i < txids.length; i++) { + const fileName = sha256(Buffer.from(`${txids[i]}`, "hex")) + const tx = JSON.parse(readFileSync(`./mempool/${fileName}.json`)) + const parsedHex = calculateTransactionHex(tx); + const wtxid = Buffer.from(sha256(Buffer.from(sha256(Buffer.from(parsedHex, 'hex')), 'hex')), 'hex').reverse().toString('hex') + wtxids.push(wtxid) + } + const witnessCommitment = calculateWitnessCommitment(wtxids) + let witnessScriptpubkey = `6a24aa21a9ed${witnessCommitment}` let len = witnessScriptpubkey.length len = (len / 2).toString(16) let FinalwitnessScriptpubkey = `${len}${witnessScriptpubkey}` diff --git a/index.js b/index.js index 81b87f1..03416a2 100644 --- a/index.js +++ b/index.js @@ -169,10 +169,10 @@ function main() { // Sort transactions based on fees in descending order transactions.sort((a, b) => b.fee - a.fee); - // Select the top 5300 transactions - //transactions = transactions.slice(0, 90); + // Select the top 70 transactions + transactions = transactions.slice(0, 70); - let transactionIDs = [] + let transactionIDs = ["0000000000000000000000000000000000000000000000000000000000000000"] transactions.map(tx => { const msgHash = calculateMessageHash(tx.transactionData); transactionIDs.push(Buffer.from(sha256(Buffer.from(sha256(Buffer.from(msgHash.slice(0, -8), 'hex')), 'hex')), 'hex').reverse().toString('hex')) @@ -183,7 +183,10 @@ function main() { //console.log(merkleRoot) const blockHeader = mineBlock(merkleRoot); - const coinbaseTransaction = coinBaseTransaction(totalFees, merkleRoot); // Constructing coinbase transaction + const validTrxn = `${transactionIDs.join('\n')}`; + fs.writeFileSync('validTrxn.txt', validTrxn); + //calculate witness commitment + const coinbaseTransaction = coinBaseTransaction(totalFees); // Constructing coinbase transaction const output = `${blockHeader}\n${coinbaseTransaction}\n${transactionIDs.join('\n')}`; fs.writeFileSync('output.txt', output); diff --git a/output.txt b/output.txt index 443abdb..48fdf63 100644 --- a/output.txt +++ b/output.txt @@ -1,845 +1,73 @@ -040000000000000000000000000000000000000000000000000000000000000000000000086a2d2207880d25e6985eb5ede51a3aea954cb60c4fee8c872a519f45688c138a8b1f66ffff001fe03f4400 -010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff1802d4ce0c486579206974277320406D697450726173616420ffffffff0202198700000000001976a914edf10a7fac6b32e24daa5305c723f3de58db1bc888ac0000000000000000266a24aa21a9ed12d663d8ba1e5e63c7361b82e31cedfa44b42a0254f257a709960ddaeafa14490120000000000000000000000000000000000000000000000000000000000000000000000000 +0400000000000000000000000000000000000000000000000000000000000000000000009ff783528096c442a88eb5838eb672060406c5026494a15c7c861317cc5be26113c11f66ffff001f7faf0000 +010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff1802d4ce0c486579206974277320406D697450726173616420ffffffff0279dfb802000000001976a914edf10a7fac6b32e24daa5305c723f3de58db1bc888ac0000000000000000266a24aa21a9ed336f7968228c5bbe49cdff6985fe5d0802c67f1f1354c6475e7b00787dfcf0d70120000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +a7a39be437c8b0e607897480061cd2a23e7d491336e015487205c05971258f34 +702f85a827b9edb33e0fa76b5d7a073c4683423a0a6127bcca98245d9182cde1 +29bc16c7ffc48394f743fcc7f9625718b0e276e7eb995c9e04d9ae110f37d419 a9e537569db3c64340ed5abcdd983e9bb1b6ad6f90c93bc80d31c5cc0490bcea 82f9f96db7bdbb9e70626747632e373b34eefd50d613dfea7092744169591b6e 7cb2a4f55245bae141a5d6ad51c08d7a9fdf2c2b905e4d97639ed80b82e69800 +a9f1f2279711f476c30e2e1382a0e99358c662a48fbd1774d7e5e7f8ea27d98d +4bf38be14f3a0f5b68e26bdcf018e7f18b5e8d78c6e04e710310df7c2131e348 +43341b756fa1b8fa389fd1569efe32a22df9c60155a35d8a8339d1f65a84667f +7f46e9e0dd3e25bef73469a492982232314e0631eff76367d7ccbd179c5e0299 +b9ea7324bf46de83ff81f0876dd8e6e8485318165cf9c5073549dd8824c7c2d3 +a703509738df47bf2ebd5b0d202ba6fd1f33ebad70458c49d2f9b9a293d525c6 +8a8c77517ae397e1228d9e88d692ce7846f723717379087d811b5da4d4142fdf +e1e53a01f56bd6daacbe53e3ca18fe1fb6c0722184c84165611639e71eeb44e9 +3d36e0bd2df2cc4636eee6ce4f5972177204b1ce822a1718dcd05ad8cc10711b +fc1f7b712f8d4e266f7ea3d34a7b1a1955fdba2491f87f984b39e16798f49048 +55814621087db83fbeabd92ef54fc3f5f2edcc42a430a97fcaa79716614c812c +1a1d940ef602def2b76eafb52aaeab8b77aa2bfdc21e0489a75e89e4bd15ee14 +3499cacb254415d5bee42d4403a8437262e6b6f37b6fd1a3d38c969f78eb2c86 +7824a85f07cf458b9ddd128a48fe804a01d34db43102f57908599624fb386a49 +101582090f156863f0d60553843e736dcbe979a1428b0716d953ebec1346e048 +b4550d346740cbfd5cfa103e5a9df4934f8cd6f17f9b19e01c03b473c91ef5e5 +77eb3b059eae31dd90e4ddc8ae12380cd489ed0657f4986da29039524e12a206 +3ed0855164d4b07ace5cb2122cbb622448645286db80ea1dbf6b1d1e2216b09e +fbdeeb6aa2846d3d198b141c52e5e24857e041a23e03b8662c644b524b4bb55f +263dcd0111b98a9f0b5ad33fe4f8180ad31aea276b3cb37254e9d1ed29da338d +183a93f988b0202655ed39af920a3ad5b52d1869c7cc4f49358e9441d8964d3b +e58c19664f105df8ea7a2789391d1d27bb4dbdeaeafd399bf8c13161ca2da3fe +8bf35e9075cea17c16515ade3e605ea5283a40cda38f1e1f87bd1717ff173316 +236689bd068890e3d5ed0223b66606a4843852abd2fab7267b7f77d3cb01434d +16a25d53ee2c9eccf46a415c7e4665018e04181c27915044045a77f77ec075bf 1afdd7d5ee7ee589699611ddb1b21f2a5e4cc8c75bf82a4bdd9c9359c52bbb95 +aa15522e19d3c34257d7de66906ddd2bfa38cff43b3039daae747c52812ee0fd +8b4f92382384d833c560b0934d031fd3a55d1cb867a6212c4b3d31586360b2a5 cccbcf8475cbcf548937788220ac9a26532c71a81a12ca6932a5595236cabef5 +7c27c9f3a5eb30dcb79327dcf49bda91201a45b74ebfa73fcc5ab67cdd3f9f55 +089f78aadbbce977ad1576afe5e45c190a7a221b32ff378514d812956094a7df e7599201cc39f4d5c1ada0875ebfce3d361dacf2b7de7b37bfe16f2bdacc58d0 08a76911a1e58d455aaaa0360b2b2cfee503d6d40ef17935d354ec4128a71417 +825476d83278902757eb85768c8506a49138e4de1173a74cbfe8dd73cf088dd6 6b4ea2a030ec6f58102f7b66c864d7ec83f6bae3ee00ab1fcc0f044031f796cc +a7eda58bb29622f4481ee8a50e1f689a66db433de71f1e1ed1bad717bd9caf93 +b9468bc407f8d6e48057ed9a13472d742798d84a28fcca57ade4a8b901320d78 +ece7b708c95114ace8d3788b7c2b1b750f1f252ccd842883faa83929b9c97b68 3aa0256dfa305f9d3c4d77f98ddebd4a37bbbbf229ef2b2e215128522296743d +2726b3b0f3bad42f2552a99e7bbf08d3d7dde44c820817790891c152146250aa +fad4ad7256902a9455965f61f597f7e012c7d4a1815b2e6d70fe8d515057e083 +f2de32e39ca853add28011ef802f336e546789ea8abb093c44d0b79e2783315a +6c128f945d163d1a9692af5c167cf0727aaafb4f32f3678cf28e11a04c3f27ad +99bf982da397947eb0999292e909c17c78d884e18d3e59ac03fd2aa7f0241c7e +4b6e5e84069dd775e081aabb27853557f8f78e0d03bb14cf5861c512eaaaf95a +86f320365c5a53d8fe31c74034b4e681bc65e10b688cc520c706d8bb71be2151 +e054c137725b7a5d163dade8f5cd68c0927a2e8b00d920927dab9a7ba934ce5f +c0ec8533ecf531361dfd09f0a42186f7137f1b07a1e6b2f0016cb1488db05b1e +bde1477a5d1757b7d832612525a616c8cdb86b636b120d0b976eab2d567b180b +171f91ffd65afbe6448a62d300cbce6cffd3d06f9e59174875c0dbf50a5e4b9c fbb7b594c89df8970f9c52689814adfaed19a6028f0220261e3e30be0fcabe10 +020c992ce13c318c9f50479de5c4bceaa9fe44d449ba71883297c75023e8b626 +a341a7841893faea4921f3da28b33a0ffa223f2c412ab84b68b4b83b33ce803c +9a462bf26c97567cc4107281fa73e11dc8d10e2262975f93f63cd351802d8080 +c10e33dc6c07dd326ef688a0fbcce48f0385cff936fd4e297418f05eb38d0a4e +4331fd5d59e127171c051e5be82b8c9f639ff0a7884a9a8ce64423868c4b003d +d516909bbd02391ba13dcf92b94dd3b447004573c80c62a633079130c401ed41 +81f863dcc4f241a9dcc855872a2201bf8968b4c9fdac5126cd1a16e3f308afd7 +c7164cdf350a0d01cc873d8a4b68cf05a4733a1a3db02e4dbea57cde43362b64 +185d457fac20b9d75447604233922171a541d01cc8516ac0bd21a8efb56aab87 4ab3cc4296fee78153d60d2884323a84260157db0b83a72309272f109ad9dd32 -b63963dcc7976de3ee8a2fa4e9fe2af0008d04cb76d6c56abe00e07b388e4e48 -59332166f9a97a45a4c02c8dd89d1ebc3e5b702e8cea783af9e7ebc367d4d0cc -beaf298ecea3a2e9faa9feb748f627cd46f97c574a345b737116c5d83da24049 -a0848915cb9eef4a07d82159e4ef0540634e60a2d1c2bd8483abe53a489d8869 -e01ae1fe04a583d8d32589980d1e40414a1c402faa905bc9b493749df4c07d1a -c42a6175ee0cf75e5a3d5e9c6d5a3570f184cd6e09b181460883da288d690a79 -3dc966154b3b6411dc0b4845a96c3deedd0527dc93da7261324930c37c28b8af -60c46701d761f1a609f9e675648a763040dd0b763bcba2519bdcf88875fc410d -39959f0279207ca7414d864aca5233d998d4ebc950f15a4556f4dfd3b1932b92 -9dbafcbfc78f1f71993186add1d5bceeacac926ce70a133f3c52607abcc3ee97 -16fd8522e6aa9171c97571b7f14cda309c75fc34293c2989da0634522d9dbc0e -58f4ab89c3f24bd539d3f3ba5931e0792f0316a0569c6e5bb7a4150b07aea87b -0205c30e63e36a248faba5bdbbdde7a4185cb2bd314ae62549578575abb6da72 -7e4a05a078f4d7afcd686d117e319f8f14d69be43a0609bb9a9cb36a75a88abb -c0d67d6cb71d5cd372060a6f508017d0e90167f111a5219a0008cfa5eb37b0fa -6e0ae197a30f26e0de708f95e52ebb957de42ace5c08ab62092454c58e066f51 -bd2e7dfc9c1a42accac2fd14f74bbfcf89a2d61352a077aef349ebcbc98c0be5 -cb2930faf9670b24e09be9a5a98e72d1b5cfd0dcecb1b1b5452eb85a1ce80ff4 -3f67e2aa009e5560a6c6b5341f3a5851cb448322758721e0922ea81a2b474776 -160654beecb414cb57df8fe5bcbc99bab9a8d0a63c9924de7e9d9864bd03d765 -c90f9ff9fb7a2b7e07b4813bb4b57a1b22fb757d2de3f2545f73a52eb8e40f25 -ca4254ca8f99029236bf3e4061f66944eb8449e25ebacd0df5b08441afca8629 -40042faf7f045b8a20165281feea6e116626cd9bf6150f8775b7c801050668e8 -c533328538493b161ab22b5b21608f2376b0904fcc661014f6789b565c80b17b -da9409a087ae100441a578b4354b74a8dc4be3acb8757534206ab8f0da8152c4 -fd04a9d1fe4b1df891c8f2c7a75b5758b8c5c946ba5034c00fefefb9d717d572 -85b45e9181bb5a72a66faf4a931e4bc27a89cceb99e892f1fd1c9ced8b776fde -3ca765427ef0eb921c41f114f66cbd853ec92b184494b044efcb60dfaffa41d9 -9d2a3d36db09be26110ba8085024cf6a801cd29c6766b965c4a338a52c33326f -50b07d5766b622b4f56e7b14c54ba7e3d005fb9b7f4b058d42acc472f3cdde99 -081a4a6f808e8a6e95493aef34d86d683dff6f48657993b2afd16c5821ce739f -7aed463e4dcf547d349da528b9811b5e28c94e6b250aee6add5d3005afbd09bf -441addfdb7ed114c033bef6c6560f13aabda1da4e2855727e0281f715936825f -9b94d7014d1ee3ceaa69c9b10d76212603318deca6ae13c499540c057aa33b56 -88b18a7cd273df6a7349fac20a5e96828dddd693c078b7641b838155ddfdf334 -88b77a44cbda3eab2f16e5e71712b6c95e90a22d39b305075d44186adb84ca6d -ece578abc2d8e38d8f892387e00d449d5849b5559d3c498d94448ec1d2d4087c -b90813408a5550d1d7efd0a7dbe2ccfeeedb655f4009ef60d80a5b203fc2d3f5 -fa35790c97843ff87c1f30df70ae076ab34f741d7586dfc24fbb39d4dc18c829 -4408e4d4f52837e9504056c8e33b7e921a10c072b520ff810fc938ad1201b652 -1c8aa90e20d6cedde86efa10e4a8bfb57a9f9e5b3e63fa7b0fade6c5cdb3def4 -e3e3efe45babf86d2a23dc93592c1e707963c604615c3eb5b5e9cb7b6f13cca9 -961ace1aeae3f11523890212486fe4e7b7e74bae2d0dbbae6e69d0d26f4824a3 -379c9c1070725589a0fa9626a59bfab6de21a50e600815be7d6af70edf059f3c -82bc13847269f69b43bf20f546160f90fa3002f55b62923f8e2c1366a231ac8f -ec6a92468759cecaa854e9b0155d4a94e52c897fe96607d592218664d1165a11 -5c5aac8345686bd466014ef256a503bc896f4186366fb000daea1f90a4143377 -4a930a5f30e9f9d2605df8e9bf446931a9f7535b97c6b5390e30d28c052b180f -0eee63cc7561e6909a0215fe338c2271ea5b09ec726abe605b2bf207266600fa -36fde4fcb94b05eae159c961c9ecaf027270d8e61ffd159e17ade9218d439420 -30296c8fd2fc9ef712dd572846767e4f8bd09788350ead55456e57db2fa22e45 -4edeafbc7d061d59182c213975a01ce763b62dfbffd8551bfa08cdc07573a68a -f2aa5cc77ac7e6e8f0d98e174a57c0ac7969523aaf7e9b2514acb3222f99a84c -4883c8f609bdb8a16016c6f75e0a79361ce414d46e1226c4a9383e2683f76eaa -7f633879eeec4f76bea7d75a6a233681400b8912690fcee8417c4de875930a4b -dd91ab9fbbbb83360962973c19e8bcf388790836d4a20e6e3c66724e0e917628 -04384282bf87cceb386f12474b379b33212afa40cbf202e760440dac6d652dd3 -67b9f087ebe0d5a3ea85f514628d56d55ae5cb0cb8c05c65cc2318d47b00444d -ed51a553f501e5aa5a8bc4610b0630cebcf3f57fd6986db450732e201a7109e4 -e6d009e7aeb59b85ef01b64b71f6d34972e2918f487b87356952bbba365e8515 -a12f2e5815c857df1132c96dd161f49364b47d42f9731554010aec6f7296a885 -01fd47418c1684eacb42fca0b7f2a805663b393e09158391c6d2ef3a2790c148 -08210703c63db5dd078eef536a83a6b4e68fb8640000244f88a882c8c8455a38 -45fe820df4234cbc619ebe4a3c59cf5486fd908d23c0b2190deeaca51a3e592b -6b4c3f34600bfc6109540d73963b8d7b26f9f22b03521a2326e59e2f10e60a70 -f4e445d5489a045450ba8ce0026399bc305a141e67586f5be70aaed16440c0c8 -f45fee4be7211dbabaed325167e6ae7eca8c7dcacc8cc9dd331fe15aa9ddb363 -adf8e94fab086bf306caf63c8d6fc157b8b418aed4e982d66196bd4547b6e54f -49f954f67e8c465f64b09b250da311e73620bc4ec38a97099f1c526bd65a9362 -ac8d9e90423c04d5e0f8a181b2d4ede788b86d236d2f8875d002c00ed667b1f9 -77f3eaaafe0e39820d9a9f3e35060a4812b18da65332df255a090cb4c80ed140 -732c0d3d30aadd3d73e7ec56023cafe20d98dc46aa6beded8cef1a1d5a5c12fc -ca4668b68ed24e8e2aedb5347ab42e8b522ea7dd40b520a7d0d76b9ab025044b -1d5415a646692c3b55fd9ddcf858dd0802349ceb1d00908c3617bb8bdc0e857d -5518611b2b9cf3985941d8d9a077967282b719331947da7099f2eb2d43d5892e -91dcfb839003e14412e5aa90a8f5220b66678b1e0fd8f2ff7656f1f2e025ae5d -72ff75266a6eae6461130f0487b8bfe2dcf471dee61cc6bc1d4c60ce9759587a -d55f5fe8070f399887c98bc27f29827bba4ec26f158ea704e555eaf50e0137e5 -efc2568c6026f0d1e843e812035551eff424ac7c419dd26a2f9d5c8d7abb5a0a -2323324418795c574fc3273d22164decbce0d92a67859e4d33df2e5b6f7f4239 -827222dfb15cd981db3a21b420f704883b44ff9bf471b67780507500b9bb0472 -c0d350d50c6462c343b32f6e768a19a3a94aa9c5a42b3d2c12cc15d42e0bb800 -7e988284817f893a3a2f9c51a7da982b2f29d7494121f5d83a0008671c865929 -6a2b09e2a9a9265f13ddf3d9e9fb25ad0f9e34ff788443213a8eac5a293b974e -a57adc7478e44365ac3d9c9d4241c77d55678c5fb579a1cce4e202e44a588113 -05e0a6b5831d424b4a5a15d4327a4d58912592c6bc276850f40b3f8dbe9dc11b -9344199726f0eb987bef254f511032b98a917b2a7a938bc12a10d48a73504bbc -6effa7057a3dba4e4f155d077b2b7814839df7768609a009c0f1a94c7ba4edf7 -cef5b6662ed578e7ea673c6f340218ec48495e62063832e9c07f9d1f87ab7f8c -11dab833a0ef6148102c47175aabcd7f9cf9e2753bd3e6e3edca4aeb489278c2 -388b8101ab65e449d2260f10b3131d94c1dcc4740f0776f7bf6e0eda775b46c5 -f32ff8cd620719cbb69c3b03254aed834368b7a5f69cb4b7d3f0332f21e29ea6 -e889b04c26ced952e274295c361b8ac091675a74d1676a5476b6b59f3bb863f8 -061b62a9ef7e4c42385f0de28dd4a3eb00be4754db440af47491396e1e551285 -a74026e81488bc8ed65781b5904edb3fd401d40e8892fa7c6d91a1cc66f02170 -4e4bd49a3e505a86c07a46338a054c9a2b155c7680fd544628c793731a11bd99 -322462b55df6498b891b3bea0ef7d7e284f66830b4a151f1f9c22b4b9e0214db -097df028f48a7b2f897296385a4c4c84c81c3a33903d4b65058ddf777af805fb -ed8c4e7cae43bfce7c0fb1b5651c34110a08d7ea51a96d5cdd8a21d6dd9478fe -d1ff1fc52440a62586e14e94a6d02591e83ce92d39e142c72faa7385ee67c9de -6924ec2db97b47b9e82aac059c5941180d64800ebab62bed1d7852b80c102d35 -8ee39da18e0d1b41f81e28f3a66ba3f4581fbd2add9c0fb81caef44a4c51da7f -7871fbacb811b77520185d6e566d591a81f90d0732daa21d49a006fb40c3c15e -54ad84f9eafea39b70af34512d1efbc4cc44121a66ea2f916912ae226006c0b9 -ff0539ac4defb4eb74e8da337dad1d7162668b08b01862e64d16ba6b79e4142b -00d6eda8dab9a1fabc00a0704057f0a9b152c4c5b8183bd019f4888410633d6a -ae1a8abe5890fc0080bd4d3f53cc329bb58b73ee896ec5d2719f237cbec366dd -194b92359e043e1f9295924539dfcc73208117ee0f4863fe52346eba49ae4274 -f96c824868d59d38926f486bc58ea697f57e73a694294e304397000bca02e08e -7d11ba00dd419b6c810613c35150aff7c8842023f76f5aea496ee897b24df273 -54a84fc41e6e200984cb6619039afdf16ad80447521e9314ef363c1a8df09193 -7cdf92543f32609c353e765b012db568d05c31144d6c4964b4a713ad7bd0dcd8 -32ea519c8a31c99b41507e8830a1007b477fb277aeac7c0e6414d4446d550bc0 -36373533c2dcbd7da81ee367c1ca6cc9d20530c5153c3b870ea543156bef8e8a -517d387a13cf0ac6e6f67580c63abdeaf3d2b1aab71606251369a4c62a682504 -168c200d11549d5dc869e4d6ae1776df9b0c826d7a8c91fa398a46c5c4751230 -297e076cd2263379b16a46e289afc44267427178ea501fa6d89c2543400016b1 -b5d3c7844be6ba6e3743404617074e8f36022d1cad3984a19f3f86bfa5f5873b -e4db2d84306a2ca488ebe1d8099bc0f5d355571e0643c02eb7030b4afa2aa971 -1dd32d989bd71c1bbab157ebc062696cec35fb719d91e82c8754a91e92f57194 -5d203e1faa69479af10ad34a9aacba6d9ced6b03f3a9d934ce30554c335f60a6 -f32b5e08ed44312dd4dc87eebc7b57f1fd43cd74aeddee5424fda8caa4a1b072 -d28dc66b4e32439458fc7fc0ce9afd3f189cbe4bff296bed6cc6febe1df208fd -00eb746ab26a55ba6c53d8b3260f4d3cb48919e629ab9f1a8071158d11ab097f -17ffeeedc4e155c244058704e19c8cb44e23a60c464404612ab8a8347bf79ccc -5bfddc04dd473fa5f66d64953db2ec54345bb9243eade72e08185fd90ce4a39e -5f05c6923adcb16580e2f83701c2672609edacde17c713cac8d0139e731b368d -4c58617ea1249b1c7f7d312d1635134381e78ea58bbe60363f260f71ea00d868 -97e01fbad0e04bf7f855562ed81464646ca5a6b29d4d058dbd165be5f785c155 -03cfdbef79e859473cc833123a843b8afaaacc0411abdd0ebae6a2e4d073a833 -e9d134237b7315d4ecc6431e1964b5e1f46403139ee4f4a986ad6c44ec794016 -7eb403d3e797b816fe7c0d1f79f1c0d20281720c5333ef58547a3cea1dbe8559 -01f3cecada7ed1deedf23eebc6a9f95668b08a45e2d34e033e96a3d40a06025f -cdd5369767b8e3b2db8f59fdc468fbe5cfb38ac61be7163736b14d861a724235 -0a331187bb44a28b342bd2fdfd2ff58147f0e4e43444b5efd89c71f3176caea6 -1332bb42b6e501b42f00d07316d40c2591ad9f4125b91b43dd4e1023998349af -7a6b8aee6743bd7f69522cd74c187ddf104936d7b6ccb23259a8f1800661217c -f583068e73ad075a95a67209a974603d61a347ee1081f455816df99e4876a5f8 -8aabe62b04d72c6d151d3f9618cad28f28679d122994f772667fa1ee0bcc880a -dff75bcf43b8b0962e1e21838cc6e2d00a6ef02d95a9c6ea785c37a40bd56413 -c6ec0ef150433414fe0aa25d4f9eeaa63a926b13de41e7c0689f737409100af1 -8704408e78c3bf2ccb4ab46d2f2c0dcaa9e6d64a159293fda0b9f3591690f6f5 -bfa0ca24afb007e9a169c627c8c15aaf28379c091bae5a5adae7504d7d405cfa -a8a9d7b70d6bf9b318b46679fcda36fac76c00b82d4e44b7deaf43803c24588b -c9a8d134418a07fa92a86bde0bf248fbbb6b0295d0913d0286c831c4a96825f2 -b53121907425ef5ba688a54f1cf2a36598bd070fdada6d9e96afbfc417f896af -df0a177d041d1b7da1d8a8f58a583523a7616388e5e250b87d3f6721bdec4703 -23fab74d3f31d8dc74ae91a9bec15339022604ef4afc3f2828e2f49d9263d1dd -79c5a8ebae612f0348b78395aab01a27087e4b5892c6f93f20b14efb0ded051e -7c158d2bebf349aa20cb3adcca77bb3929decb7e6ee0f81429f2835a29ccff98 -44ae0df08b631c511224cbcce9a8e939aa9ee0df7082e722363fea7927bfaec9 -d6b2a44ffab6e73eb23a1b5af65852a0d71e0ae90eb08246cb0be5e5e504a75a -a0f788702b89b1d271a1abe2bfc1942dec066072d2d3f730c01a839d000b9929 -4eda2b12862c3aff56323d76a33f0739c655249305ad68a49d73afd8b4ee6a89 -fddb94f850d234d4870150812d16bfc2ae715ff67498c1b33acaa894b6e5a924 -dd1c2b0a7f3da10495990563d4aa0291f7a9678bb34b5c2c248ce03cb9e6b40a -83ed96125a09c6a44132a796bde8b7cfd1b7a2570115afba3b8ee9bb1b5311c7 -b8ad0ab6e67b2bc498007a7983282ebd1cb737c29939a9add22133a033d8e74a -bce2ff8528e17fadadf3d347949fd531672126d57ffb27c1ca869f503c9b2135 -11b201edb1b9a91e017f290b00beb852774b912f9bc8b4a7381ca9ec54ef2b01 -b873532f52ea129490053013bffad218ff8a57070f5c806c1a5daaea017370f7 -d23c777d0f6b79ea799659345844b116cb06f43b5d8b88af330a10cccb374417 -5d557a9146084fb040a3ba3821252516b177bc58cc92ac80e7453e2e48305d34 -270d3702033f5f4175d70ba59c7a048819e2a301b2c462bc376dfb095ce0de0a -2834f7559dab12bc93227ed3c027b3386186b310a77d8f24098a272dd5c874e3 -eeaf5c3424b727d3847fbb4556bd96b7f985d57b6626c066d8af1c07308eb694 -30f084abfa05053fa8669ebd1b88a75db76576408a8ec055416a481b92e5920e -9b7694276ae3f1f73274cb5b3aa730cacf4ca3f050402ba49f35b34ff8726557 -f6688172613d08ffc52e324f13d1609fc2e28f9ccf3b3a427b740e4ca9163d2d -f7db71aea6516a2c2eca3fcc20a0bfddeec3659ac0696e61beb72b5df7635e87 -a2288459fb85ba2b6c78eafb25d788b1bcf5f0602efdbb61190ddcd5b59aa603 -8bccaefc07ad1a757fea5ef60b27c2c6cb1967dc6bf5e525b4072629b3774fba -cd2a8466cb8279dad96eae14ef42b075ea97d520df7b0afecffe0bb7f1728417 -7f9bc724ff18d6838b0b1a9edf2f3c389039813dba2ea749970889a4777130b4 -f2acf0f4fa4c8b6c22b94033a45f3ce8160ec9aa1eaecfd86cf9a414525659ba -dbb9134b15077990e3b4fcee8555428bfc2f078883e6ddb501efcca6a7af9dfe -c0e00e27175e649b149980011aa8baad5691a9afacf951996968df7a3dd3d0f7 -9a7b093350784a4a58953425e10092430ad91382a560aed051d7cd9521daeaf9 -104536329a17c0fc991d49ca92f70a3a783594759e644fc53d68b3e963439ddf -d6f6f3c416af59cfb6fc6f3bc789cde377667984e0605264f92df509fa2bc575 -3d5f5e0de34b1b00fbfaea133550865c6ca36d9c8f87a31829994e09ce78b237 -8f40974a37ce9865fb4560d2be69716014c511403b8d6c16096f5982200d80bc -a4001d94a9233f037712b7f35de31b84134acf74f411059e9188bc8f2cf3b768 -3b9681e3c166773d2af66da2e0ad4ae3b583b7d1c796f3b8fc1f33f5b13b43cb -15f212bc09cf72c5b3c8e882230e9ab9e139045f0a4c828ac97d669c7dae7940 -6f366de696e5e005b051af2478e2fd2b69a5c628b1cb284bbb7f0b3f09fc5764 -01321499b5bac27b175405193197f9c463182e8084176704dff84680390242d3 -e76fc7b7910c28fd8d9e354d8fe60fef8008e34ec617c2ca0ebd58b6c844ab3d -d773020f9d2824a4cce3b50d8de0699498d9363f9d60297d0ea4cd7567e1ad9a -20c2c39b963dec9798cb967a4f1f299b8e432f8efcec017d65d53659e7adcd7f -bf895a54b0c2c31d18435ae46b70ee47f1ecd6e2f51f3ee59cd6eef092495488 -c0834ac98980e228860ef954e563f21b749a407594c4c165e27fd2264e6dc8be -704d2fa42e01e568826c73dcd922f0ea3e3f5c26fd2e406bdb84b5ef23bcc8dc -fe426a357dbc11cdc8268c08a2bb66ec1ad3e100b32ef81220cafe955662d56e -9cce800c65bf76f69e573e3c88d7cd99c0ff058b3d6e15f220ec784e8c0bdfdb -53af8b0766e295e36c2a825107fae5e9afebc612c129d6c9b9f49f31088d3f18 -830b8ea98a57dbeab4366df7ed2a5ba68d0f475564874434647777ef4b521092 -298594c4def5a7a4c66864b1ca399b4a8f9789775e2cd933974799da178e1cda -4295326514606b504fa78a0ea8c057c24c714ea57525e87a121d54b49ecc6d26 -7039f15f6a34f84a97d74fbccf7df103aa4e5df20919c5cbd9239eaa20e7a30c -0b623297d1c7ebdc96c79b35f04d1a4e32fc62177650678056e77377477b946d -fe0b4888fc607c0bd706d7955de35c0eb30e0a99c67963b02cc1f2b2c9900d7b -26bbbd1dd14d3191912520bb951c8dbc9c50f22805f3c048c846e1ed999d7dc1 -8062f212610d05566cf8d41f560655ee4bdf39a204e19e978834de3830593f54 -70bae10ed4dc6bb9d92a72fd075214d6766eb750fc87d327031390818d489084 -21037e9441bf31c392f86376a6a80d4ad2e005c3b0c0f8d8ceade7f619179d9f -135d993977a161f8a5b694000ed257e48ecdc1ee11bfee7d2f521f4a88227415 -2bfa9fac19d0840ea40d716f1189e0ed3f025f3a234d857bb7e1f47bed99016a -47034fafc46dd2de661bc712d78026d362e05deb800fac4b8c4770fa5c45d349 -a8b277ce1965ab563f7d330f59ab57351d10c192b2393cae30e435a4f9ff067b -93cf1f595ac8d95cbb7924e7999268e25fde9125e6e3b2cb547c9b74b121bceb -6c4c29a4d9b71a3d86b93a449d92ae04f37cc4f68edefe704e5c99742439df8f -326d0359570720abcbfbd94c8b2420484b6422f597a4100bf247fdbadf6679ef -4ff31616cea77b08aafe30723b2c26a998287c132ae2ab6e385051642891e375 -3ede11a5006c288d12b5b65bbd33d398a764491b4400c8fc3fec83e974c0875e -651d3d15cd67c720584b591285ee8c59090a0ebd63ecddb25df96deb56c4beb8 -41671c742a150a339237ee364a18347cc82273d67013b82648ff7c0c029ada9f -827d08ebda90e1c613b0ecd9e75fa046792cc459695852bb0c28b8771455f6ae -9b470b7033ec2ef0e9d4d264c5be22c205d0a528d75a6c03ff2af481e0b33107 -f968896da3071ad93ce32c5604037321f20d329ed8ee7460e8bc1eb57699cc11 -039dc7156f8d2210a3136e670638ee236f560a84e2ec239db3c6728d5be10ba3 -a78893790d028f88634b1ada5beccd99c48cf02174ba417baa29361f74fb4be4 -c2d781875f992eac370ce0faa9e606d8d0a53930f3d30e5ebc6edda406597d4e -6aa4281efb3ce06a9a3a508178d936d58dd1153b96d4a3b1167a866149090cd6 -78916d8645652a97356502ebbec2c258ec461ce55eec41c78a9eb7a7da43db72 -82f7ec6dfbf9bb507d69da194bc0f1c77cfff635f3fc96cd9be3f155907459a7 -16eff1df7b6dbbf538c53d2862c848da9693fe29166753ea1f32d25544b6d86b -d29d21fae667e384ea891c751b42487777c44df2c8f1eba14f5b2704db92c06b -7849853cd88485833cb6c66a85a549fe315b5029a624c5b3f9408e73783403d3 -97a23b7e4ea9c25b1e0474830c3dd25e138dd5bc21cae8b6248195dd33791c73 -11276d9cff6e97e4dc70ed5e45f8361ebb240d5f208a8aad9d807da3094a0d65 -046ac6bd6752e9d3496289d761a49b2a4787a33e253401172ff36392d42db73b -da34d3d8cc0268ab89016204d52f4d556510de4f136f27e67b01cd9f782adb47 -3ce2cd3a62b9e4a55ba93f1ae35c8a1719fee86167e555bbcdb61846801cf5a6 -1e93897df26f965d16de3666a7e5cea7c5d6a826e4a4465bec67c934ef0df98c -34c7ccfa4e8e20644563b2651eccb64d7bc31d3e8a681bda769e7c17b9bdc881 -bc8abf0c2ad8027211595630f6e65eeea97145ebae192fdd5a47c9d5693cc7c0 -c655919f90fdff70682d735adeb0acf3b801ee718206606647e92f0d9e5bef23 -e1c6c8650c2e262f08e1f37f1bcb80f9bb1ccd466274360559c345288cb602d5 -ae53564d2030434647f404379c2a8a37b4726618a76994f779ed7eac5983dc27 -94cd49c87637f19d7222a856f1eee2d30825079582ece28d52ab06814516abd4 -6557fc38109fa831ac80bec5b951ca7a13db709979884be923c6e88df20f4cba -e51d71d2873dabf714e6d8d86b13b57ec7fb9bcd52b2ecb586b0732b6f51127b -392334c51eb432b855b42312f22809650738d052817c386b2d977c3dff73349c -7fa7ebfbfe8d79a68ff506c27ded2f25d329e1edc76b2cf6cab5ae8b23a8fb56 -f72b95f11adfa86e0cc159070e4fc63f847fef043ff79930f3fec71e7d24070b -ff02f7cf451deda817d588a6a427ee12742c9579fb79c2ae523fde28ae12d7c8 -127ae7c479881992556b4db7dcd780b9a8ddf9e66ad6ba036d0fccc90f92ddfc -0d15be900e19b304b3a036428ef9abc5e5ca72666d08f6f67d3b38b41118b695 -801b1656646d2e028fb9fdb67245580b775efe29900c622c1f36d1907ffa43da -6f7d353fb1c3af2694b54e268e9207ea59d1b699f56fc38fb0b4f410c1b6f36b -dab2352f68395c0974aa2470beca4a662b3b1081285133ce6904f398d6fb1ae8 -4d3af0600554a229bd5e12822640d2a266ec6e73148289d671c5550c04f1c56e -2658579ef19fc30c16a573883ac4b0d97b943fe7f4c8d3437fb94c4aeff6240f -7ea1a6e6cccac54feee876402cf4f61793b4e7c50ecd337b1adbdf64c7efa3e4 -bbd9d5a3ee2647de8844f8f8845f827d3efb86ec8acd2b8bec7a90fcc04c9eb8 -70367ddcf0dc8453cdf3e94ee436a6bcbb85460d1281ecc1da3e41276c139082 -b205142a83648a3b042b1ede7da30ba12746a23b11e8d075349b17d6bbcb867d -2d655ed33b7c702bf578a1c9062fac0b947aaca69b96d79106bce6a3682013f2 -909884b7d0b8e514ba9f1bc9925cbc0b4f817d5c5570fed07cbe3409bc8fe82c -c7330d6960eef7a6154fbc458c10e54cb90cb4913e28e131040fce2af2750825 -1364ed183589730bcf71f8e18dad4fc801f5551801412f996f8d65b1df649812 -87b605a0130a50d51332c5a74b6277ee3e8c85828498fef4ba3337cc83690d5f -803d47a23ac469748775fba1d493af0e609a10756a015214acd2051d2b695e5b -bf12d1867d278b420660fdeec8fe5a611848e761735faccfb98a49f8a5ec1902 -fc8237f6d970b1366af7a0ebcccf86613a142bf91f3b81e7d3308f1b9535b6da -c1ccb2e841f110ec639fd46cf287648e11ee0da44de72b3e2cebfb2f67e705f7 -529d9478511a587d81cde63933552f702074187e39223a35966d72e4dcf3b3b7 -7736f8e70461c14f7c8889de01455aa40845e2985764053bc005dd3186f513f6 -2b7222221ef1f49b38f0b7d5ce04a312dd4c56492ef4ca45fdaa57f419a4f2d4 -c3ba72f8970862c9f4d77ec212060879bf3283ae6c25b4199165b774f04e5c72 -fbcca1ef33984eaad190fb0f481ac0f8c9d2f0baf7718794ef596f74abef2837 -c9245a992a5dbb470c0df0a2aecb46e0aaf90c80ce3aa0b67f615985ce0d704e -b37e8adf0d7aa788f1125b271d9a724b89cd7ebf3bcae9bbedc4fabd3c629124 -bfa1f00d6374a9a688389d728be384f88fe82961e08507561b8def91f61b2a22 -fff5fcaf7a52047be6ee64077b44aaec937275306033b09ebe03a8a6e85817bf -d602b052b18af6e2d715d5ab39fbba754a02fa138f7059139caea465ab37fbad -d7cf2ae00ef1c3423b79f417706f6478e1cdca38724e853bc57a63a266ebdc61 -467eec59564505b2358733cd0d9a91af71f55270c5d7828c3b12e50442c2c16f -148d7c0ae548a910ab82eacc32043d423cfc4e63fed29f613fb3a76001b83a45 -d384e942183a61829d0c99d84c87475eefcdf6277b72989655007493e4bf021c -9d43a58596639ed577a208d86eb3ff599972c0db25bd8f37701a5fba55105100 -897967a478729fd11f19fe5d8301dfb66eb32bb8687c13afd7c13a78f23a5531 -2c6c58338eddec9db1d914e214446ea718002e30bb5e7334c444b970277ad264 -0c5715e239bb9ef41bc258ab3069d22e331ab3e6211eaba4a3c97334c1bc4ec7 -e8a88097a902212e22fe263e797ccdf899247600dfa1cf69ace87ca22bd494dc -1f908190610cf904552c33c5e4c384cb5adf9994e240973824c7316fd1b12528 -905c1f304ace286b3eba316810cd3e54ed43aca9162d8ab1749f15fd6305edcc -2fda462c1b05dba19cf2ba5e9a19a93ec4de0bf42389bf5831694bbe35a9f27f -a8847d71684cc3fb83c7e7c69cfde982501fd135282cea18392f9db01a2d0799 -7833892b4befdaa9dc27ebae9a6febdc4cc377830a2c764e85dd59babbd0e1c0 -39fb5473e9dd678b14535aae8bfe73858d8d3deae4a85f90409fd01e63184e09 -a02920445705cbc5bf6c6aebc4eebb029cee19b84a0443d3fd3bc34d3da35340 -2d8392894196e39908eca31f2948247aea2441db010d4933a80a9b232a7b115a -3e2165c8477f786601591cdb1c222505ebf3c1438e6090888c170607129ef816 -480689a2cc9c577fc8c23fec07445d68df3e82b5d41ae0e2445270a232114d5a -0841e13a1385b570bb3fb787fd613e623ac32bc3b8c8c6d77b95c6bce57913ef -defebe31c101d1c8eb962e65df85403f9dcf4c3390a8111b02700ad542ec8048 -f7a6a7d4f3cca0b9a28de0745d567c0f76a0d197e6e0e9cf038f88d894dbc42e -d766a88a811e504f11a240466641b16f79e22913e36c693b45551203303b8689 -8ffa91f2fe706360ef61524a7070376f76336ecedd9cdda18757db84fd09c3cd -22f1bcb84b2607883f23508a4b014ffe61aba9b5b44396899840207047c630b0 -f6184c9f5a5c919956ac39d4ad05118dd219446b056dd0dcae51730bbaacff4e -03aed9b68c1b79deb9672fe6682e6ce3e12041cdf480235dc923c6fcf86fe03a -fffe2b35f54fc10993124ebf3e88349f4f2489c43f2c80557ce3ba79fb198e3f -1788919841d4d2629ef8eeac78fa5bb50cd9c6d57c8359d9ff8388882ed4c473 -ae9a68a974a753b61a6811a8912289417ff0e2e420776645325a464a5ea03c8d -a88c30bbd1c1a17a8fd2004b7ae52508a3546c1c9ae85a94031a5b992ad7ecf4 -861429d2121729bca3b7fc35df621f1a95d612abb575bbbbf57f29c661d8ec0f -55cd37e46ccc0186c2ed4992a19f88882e136afb8f2df63a3b488218ad946aa3 -894952825d6bd511d460ec118f1c8f4436e69d3a89c5128a4f64cc42d6f07683 -7c8f8f7ed6412eb69e0b039b7ac4c965c222ba763889fcc969eadc73b09dad26 -826028c8ceb00cc8a72262b28ab4697c9ed5100076cc27dc76381c8491c78c10 -2e5dd132f996c9eeca24d4663f937e5e5935b896b1bb696930977cb0ed722e84 -a3be5b6c843f8c9f87e38b02f182017072b3df459a1a7e3f227fbcdeb1373d1b -c11f3d41b70ffa221bf10ca22d21d8877339d470e2ccd785de62d4eb06829993 -e8330020ab969cc3b8e1aa1b4e5ab8d21aee185ff21cc30e2aba586fca93f7e0 -623d128c689a3fb4ad54a8354feed630c7c053eb76a11a5a0280d7d9e65d9c4d -54cd546bda2927cd8af5d9ff7d649ab35e8a5d92f5c3a8708ec336532899ef4d -666c16c0eff69e3afa7e467da80ac401f0167655991c87a4f2ea6cd243fab893 -a6a0d82d9cb5d8e8954090692cdaf9a225bf3000155fcf645c94af63a5969cf1 -5ae5be014ba43d0054e9e5a8028cef55ef765733fc42c58d91985c4a1a95c980 -d774e878ef009be9b0e4b5f48602559fddea82ad860643969158582a9c418185 -3871aaf82871b34d5b3f1f5c9e56d170e152483014f6702a231a70204c5c1ca5 -b5c00d9c573736609f09ff5ad1b68ccdb90f53eae4a43e26f003cceebba47b3b -9bcfbc5196c5a252b6d87d75ba3c6d13cf509dba984ab34b262a7b40cf24cad9 -65e2138c619783e9887eb8693da7c354792785fa7cb7f80a30c7a427eb01ab2e -a254fa3cf6f2a002fcd7c8d7b7d42b073aceca69e969a5b0467d4d294d8c6ab5 -f23d4a1e8a337443d921b51c34c9de6fe12c20c7b064f3ac11cbef74e9534d73 -1b6dd3b5c41b2d5d99fdb2d0fbf7dcb9f29142f37f79399f585935da05c5de55 -bb05c3ca0e6fdbb691c143e9fab0677f96dd1cd549d3d756384bf6cd9de141f9 -3fc44136360bcab2bd95a1dd6a55316184f16f57e0fc24d970969720a9be6d10 -382be757fa40774ff39680eedb1b520833bfbcc779896eae4e2e5bf892451e03 -09c12608e99cb664901294cd6653928418e8c33d334fdcf83eaf5e829d8217d8 -e2cd5463424e7c2ffd6cec1c81621d20bfe1b7741ff1548574ac299b2e65eba1 -173a85542a577f34d1731310d94a58e0ecbb7538c84ba021c18aa780d651c7f0 -c08573554a6e1a3a7c8c41a8a3f5f90a99fc2061af8d515048562a8dc0409c13 -5e8299e043d2565c857e542190b1192c9abd7e9f1d734ab1a09017d9b1188233 -2fd9d204f7986715a302c2735679684960263f8f7b8e805f768acc37d98f347f -a301e110c14e1f6a4e721f9b65259b429230fdfd24218f447107d0a26980af6c -dba7615c48105027257f243d3dbacae3ab54c904207f9a7eee7b479d64fa5dc1 -f78c827099a5ebc612c5961ea844a23193229463ee792212a836585e28872856 -12a32fbb6f1d8785290fca81c9479b351fa8df646dfa4072fc91e5cec339de14 -a22cc7f6ae35ae45c24c495aa46ef64d0c2b66a914ce7c21de38569266f3c7e9 -f4886352cc49a8aadaa77022f051c560a0fc461cedf3a429e4fae07346fbf746 -4e4b14e0d955bfa053ce4a7c3245ab1253406b480f70247d7a5ba92636d13926 -f1371a335f69042ed9a07edbae3f7a9ab4acdb9714dfe5a36510b75e7b14606d -81d3d2ceb730d93f2117e2f6f5a80f16dbd18e753acf200a9b90d782901c00d4 -645def9858a5f318b1a0c6b2dfe362e03ead69aec62d92dec7c4f64a1e0bdf58 -ba0777fd2d720c9dfd4da24b7eb3f2c658c5f872263d8c52584d6d1d3634ef5e -e2dbcac985d31594ffa1193638e6fa07c948ba8199158b9bcdc4ea2a39dadc50 -80806828c4f751441dcb7e7092b5f234a3850da315414b4401b7e6cd9f491c13 -09d215a9feba586688a6ca4fca243ac637f5aadda42d2b22c0baf9f970392a21 -92d15c970cf7adc0cdf4fb1df38307c93f979bc85ac655d7b07fb874779559f2 -495dbc4d8fe0dc22d8e811d041117b8ca2797f8f11c2c198ad11b54f42bcdc2c -8c547dc77dd09374fb80915b4ec11dca61f8f8bc4d3d3bf799054ef4b43001ae -d35da651b66d557e1fc4540329d2ee2ae5c929202cfc4aecb81087e81f074b7e -03efa7f2b0902c6c1d23d0cbdf945b71975feda3d65dc0cb0698e6b7e552acf1 -fb428bd36aae243e7eb0275147a9078b52086f291428d9f0dac84169b594cb4f -be2e14b467e81486b779052804e7b3b4c33b0ed722ffe2a9e54c2deacf094ad5 -6f4da6f46fe3eacd86f19b981cdab577dc969cc9cd695c3cb9be7539d7604133 -e570266250469b4c65143673200bc33fb3a2b6421987a580f064ca8dc51c5d5d -ee1bf839d511d2b0de3b07a837d1175316a7f94ef0528d3f8dc94cca211620db -b26339a9da63a9132a94b39a087061a5754698f5cbc4ee9857383c8ef07c79d4 -d83885af7a465c6337e5e0ee014b2225ada2d47be3b4297b574000d94a551c13 -c58bff0930fc3afd25967b428d7d2882af9bb221ef6426fb02067482d6844474 -f25f01f2117268e17ae1d9adf475424c872c49d09723aea986bf5709960cfc94 -41ae8d981e75a54402220564a078d5ffcae1a74650b0a98667e073a3610927b4 -67f75a12b2c2b1cb3f667d22f93253005f739b82e08508c4b7d9f25ea4eeea8b -cf45fc7796b8fd2f7b6d1121dadd3450aae32c479ed8bf97168187e293882dd0 -5273f51ca9d8193d91172ab050fb1f21cefc2691d35973cc04231456e1ddd418 -a3d9038cfed203ab76d50dd9201380652b09fcccdd728b97dad2c0c5370fcbcb -21fee463413e7849794335ea218f3af5a346b602f2c4d9bf49f10d3e48c90b68 -9abeb654c726772badfe64b39e41d407eebd337e44b90bbabc51857279ecaed3 -e676273e11d0e82fcb4eec39a01622a331a6f3a47a56dd088b85afdee0984e97 -87899fc5a9cf3c7b43c23509f6aeae12fa32cb76cebe9e33d39505cd8608db26 -065084868741e8366b6b414409895e0f7748cbfa5300133e03ddc3886772f422 -0ad04c1cbefa43938b56ee53e4a9b0c55f96613988042927c5216c490a2e6dc0 -e2d2747d50ed4b62d0af82cf15790af2bf6dfa7a3e576c0eebe561fb00f516bc -5010439ee8c70c4e550d85bd48ce52349210d56bc89e89eaa9188f0428d23cb5 -0d88bc1dc58b8f738b666001e3c90b0fbab69e5f9041be4d802964f9f96659fe -8ce9a8b63e5b39b9210755dbdef464483d8446a0f5ac00282e1e3b8a8678e7e8 -3af0cc815d6a69806927762b3d2126b87e498673074f11d4b0d2a30d6a97ee96 -8664c750ee7d618f862ed441ab6bb3df65fb98f855a4ddb9bb95e1a0dba626b2 -198fe38e4de28af59069a6d6df1543487694e5c7075c7bcab9534394e6d44160 -844e1ddbbde58cddd1f0f0cfb828941401a48627e38e80c1e08fdaba1da0217a -04f58bc425d53137b9ebe81015772fa158a7a78f7f250e04cc98c67275f7084d -749066255f2d3a2f1409f764c7c8220c96cacd114b3a693c3b14a6a2b15e0385 -aa5a705c3925310445303cbaaf57ad76ef3937cd871bf6e350603c4676f8fce6 -e2d646315b23795671ba4d8fe5e11ba2d87403907390adcd73a5a95992fc36ef -e4a1b1f85ba8d3bdb77397e30055fc02f18a4affa2f8baeb7c377ccc0cc2d244 -cc29e0e2c3f34ba58c036c63b774fafefea9368d0fd83e050187484d8ceda8ef -7ec2c819b82041ecee3ec8d1202e252febbca1906c8e56a90b5bc8168cd28f4f -adb3c9b1012894a6a151ad176302f0849be638c32360389ada62e324ff18797c -b9f57457c5a962ca8f67122cebe1cbbf5cee79cc7edd3794182473a1d66429cc -b4fd7cb58329bf5a95fec2b7a9cc81f909b644b02102e5f69ee94bb1c4721e77 -3e69b5bde7413bccdfebf6f0062d25d1dae155121945b172324ad520ac0018f6 -7cb537397a8f371c82b503a459cb2efd310d62f1a36d3578e840e0bb59790db8 -49c5c6a823d0ebbed69782c18ddc2fd18fb06b428682223f2de490ce9b37c1ba -f00a189a58037af7e6ce33a409698a586e901f2e2fa03d53f02d20d4a52bca89 -aeaa1c3944e465fbc1ee7018797af9fdf568f2a16446d8b9fb6cd6dab0510f1e -512a462521cf2221911e06dd58fe975ff1511460cf4d14d441e9a40b4cc203fe -cdadd96afe76973232d3d4b35015cdf8f30d77a41b6a561ff5478c2e1e0e1e6b -ef184829c8cb5c7cf358c6bb2ebacf26cc6904fc9d6c4678340a42e081609323 -ccab03e82d83c9e45c5ce89f38fe4f7ea9c284b251add639d66b14e7a195d756 -0adb5b155f7420324d89de01c624f2e2d77fa826fb6ead3c3ab105f37c57759c -aed30a8588274d76c852465e2aa7442c53c2ecedaefab465d48b2f87db05073b -c814d1cf0615d25bd85c23f5c24a1b7d7a9b8ac0acd97cc0bc8327284849c889 -de86c733a263624132acc1d49d8401418dde8131340f7c705fc372e4b104432c -71546fd13ff601b02410bb2f3992319cab75c810270f222131ffa3fc12cd2774 -903ad787eb000ebda9b7cf38c3895051e48f4ef2994dbb653ba6b5d33f339c38 -43720b29d4ac9786351c6c6dbf88baaf671e28fa7da379d36b257dd5f9ac5069 -e88149bef1cf7f539db9266c2329f1469f128823e45fbc33f2ad7210d3a7203b -93be193605b4a6decb7cb4312e3d45cbfbebc5869e619a209539bf58eeaae8d6 -d6a3a5a8c6fb82d1bfd28c7d4f09549552aabd0c599022985e1cf6612b80c976 -d00dcaabb6665ffe310c7715d47c253d4c1363548865e13ccab1e8731961e43d -530c85e2b4413d0d1102347326b9bccab495cf59700f0e3eaec04344bb632bf9 -788f0d52e2e9bfc0db0a8ee972fb2b4ad3d89a49a994c78184138adcc6e5c492 -b75a67cf8f598b5aacea7fee52d6a5364329398aad09ffa4965e5133d3d753ae -62602d5306f7404e2d7203ad3d64a0da646e79cbeb6a09f0038eeee65949d60a -137e59ffe9bc6853e04b50423f5c5307b4dd24122921ac718624360aa1c28233 -e1717cdc0a92bf120df74c1c5c15188415e650cd967bbcf433ec66ae8cfb00cf -793f40a4c8ec054b03613ab0ed6f25b8eddb37f5afb3265f60ee716a333cf9b3 -7ab537baeb7583cbaa96ab0aad7a8ff9666e48e5f21d4a18a60384700e3ce3b0 -cae6d8a1648f14dc007e9718fa7d52765f2a8e62aa5cb257503b782de2af859a -43cdae759e6c10cdad953e07d348814685318b379b2600f79e6b39aa17ab7462 -56f0aa36b51c2971c5e5337de1c9ccbed6570f6a57f81c7ce1d4c1c54bc60ae4 -30604dde9d5aca8b3afe3085e006be1c315d70726dd5764e7f5a6d633e825a80 -a30e227f2ec8c79561d8f5e1311225dc8476459106dcb32b1769324b9de23afc -7cb1ba66844b01a9ce5b62a8f01f5f794bf8b1ca4486f1d1bdcd9b06025b9ddd -d66f430cac85b212f2306f52f9563032589acd2958cdacc835424c1cf7998692 -a2e8277ce1aad09fd95b2432b0fe5a2f6a24c17791b4ca528356d8582e3e62ce -9133fe13ef45607c92a68d3c2a9ea8a5a2a9ce95c603a51e60bd03b1de7d9a30 -2d117c8be3f51498cb536997f55c4001cc55ba26b0cf101e960a441a094e9521 -d4135551ccf12c7a1f0a3df9d7af5e8be34dfd8f7092a14b87f7171dbdb5cb47 -cc06b323014d0add345767c3d63aef96d79a872d377418c47199780159a6f8ac -ad743104000b476ec403846375831d12035e3b5a278b2967b297caa2b2ec482f -095e2fd1f5631c484bf398d7e00357b7bd94de95e4f887a92623972e08a98f7a -f9921cb1d0fbdda2fe9b968b714adf525a9ca42312121d3005baabb5d13d223d -3eddde63ea46afe6e97bf3b8da41d1a229252ccb007bf59374f5efa4c98c2e2b -9d3ad5c70154474405171bf4f645225891fb70aaf0a01eb44ea1ee3c509da33f -d54f8f64da628450848655afa5bf68b874909434064a19b5e534cd4790e57ef5 -b73474d1689027e4e65dd1bd0c6b0ac279101fe5f8a1f03820e11081c0bf2728 -71531db280f61dab2c5d70bd100850b5b348a2fbaae8d488cec04339d1262b45 -d445ece16d21807ab1d287109a775938ea09418befc20224a918882f7c81a619 -cfe1b508511f26ede8468852f80f2394b92a109628c01dd414aff5ad2fe629bc -fea9879e7da3c571ce7b413841442c9d2f0ca04984cf23177c9cb9c52f801c58 -c5f8bc0f398b69700b270a4f8cdc53199f84dafe40f3a09b72e37848aadc2aa1 -24712f29874d05505fe4c74320dd51cce66def98b76fb1963b26afc1945b4c82 -d4f0e7ab0e8643b608fe22c68747cdcdede17e1c87753db6df06227377b6aab5 -903d757c6a163a3ea489cf28de8c37ff4fb81b7977912a1f86747971752e5ccf -5982a1b482ecbf33192fd3425c05210bcf500dcbb3df20abbb7f21cc73d18766 -41697ee8c0c57ad63c51c1aae8ef5cc81ddaab3708d95fc45b872ad35c26edfa -3bccf768043487e4680f108599ddf52a68c60d217a1bab253d4e3026b7221d8e -b09e35107e2ba0e49bec515675b144d8870aa7f3e304384ef1356d0aadba40d0 -7dd522ef376dd0e96306abc1be6e1ec4eec4695fa380f30a7ce452cb358f85dc -b6ee205092cca81398420d74124bd62d493d6514240fabeadece7eeedce133d2 -de7a0328bcb32ffadfeda9edbe576ec37cd2b8ba64d88f7190f061475f360901 -6700f7bac64ba80f5845856267dddb739bd7fc4815e205a41c8222e9abb6e9cd -b73076a77722f691ef78f4198061dddf6572f95eaf2c45b7a724b1808bd307bd -4891006444918b895fd13ec97d4b7d671141e0675b9d64fc751b5b1be7d4c3cd -df64016f1686c2d2ca0db01cc59e9d2d70c449633199f0c9a9ded4603a22a2f8 -dc5a626c9414c1d79c0071ee763f621e3a9fac9351bb34ac3cec3241fd5c4cc0 -49441a6d2b5bc10d86eb6571a7649b267e6363ae43a4271614485a7c169cb2e8 -ba4fa39344f707bb65912099b652b673fc95ba3fb9e186f67abdbafe934465dc -abb65a16c3dbc43e828b5a9072207aef0654fe171a1bc688e624a2c2f07a6650 -b88e1c041fc748ca4fafcf5f31e00c20467f1130462d9e01604d20d00aa6fe8a -03ebac2aaf222d7332789dbb1423e3869edb30bc3760f6f3669ccfd3cd787677 -4698904a9d5e8e35d1875977a6c75243bc895d6efec907108beb7916aee6fe9c -5b71faa9dfe326cfca20c3e57f1d8570365f88fce2f835e8f7a8ddbf5f6723ea -5a59688b1cc209913f15a6babb28d95b939c0a0a64b778164749965ec39995c4 -8ee22c841ad7966a3c32bb360ed4a99c22990faa10465aadb1efa70e8a307a89 -9f85769c112dad02f50eac20b2c55c2a0d654e6e56d38ca12df576f2992b1329 -8d6a071535c5f2f1654530d2a637b206f49da89589201ea8f0c7116d8539d32f -be7aa895482831955e05c4278eb715c1ed3c8bd465181362e92f85cb74912c5a -1714823be134e6483152224e7acc7a0763f871ff34cb2d4d5458547d46fc04da -1c508ca9f1a4e1b3c17f0b0aafed62de8bdbd3d2d1e068bd404adfe8788b0836 -006fa988d1f9f8b5169bb699259eed3d414c3fe933ee31fbed7e0bb10113cf07 -0c43c7f0c6ba6a59de1a66b7932b56c2737ca0efb26bb6d3d5011ec57d50cc00 -c4fca7284be57bdf4caa683c351f214654c137bacaf7bd0a6cfa966f605a7cee -7046f234639d52b16a8162be089659e1e64b77038537307c09dfdd2e5de2b2b9 -66785ce5a8d57ad364d8caebea4d44777f6f6d98c9c1deb473f09cdef9048d63 -afe05592e2aad56bd8e04eae47195187fa54defa5c3d7264cda0733f64e4c3b5 -637c4ce02275c033abd0a61743145b6ab1ec2b8bf0aab010e7bad09cb952bb86 -e8d4d8766642b7ed625c76f03636326cf78f9aa8aa744e49e392507de3335a53 -45ef6f2985a53a10673ff0f2cf3b974d5faf5d6951bfcb191d4e57cfb7bdcf65 -f9247545acd45cdb07197ecc547976d007d31305d094a3e61d05e793d918be37 -042f4525c7afa81c7f11bc0687ec919ffc82e6f30aee26f3269fb8afd73d3afb -be8a6513863d30f5d889dfd149846de59363620005d9a873daadcd3969084af3 -2a91a4c02433af6c9d3732d34f6a15ac81914e239b1486aa0a2582e8b0572b5a -38320353b8dac12d5dcbf91a1b36a38f083652465424c556fe3791ab090b2ebd -04cfa7237e4f3122190b8b8dec28ff94a3d00955c77d1c1d4cc51537db0afc27 -fa0f5c3c9f7632620c7bf9c19a86dae5d8f8f9ffa96795cdc2bb9acf3f22603a -04b98ccd521cd715ddef40d5d75d46a3c7ce6416be6aa61b8e51fd6374dd9b7b -e442b167157b5a028dee9b2fb427411f6d5fb185e956d16644f90a64f42d14a5 -0843a125fdce55b2c87431a295a90732d02e8e547fb0b8e53e9c088d9e2e441b -43c1206686871994f42d1ac390303c9a56406b21568bfe7c8005eb4a1afb21ae -211a931398dcd6dbc471ac35aa741b70563110c01cf56dd68bba9fc79d4cece3 -43bc81c17a29e9b7b68da8c63c1e40274f0b97ea040d2375293032df0c608b3e -91841aff383692268b6e6e8dd4db468b193980f06a11a674593ced444c5f092b -e2864c178680e26ff4467cf616436942b070fca737d344a6b2adf017319582e4 -623beca6a69c5fba9d31d49200b9495e2890b57075009c0342f4bfaf5f3a47a4 -2a22457b1e2830b6338a9b573b4739a3c8ed460fc71b5fdf52027f24e90cecc0 -9fcae54b8ccaa3c00114513bc2448d11b1cc8ff31f3937698fd40cc221a09663 -cbd4fafa5c88d4e310fb1c09ff2b85841bfd19340bae4713745b4faecbb42ed8 -a24deb27115094d610054aa97a3913742363fca01df49f71bdb5239ce8b914ab -94052cdb1f806c294db40dab2127ef4b77feca60e159264bdfbec5aa16a7cba6 -a17ae3aec0614d3d926113f9b0b8d4ebaa223ab0cb40fb6bd03cb1c78938bac1 -6d591ee06e1d68699f42802480d586fbd988ab6abd7b911cff06b307a0aa7e69 -6e073224626983fd621175b5c129f072ce5337239a7abf2fb23f40f30389df84 -b4191f640c3af896e2200194ab0b818c9c372e23778ca79fef9820cfbf860ad7 -4cd600a052071b7332fe6e1128ae57cc26790380e0d608e67e55e0efc0ef0857 -b8513461e0dca0ec95e8b4db4f9537c57b7b8a593038e0a879d70c44dafa15f1 -8d644475a04da3daeb324a5d3c6a3ba2c4c1ebb36a7b0985581bc249bf480089 -d62329aa2dcada088cd7f7f81f7dd6af8d2d6e507154674e9e0ac0b42c63eeb1 -88877248b629da0df5a8e31fd0d1fbecafe48a3d1fc65eaff141ddd9bdb3361a -d647901bbe0cfcd4cef8fc87b6925ae88e9f7e501441077a47c7006a93bae1a7 -461570b1d4894e0eaef5db795ec75726a0305808104be67e3022ac55eac6159c -e5145332793533c93b0d20d5eec0e9003c78458c25eaab02bcd3fdc66ab92ec9 -7165e2e3adee3fa0d61cfea0d4bf8ae34b71cdde6fabfc8ee73070b4828f7cf7 -e00e93dbb808e4912e4fd9c9227f41fcc7ec70e684f30f8fe9a9a1d36c8b0733 -3261ea87aa7e8d461e6f7e8d0b1e6d5418e1ea542ab21472eeb0bc2c997fb01f -b935f6a4cc18eeedefb78d3498ec8b4dc6bb61d038b9df282686d09f8aac7d53 -ce2e97ae718f6c6b5cb537b99b511ab73f5577cb52ace204ed57c5971143b441 -55e2c2b106554f42fbe3ab601b74fac94d6ea07834df928426233bbf558713b7 -d7d0f5173c2d2cd92f96978b6e462baf37b55e24bc46cf485497e3b5b8c59811 -c2c0c609f2acceb798bc3ce1b81936244ab1f5e1b7d1578d1dcbdf574e1f706b -21a35f23ef8bb1f20bd309738445653b35794f195464d641b823416e0d220ee6 -2164be5181c03742e1bed6f352d424fe32a63bb9234a4e5c5913820b45c6804d -a2d2517008b95d931b2a5df400ac1015035c09bc79ccf0c6365884c08287dc87 -541edb4b74f309134cc57851f44923294804f642eb85f93b25271e681b400f1c -a79108e6371f378c52bbd930eaa5f594669d31abcf58176ab582bcf0d74ab652 -f04ddc613ccae8b6a9e7bdbb881eced724558d16afb8033d149d4aa1a1dbdffb -fb6a93a024fee3c14806ea03c7dc494e53c49806ad9a2d27ed008aa63dfade7c -1ac207c0dca85dc12d10a043aca99b5c9aaf583d2aa8fd41f41f9b31696963fe -004947e806c5afa74ea4b64de0bfe63bb7488c2c3e4e5d4d5d6c8403d16de46a -11984f44a9187f6e645c7b0105b52905c82efb94565fc95e4ec55ebe03557e16 -0112433201659d58a096a9db311fa9d23eef66ebf81f8584b9fa29fdb89359c2 -6f27338a30abe4dd888d4df232014612ba94900e9795715a2eb989e1216a9af5 -a1c80b5a208c953a5808dbfda64a35e3a0fa40e592fe904483635dc1613fb924 -25b74a6c21df40b1e90bc990835a3ddbd23191d556ccfbda601d987ddf91fdd7 -59e6c30bd72a3104d733fb2d197dc911f020b6e096d461b0da9af0a32c0f33f1 -150b2939f4707c283545fd4021fe3cb933742236b58c63ce3ca9aea7aaf38bce -f1cf56620b7a13dc05b172695aefa999f520aad96512c49995aae18fd2b6e9d0 -037abc468787fff73f8d3c8313e561c86d3949ead8858a50519a915ef54725df -4a50886835d6d59d07f28d08d650b3a691ecd74fba087c182011bb969e01d01c -c85c0199ac0089d5c701b32e0924a34fc2b9c1bd07ea4d905b9219aaa7adff61 -44fa2f9505fb9eeb49a19791cb187ca1382baec6fd2ab51db31da77e95e0c726 -c5927770b7704c09100a47dfe7601886cfe749e2a0efb751c809fde69a7e6bad -d7bb952d73cce047178953c242bf0445362188901f2c855ea47cb9736589c848 -e0e75863a67a6621376fa95bf7518d2df07c03f85226ec80c9d2e751c5af9dcf -b53573f2486bd4514191c53f3b1563d54ed5c0efa5efada2a69ff18384f2f748 -05a7ec394fd6145ab02fc44137462df9accd0ea88526914288d3ceeea5b710f5 -d9a514de486ddc2e049224b8a121aa8d54009c6468b45ccebb94846aec6c6b40 -0b8afd413460360a6fb5c4c42241d3bc1811c36461b2cc17d23984773e638e70 -f52495dca85fdba1baf2e9ac651f13c6e2fa67752106b41a50f2498340c4cca9 -482806525297e1a46d25b7b08adc7193f2392978911116a605c0302bfd67adde -43961438ddd1335268fe9cff04aa1615d06ab9239f931006d4ff8d4a9f17bc12 -6bf2e63258dea34f07f25ae21b6109a755606909c434d856cf18fcf482660e1f -57263f0f911031aac557a4b68282433df4c8a4a0b2ed488f83a1da8680942e81 -dbd0d055e7ee5b3d209f9f9b45e0732a897125e27589e3ccd315684a8b9a7b50 -5d448cfcb36c8f6b1c56cc5befbaf65e834c80613744bf76af759eb735b9336e -eaab0c12fb3d8d31e1da1c2a78c5b436546cf6206896bd5cc112b3e058a28dec -db2f75a85f998bac1232f10db58486d22ec9dca7eb74ec701d0c3109420db333 -6c6e704aad88ad3eeb78332fafe378d8feb7174549eb23e2ec2232406e71b447 -1d9e3caa9bcda611782372d0186a69bc20759f65a10e6566cb79a375bd5343de -a7d09e75fe78c32b762773436d7d18a6aad941a44eee9afc869283d6772ffbb8 -8336e695305d3d09e868595b7bb0cd2113cc4b5a8fa2a3fb82d0b773c29f9d7c -25280625fb975446ee1bccf778933b3036e146ef59991fbe79d9613b0c9d5839 -e4e87ac2beabb8a8b8782ffc6971c41ba8465bb0c4b3004f18123a31bc08236f -ccd7761a162c39d1de08a37039ecfce8336d33e9a4590b348ca0b9f53c2633cd -cbfb317e2a7e83c9555bcedf3f3095e886e2e257b2e5d9c92f0f42ffd0e51e6c -bc52886407409c20cda9615d316e7bfc1d055bad292fc1b044a9045667651d90 -42a5480b2c9b2fb46a428780f93203d742ae216c466ea9e03c82dd9cc5ef2121 -9f3060a2d77d7d2888f0f236d6d9d1f5a3fe7ca9baea663430829982f3363574 -709948ccee295a472105e289dc342bb69862941bc983d78918a8a426fda65d14 -64aba555eabe92c2fc8d4d2953772e8aaaf87ccf18b4465f2e6308da1c4c00c7 -8dcab0e8e4f37eca49f2468f75b6a5fbc1345de51df17079cb804f41d232690d -607e8ac9f62647ee9d2bff659c1e08542aa99eec29a2bfc031215d31f37208f5 -63100fb102b1c720155ab64c96583316f4efe2c38b19ee7df75ced9004f4d1fc -09c21ea5589264bc17ae372fea55b526138deacd72fe2c5157a2d4d076a12c20 -7d448b068a22314ba26a38744ab35c95bd9ccce0429f425a35f97dfa06a0ff0f -d7a2791bd4b91f83b028ea464ccb71471cadeb15432ba0febec6b444b762a7d7 -e46899cd78a3adfcb03bca7f51d588b55c08066f18e0a0a0d462d73afb58b0e9 -bf5c65cee6fa18358d378acbd848197b59caace9fac024a19b5bffd61b82d022 -366444ef34a7aef346e045035d5a17c66b0aed8f93538a197b04fdb740159859 -363d88272cfe019ba677fcf0ecf023dc2bc0fd5895bde423f0f411eb198744b9 -18e689caf0d26182e5d901db06016671c4b261dc5dc328f85aec98e510c892fc -e327fd40729b51de6da9b132d5f0a17d0809e2f3841b6d4d706558c348f517c0 -aa9492df75947757b4c54eb3514d252753311d5ea010e87b872703839b8777d3 -5ed99367432bf954d11c36f62200e7f7b2d25527a41a594f6205c77e715e61db -f338ef264d9e2889cef554c3b0535d2f04d4d63028a5b31326c774b523099a6a -ac13a1b348aa4e1bc8078c31f30874e5030560144a09b7a6c2b0eff4b01ddd6d -ee1090a4c597e3f5feca0e4516753b0266a5552f34336579540c6f9c8d863caa -e69f50be8108372585f78c066336d52dc072b7cfac5be6193baaeefaf5916356 -d15229547c87b42528ee4780606a14d0928dd0328142e5f3bdd924b8fb6ec7d4 -6a1c9ba256b48f50d989093d780882d3ed41166ca45f08e74ec435c16b5768cf -ecca381fd85cccf1a7b195e45a11e616b5361739e056f05918e6c4ed1a9906db -d2c58b18c7f724fc92031de6869dfce8787b6330e4ebc9c01856b977eb6f33c5 -e054880c270db5c535f00dbe8c19a7a3303e1a5e4f2e16a00f90bb46b6d5c80a -58604c09b73911c848baec48dd0df33b106bd30a9874893fd77663b5a63d1fee -5faaf62a57cf11dfc0a77ea6dd70f4eaef23498cced5338737db5d118720333d -6ce03f19092ded9a1832c68ce71e95bf15dc2c731975b91735e6576beeaf6d78 -ee4c7f9350d3afc86a8393067845f7a0121f8e2726caed7add44b7d981289287 -5dce03f43abcca94ce924661e4d9d74d5388d10a55a71ddfd45de8d6efe77f6f -cb72367ff7618ef29b63b18ae2c2117f4d4ab3f2daae686467510d1433edbec4 -f9e5433b26afe90ec9483f41b8d2213d37cdff6297d285e905bd2c0208558f70 -a6e80cb0a5d7df4f4a92459a75c69e9f728d722d5263c8ed786565475064610b -b6f569eedce326d450d2c33045aa38049b62b21d6643cb1947d8bfa4a4e74d2d -c087efa078a3d8b212ac0407b6a90164469eef361c6fee9c5b56b4540834d61a -7ce54050e29c43204e51b0660a21668683024edabcc8e0ccd985d9373a70d3aa -4f061d9aebcfa8df098ed2ea7060eff01aae92099cd93b4ee49a0026fef35952 -ee80a3b899c5019df6aec80214bca901edf7d6baa83e4e74c7d254bde9f41297 -2ee04e2fb0c8aa150e523fbd82d065248289057a3ffe946d751105aeea3cee39 -40d5eeb45dc157c41beb49ba31691789933141f0bfe54676ffc2d274c64592c3 -0fb3b87042b3b7f168912927b00b155b05201955014afa337b1dd6cf65917a3d -4a3a7000d6c0420732c0d2723155a7167661361c771f83619fc8dca8d2f16c5c -be65e899c13d0f49ef5d4e6d5de7213078a5dcfb28b096bca4844047bf8f2b56 -ebde966b607e1781e6009096cee041690482c3cbf99c775a1eb06fd31c52914b -952254b6117063f7d1621155751d0a28e459b73d8151ff3718f74cb4fb4ebfb0 -7ca9e18c0a42cba9d8988fe314567054e1469d6a22c20e83f53ebd8bb6c21251 -f8796c1ebde047d419a7db968d2638805ee52b40907ae451437aa0a9513b4ae0 -ae7c92b04cb05f5d8e869bcb02c0fb8d9d1c4cd845a290cd435c16d315749405 -a07d69ee5e80ae37a04def2c2e7b0da9dabddfe9baf1feda26a6ec0b9cfdd3e1 -a0940d6a65a300139490c760e3072104cafe4ddc5bdd601a8577cf34fe56e56b -bbbca5fd79798b0196cb660f427dcc11bfff05376e9d389b2a0b669a8162ffb6 -b8be7debc4d4eb0282d58b1cab520621b54fccf6090cecb3c591e6e8bbfce0e6 -2866af25cc585fc28693af577192708b1480d517e7cdc61ec7d8741bdda629d0 -8d1e30bfdb34a2491dea6621d3be49bc6e255a15a7aa7a0657ed4db707c047ce -d59b2f5e60af3242d0ea7380c9b7941e707493efae476bcfe1e7d37707282bd0 -a0b90885689dd8aeea0979ea1ecfc36d8c3a4bc43894e40d3992ccdebf9216f3 -1081d42e875f218d6f9dd7fa51ace13263d903b99aca50aded9595da6474ebfe -1f809b1be8eb29e52176a40d6fbc23b0050443e919e00a0a4e27945b683ca2e1 -89e720539f7e9781d38d9980addfe983a137a69e00a7d9aba911de779d70779b -70d05630fe5c0cebada73d1d8438805fe2c74c137ad357b0ac6c7727d416b5c3 -60c6152d23992b6a624b064e0255d998f97ce19d855e6e79733ab04d64f01816 -75030761cb3f55f39727acc17ca9eaad7ccb1f30fe8aac0299d8f24995f38bb7 -492c8a34b81f3d21ccabad349befc1f7c81dc54b68e3c42e60830d29f1d069e1 -cf3d6b3ddc50fc2db5a91659950979c7bde4cbf0640600e6edab37e4548f33b4 -e516e6427dcaab45ccc0704c8046b878a11bdc0a86967ee40f01320b161a8d58 -cd12ba33baeb21153b476fc10aa9100f795644e4d378f3151d4424e628d25a08 -0b097e47f264d3ca34718261b92242841ba9d21316c4eb682d54fd48e14d0fcb -012c1ef4a62a6f41ab0d416a1a48660fc1215f5489e660ff41452044d94a0bde -e6a3feb44f25b7ea4f796fd9f0715d05ae8ae4afe666afed6e1906782da15289 -2aa53f9b08da11dcd42d223e7d91af504e8b594a376058fae800585c04e18e1c -ef58d5afce5b996ab124b6d8badee04288fa0e2dde01904087b5204a7e64c442 -d31f0c57338740b252539aad87d0f48ebcc53f30be02abd3859a72de733e3d75 -f829343a2f496a704a3a37f8c3d7351a58e2673eca098fd509eaf1fed3023a4f -8fb03d4b9df622007bc138108b6a38e9bac71f91940676029da29d89504e72e9 -5df57513de99454227c729f4f48880813ad89a6149406c89cb34202a6639e782 -3ea448f664ba0688446ff4c904229456d2be144f5a1a4fc540ea107c3407020c -a226bad0d8fe850ff084d95b224972158a9050b28569f17657aeb3518af7e2dc -43c72013958451b1beb761cce6e155f88f1e7455b30183f037fae6ac3e5ef00c -29e6271526fe93d3700e91c4fa914e0d4fb660abc797e1ad95c5d4cd6602d9a5 -2748f15f4ec9bf5574ae925564fc564f0cf27054b7b470d164898960f2db5abf -ede71bb6a1fae497d3fca94caa99b433c33a907fa761ec712ced777b2cfbdc25 -b7205e18ca1e3c2bd901d87170f08e23c2dcd3ee9f9ec3010778372b9dd2b527 -3980310ec8766d17ac9f8288b023a2ff9d5a00c5256d61cbd800ab18a09d628c -1c61901ace30d6444b0a85b14b8c6af152353d51759d37862e2142fc90834828 -837a1b88d7d0a0e2894e75e6276c0496643c2b3f6c56f94187886cc2c8b62cd1 -ffd919f6375d14bc6cc07af141dc2ca2f4d75a421146c2a3c7746a831efdf1ea -1e05deb3e9b1a05c5a29b164b1593ba4a0672b186772bc6524462a81328cbb0e -ff58846e06d32ccbc92dc8055499a5700dbac3278322de87584a5641e14dd84e -4abc8c037943869a505a13b793fe4e09273528ad7d142627641a8bd931e7dcc8 -061adfaf4856942ce6174a9753208426ded01a8c5cf1f39eb507c7d3664ffae0 -36027cffc79edbdbe3c0b37facf387135837183d28b0cc969b05de1150167967 -01dfaef60604db4eedc66e4414d5c9da0014319a2b2b7442dbd2e2f3a6f40dd1 -8a843c2fc2db153123d56d0a1d7c2aa2ec0552aa0c9297bf1d2756404e9348be -507cf00a104cd70a859800c88adce53f676590b305e9cbfe83227c39bb6787e6 -2c3361e8d36583b061d83bdbce02dd0e10ffc48238b0ef0f0aa96ee7aff5354c -930f84256814c4be0be52a186ba1be78ca63ca4d53d9110da0b9b9510465b886 -0f285500b80c0a1a6d571ab85a2950991028e6f2072c18f5b0f26e549c22fd15 -67754bf321c2a85666f14e9ea2a0de1f6d0ceb8e3ad8428a8e7f4f2073b94a95 -fdf23eba0ffb92fc721494546dc4a4cdec77869bc89efe2f7cb9f213cb909b95 -24847f0be2a100bb01e22c91c94998d9ef2f4bd4aefb10f16b20b811b3581579 -0689a8537bdd0ca6df7090613233c77f75312a98d93290dc219c943351889458 -8f07ed0bb51d111a7e8b6c310c8f13636fddaf34a6345761cb842b28b8e1041d -56f196cea516124fd05218bb7b33f24ca73b1c878310e3345cdae48eb434c79c -5b12689011f60e92b5b6a58cff1fefc24b9e79b01aa83bf1abbfe63169abf3c4 -135eea4e80ebe1306f68e3cf35e83ae281ee39ed08986f69ac0cc413389b9769 -9ea2259e06a322f9f31ea35e315d8fcd8aad1fbf073c81e2440629cc1f6e37ee -3e515c5ee294c7f01e2af944ea33806f7f304c1f4914b430fd42368a885417f1 -325f69e3cd0df8f6f3b470fd459db0c197c2afbb1b48b89d00087a24ea77bdaf -deb4b9b0fe5924bae3e6a8c3619aca9563efd69fdcbcc40cb7bcf7edb96ecbde -16d21772a8460a9ae457465adfa7e478a46d4339c9e02a6beb5f033aa94f62ca -f91d8c668b6a7a1c5a144975ad7445dad92c3c4654224bd8b4f0c1ab517d3e0a -9851acbb9dc388603e19b127694352c4bf65fe51bb3525eff37236ce5a615834 -09d8a722a32d7d2871967db6bc55a9b26ea2a1106d0107d148eb2722d3cf2faa -23f6afd38005c9ff98c808c488cf06ad1b29cc730e790846398539837cbb7bfa -cc83fccb16024e257212c7ea9e75822a8c6f35ba579676746639a8467ef5ebc6 -b9243b26ef813b2d31ad8eed0f0d20eb28eeeed7ce270aad01c1f00fca1d3932 -08be5031a9f9bf5e8e9bf21d3fda4456002e596ed62ee2bb7dd074a25511d1cf -cd3bec82671635035091e03e9d24dbd6590f8495dc9e190036b70e02756db4a1 -ecd6e7105c0abc459e93bd13da37d31266559b1408e8646ee65d792382c54e78 -96f38f07429777d9314ca0d99c881a49c1447a219e02d92f7911d7e162a5f800 -e0f3e1e9fb766159837a7211e97211cac0374412d7de25e78c6b0b219f60400c -89b42658bfe122ffc5a249f9204aa8ba77922b264ac4670b35694e0660b04613 -7301b0fac4a23e626c411a47d76955d58a4e7833c21794cc264579724ec63289 -bb3adaa21e230416f401f89f977bdc186ba656980430193cf43fb7ac27d6fc9c -5f73b1ba688a55abec74f53d0b2efd2cf28f6cfe6887173ae393f45e82e2cf10 -10271957b61a72887f2c9a08b6cd20bc6a22abac31cdd3df92626e10af72a24c -e31c69f0b1e877bb0d71cc9801c56fbcfe8444810a44df8256981e383495ab83 -0d0966f323d36b2bde35932698eda6d2b6f236a205c1ab4becba45132062483b -2f5ad6366ce032bd9f825406485652067a3a18e62a19decbab34f215fa6934a1 -14cd510e0ef2a5f54e2202a9979ab398589d21277d9a79af1bf9acb3b0bb7fc4 -c173f3d2ee560a94d21424c67d85949285f4cf5c608da6966eaea7aba5e38605 -5c3a5f0f8ee57a75554455432bfeda82d71aafe97c14793cbe336ba8ce9fd72f -7c00b0a48b98a763b7461ca9add215f32c48a03fb04d87788354eea4938dda3e -1116a2e5158c78ee11258838ab43699801b60ba97b51588e526d4e905658873d -dd6cf15cea29938d2858d090633276a985b5c5b946c8e79d508c486c3546076c -755a87bb8f7582daf7b0c95b1dc403d00e8a758319409f0e68345ee2030b9df9 -1c287dd24ab55be451ab59ec4d60c3ee889ed77931f919e40bbfe033d3a4f552 -3097c29b00862141f70955a4bf3b8fba27515a6224dec6aca820ef81669fd3c6 -f532292494c68cfcba35f14e271a072dd074c0d6fb65806ea129780f7abfe7f4 -143194a74b2881cfe96b60b1b3fb3b22caa822ddce9149dc373d99b282b35d39 -1ddaebf1b59132ac3df3e80b4f7fa59d286de9acd3d4edd514af2552cf5ab9f9 -03c388d978aa6389cd428a1eedbe05dad3897d842f467385729624534977ccfb -249072709cc92f1b588aa0b090a3451ccde23ab3dd8b970d0a1d5726e3c382a5 -a6c41956b6cf96e3fbe30f63f4e61c340c5d87fab30cee417bc8dc0d9884383a -5ab79356d3d74ff36335a73ecd095b220dd87c64119004f664bca9a2cd71d0a8 -6930d6054e3fa0957a62134794145319ed436264bc2dd6398f8ac0f41f905cd9 -ba995a7fc2e109bac4f6e4af29085401bd5e9342c680257137e414d2e1747332 -e44ba2671ef3ecc2237df2f7e6be07e85da67596717204e8a86a1bc0683f9b4b -d5d1b373000ca31029591f41ed5c09906dfaa220e1f9c3f5aafdce09f0087d71 -22f443847db662d39d023dea545e115840c307160df0ea19df41cdb39f11c428 -30848a4d556d513b19459c96244b26d947fc9e09d25c3719a3e40c2f22213aaa -a9f07d8a8559503751c051bb8ccd8f9a8c73637b6d01a18eb71dc0e997cd1f19 -f8388f594f92679931b90fcd0111aa94b6d1a97bc277d543b841dee3d0dcb29c -1d523aefb412d6c1923c4520cf514dd4187bccf78e2b10bcc9432456be782c51 -293e6998f29681dd306c7226d837bee850c75c12eed2b0a95416433b3e4eaace -fe7f4ea17f0060cc0e8b3620371c2e2ce13b4e49c47901f2a3d587771d2d373e -ad6b8fb113f4e633614ceff7c43b1dc4bef448ba5387513e1f9c82eee9e9f0d5 -2352472f30db96b9eaa69ce60fbfbfd6a94abbc7781f783ac297a13c7fb52a85 -26add75d9ce9fc37214345e3239dc2cbd5bfa249b2848ade0e1e92d310f16844 -114253be6c914f71db040b99ae74de0b82198898ecd3981a246ddfaeaa185cc8 -eb7ccf6305999fc8967026692ccd6b67a296854fb2498fff2906d30f4db7a949 -2609192d014e29a16eee1f82fe3554b2561aa1d9b5d1996118f68f21f3c6bcc4 -d7b5298b43134000fc6a3af59080f9f929a35020c3c9251ae02094a9145f7af2 -f5539ce72c56d47df642b3079d91819639677214ba3febdc5e0d7a6ee411c98c -4a4307141e364b3b6069c3727ad915e3813d4e80634e3210700990f72aa9e2f0 -b92ed2de07829d708b0b2761cf6604a1cb30e403409f6e9dabeb3b09b74f1c42 -2f610b0d0a4967d8d95871efecb2fa4dffc0c757f545c2f54a68ba62c6d7b5f5 -ebb8a4c7c2049e968d0b28460f6dcfa941387a28f9536122360918dc5fe38d20 -2615f598299583dfc99c829c129da1eb188ec84cc48653df75558655b409f66e -26fa34ab851518e25844bb109dea1b902a253d8e39acac635c7db5fb18bff9ce -20b26dfaa9590843f5113d192de371f65194e2efc07640e6e16912fedbfb53b1 -69b09ca51c68e52231510f5358aba50a705e73e99a4aed455ad4f1906c4f17dc -9e50e55a77ed53418b26120ac77b3b979f05ea16d21c8d9bf9d5ea6ddc24c946 -bff51b4e32623858199cca601560c47c7a67ba86256be224eb3214c0b972e448 -0d966ef3945eace43140c426d7a84a77a35126028d9ac9228260671b645efbaa -ec73dcebc2611661337ca3e445102cd4acad6af11ff12c584921f0cdd5c308bc -bd3f5860928a6fa6919b1f5316daea86d817d932fa560bf8a6cedbbc8edfee2e -34e873a7f967f911858e5c386f3a1b3b23b12c2dff9c887e56ffd1fc9ec51378 -f85c4454ed5f92e088dbc2fe712152bf4c11c58b935d9d1f9d013e28c466e23e -e742f5f10160fd112c54b1b839f59f889d01b79ae2701743fe9dce504dafd77c -8c7a920b3e9d239c6d508f45f4e40556638dd30e899879290166375a164744d9 -1f59cf23abc74a9bcf4a9cc9c1a68e50480d7c7188e2d20f655a4bb46de6fd19 -a756ddf2783f965a476d9b532c944d73c1323ad9497451364f02442bb54096a5 -193a0215c1b05bf7304586b46515f55b37337c504dc6ffd970cc52de77065837 -35a4d68fa6cded3f8a31ed11f7ba3569b4ff57311b9665eaa97f30e4a89a1dd9 -2c3b9593a86b1a910a501c9b8d3fb1ab055ad955e46ca843a7b01437de753fbf -3f9b1db21b20a831ce199181543d539f1a1b339da9597b4af80b7e2066a09e83 -b32f30c6f0376f8f3b0617dce784a12fb987e5261826ece65a2250a64cb91b6c -08d92e9e3b4c5a35eb6735a0902a6b65c95f924f19de3f03a6930d3f28d84629 -1f92af0b79d272b01fab43bd7de646d74945411045a64a5720d7ab0c06a21a38 -fd43bbdaab890be6f572e3057b7e0a3dd1cdaa2bd92080e7a06ea3ff6aaa8c00 -77cd6f09047912f2dc69a457a0f040285006d4bacc695031969d5265074d8767 -e2b03f1ce66bd5e90dcc2159e634b9bfb9004640dec7295ea19e9f20b8d9dfdf -a907911f1deeda9e819a21458ebff534b9c2f04818b0a8a2bed49a6dbe31deaa -71af4d6665d594e5892fedea2be709001cb1998ab8363c81c0ab01638690f8ec -4c961e363ec78cf19c98b3fed46508f5643361fccc5682623fc143caf668ae45 -e54edbd3902c01f154112001a51ac5c6b1847bc8e80279abb2f51fc1f827c5e6 -fd36ee59e1ce3b900bba48f18c9f0f0c480c12c4bfc1da1eec771c60d54210bd -4b9a0a7685f4f86ab6dd1a837f082ee7522ec95752908a47245b19bfa040a60e -68bb0c532ce0a655023a8fd4dd061ff26daa53008ce716557c83ec76859a6f1f -62491dd0196237a61927cb70a00e4a920dacbf38ddc00065dade6ea0fd275384 -d3d6e988886bbf08e81e25ecaa89e1e93554973cc1a5a3f72de6b6b6b9fa5aab -b483e4756f4c73befe5b554de278d031b15a1a9b4e0264b06f907be2eed97eb5 -c8e238467864e37b3052e3f56b15aa3335214a26ec41058add2f33dd5ddd7ff3 -f49a5944783af38ec7f91503bc49d5d1df7b8ba5fc1f72bf80703058d967855c -52132f7b33d28438f1c8b0d5a025460705410b63210bb5f0044a0282666b6a6d -7f5ae5aa9cf9c312c8e0abb197539e95a1a3ee23f4c50d731bdb3dbd48e99542 -f062a7f5c9b7488a22933254a5e0a54d3f994a658987c82aa9bfc832e938053d -afefc31a1f17248c1b22d8229ea84fa1a8526d8ba6669b40f461f784bf6c52d5 -fbab412525b5068efa01c2d7bdec92c968fd438dfc39abf42b1003ebf4e8c40f -e342a575a594054f4e9a05bc728ef4be2aa3e9eecc15120048e965c1b217bed8 -659e8a2945cc719ee137172c3dc0f57d5d9c1e67161ec6fa7ddc5c2115935ecc -5953e6c597bc36e567b43af14f7b9cdf3ac93ac0b807bc348162d6b6b7ac73da -d84228867d86be20bfcb786764f1cc73984338433e15b644628df33db4b0d9fa -f10bc76cc2af8765b7a5849718c1349c48b8e3d21e38e97c6a05aa4e1ea7a7c6 -4c7ca0f4a4658768caa56275843280e6362f9aa2b05a99e748ee53d64fa690f7 -685a794ffeb9da044facfb79bd78294098b1e8fb6676e0f9aedacf793dab7ff0 -3525bf8ba2fd498eb2a89adee7ad19414be58b25e452848c6cc48823d45475ef -5d3e005dad6f791a8990ec0576d51928c85f1cd87557cf2ca0dec4c645c53cd8 -c201290dd26f08fd27e08d78db982ab5f71ec12109f6c9308a09be0ac5db89cb -d96130005c970fa142402b060a7525dbdbbeb759e82740556077dd00bac1bcc4 -830e054117ccf4eca91299ed59f2d16c78c457c3df37f1b93100d476a9475dd4 -c3fdb3edec66389c71d93ab225f75a3d19c506874c1a25d7033f0f27c2eaa7e5 -e00520014819076abe1e311f569d4c7f03655e222555a9045de9fc8f457056e7 -6d9acdd412dc2de67396ad4f1a04f1c529a0235bf1d09f95948d8dce712091d6 -5a46f438c6c206c41e32b5fa5f31e0eb411a0ce486a808590ec22966ffaaea74 -2284ea6e4ef3101a35daa0bf715725432d7a43fef716c74597ad496231744399 -36e2fc0d2cfa705780b4e62bebb68a855ec4c40cac77b1f97ddfb3dd1fd5bad9 -df6d53824b8dc4203c168b0b47ebe74424cbc4bcad977f6971dea12999578efc -00c8de89b0ccc31f7e655a51a37c6143cd64489e8dcaf7ca395bf61f0f3cf9e1 -c37373d378f815c24f38eba4cbbe09acfce394608620833153c1f2f5475a199c -777b13e1ec0a4e48b38cd2ee7428f772286f0034f2dec764ed8c4d1c29b006bc -3e730cfdefc64df5d75e3bd864ff0baae0830d2e95c5e000760c6fc50b04e4ea -908d758db520926623f9eb6548fafd08fe07f61da958b0dd3a3289324195993e -f3d9b4884edd7895f0db3207552f88a296073a0abc1704e1cda7304ef0afad1b -2439746a56628280d8456fc43c5190b637c61260e275285dbc9ded3e4eca9ef7 -30aadcb268ac39b67b347b9e1867129b2d6ff834a22541f15e55724935a76665 -75a11f02b812c7ce5125af5b946dc07c3a322fdd4b2cfb0456a04dd2e6255d55 -0f0925678b2d994423912d0fb08b2e9847a26465af05e808db6e44f97bcf57fe -07267078c00e91b3bb2471c4792c023b61401b68d6c0d5feb0150e3e5164a7ab -957edbafd1f73fdd6cece3ab2657a6c0551b126d6878b197e54f2f7dd294babe -63723dc36175912e3ae8048e55ae523acaa5ace21a5d3528c30e41ceeb00a1e8 -5a6f2722d8eb09336dabe9a04f9001e3bf0cfad54142f3bde5d07c1d952802b7 -fb5031e345402724547d52d213e69f7ee4a1f1af0b244342b9fdfc4a23afc8fa -6d7eca2a0b68101640ebad11fe4b5c60b404e1cc3c53f3cd5df01cac233db5f4 -5061b7d3b7ec2a1f748802b0f2addb6a822a8b197bd27845824c790e538bba0a -021a25f2bf1b26ab51ed89b33b36c7590468955833a8851e717fdc4da9413f6f -0c078710405b58736ed3c45791d3bb3d17718bf92b0b48fba809c54714071421 -2ec5526c4758f999f5cc4368bca65ae33355bf935e7182ace2c55fc2aeb6beb7 -daa8f79d97225a9f72061c905ba42147b2ddb856d163ba1eb258db47eb911478 -156b3c4a51ddc63de48a5cd97dbf15ea7e1450059f459f88d2cf164522b94cdd -6eeaae0dc92bc2fe4c7488b8314af1be68fddcfcb70947e54c9875186837de64 -ec89c40bf72cc34ecdc6f387b431f9ed0a8f1a5e9b831c908dd7be9e93254733 -59e09faf72796071cef91de471f2b1e50945b798ee76085efc08aad6834b9265 -fd5369557a19c976fdf4ca4409448462d07c93a4417d820b99d084cbdc329bb9 -435435e427bece011a84ccac76fa7b4df987c0e1553fd6ce332b029cd3bd188f -19e05e98b13855cd42eb19f67731b24fc28d793a4a36a9f92dde1b962eeaa757 \ No newline at end of file +81e8a3f4f664515ed67dd41e6a72f2166986ce7aa915100684562acdb33747af +04ca6e279ae6f0a1d10b55b3c9193f686f354c317b9577b425de57fb80294d91 +b63963dcc7976de3ee8a2fa4e9fe2af0008d04cb76d6c56abe00e07b388e4e48 \ No newline at end of file diff --git a/validTrxn.txt b/validTrxn.txt new file mode 100644 index 0000000..540ba35 --- /dev/null +++ b/validTrxn.txt @@ -0,0 +1,71 @@ +0000000000000000000000000000000000000000000000000000000000000000 +a7a39be437c8b0e607897480061cd2a23e7d491336e015487205c05971258f34 +702f85a827b9edb33e0fa76b5d7a073c4683423a0a6127bcca98245d9182cde1 +29bc16c7ffc48394f743fcc7f9625718b0e276e7eb995c9e04d9ae110f37d419 +a9e537569db3c64340ed5abcdd983e9bb1b6ad6f90c93bc80d31c5cc0490bcea +82f9f96db7bdbb9e70626747632e373b34eefd50d613dfea7092744169591b6e +7cb2a4f55245bae141a5d6ad51c08d7a9fdf2c2b905e4d97639ed80b82e69800 +a9f1f2279711f476c30e2e1382a0e99358c662a48fbd1774d7e5e7f8ea27d98d +4bf38be14f3a0f5b68e26bdcf018e7f18b5e8d78c6e04e710310df7c2131e348 +43341b756fa1b8fa389fd1569efe32a22df9c60155a35d8a8339d1f65a84667f +7f46e9e0dd3e25bef73469a492982232314e0631eff76367d7ccbd179c5e0299 +b9ea7324bf46de83ff81f0876dd8e6e8485318165cf9c5073549dd8824c7c2d3 +a703509738df47bf2ebd5b0d202ba6fd1f33ebad70458c49d2f9b9a293d525c6 +8a8c77517ae397e1228d9e88d692ce7846f723717379087d811b5da4d4142fdf +e1e53a01f56bd6daacbe53e3ca18fe1fb6c0722184c84165611639e71eeb44e9 +3d36e0bd2df2cc4636eee6ce4f5972177204b1ce822a1718dcd05ad8cc10711b +fc1f7b712f8d4e266f7ea3d34a7b1a1955fdba2491f87f984b39e16798f49048 +55814621087db83fbeabd92ef54fc3f5f2edcc42a430a97fcaa79716614c812c +1a1d940ef602def2b76eafb52aaeab8b77aa2bfdc21e0489a75e89e4bd15ee14 +3499cacb254415d5bee42d4403a8437262e6b6f37b6fd1a3d38c969f78eb2c86 +7824a85f07cf458b9ddd128a48fe804a01d34db43102f57908599624fb386a49 +101582090f156863f0d60553843e736dcbe979a1428b0716d953ebec1346e048 +b4550d346740cbfd5cfa103e5a9df4934f8cd6f17f9b19e01c03b473c91ef5e5 +77eb3b059eae31dd90e4ddc8ae12380cd489ed0657f4986da29039524e12a206 +3ed0855164d4b07ace5cb2122cbb622448645286db80ea1dbf6b1d1e2216b09e +fbdeeb6aa2846d3d198b141c52e5e24857e041a23e03b8662c644b524b4bb55f +263dcd0111b98a9f0b5ad33fe4f8180ad31aea276b3cb37254e9d1ed29da338d +183a93f988b0202655ed39af920a3ad5b52d1869c7cc4f49358e9441d8964d3b +e58c19664f105df8ea7a2789391d1d27bb4dbdeaeafd399bf8c13161ca2da3fe +8bf35e9075cea17c16515ade3e605ea5283a40cda38f1e1f87bd1717ff173316 +236689bd068890e3d5ed0223b66606a4843852abd2fab7267b7f77d3cb01434d +16a25d53ee2c9eccf46a415c7e4665018e04181c27915044045a77f77ec075bf +1afdd7d5ee7ee589699611ddb1b21f2a5e4cc8c75bf82a4bdd9c9359c52bbb95 +aa15522e19d3c34257d7de66906ddd2bfa38cff43b3039daae747c52812ee0fd +8b4f92382384d833c560b0934d031fd3a55d1cb867a6212c4b3d31586360b2a5 +cccbcf8475cbcf548937788220ac9a26532c71a81a12ca6932a5595236cabef5 +7c27c9f3a5eb30dcb79327dcf49bda91201a45b74ebfa73fcc5ab67cdd3f9f55 +089f78aadbbce977ad1576afe5e45c190a7a221b32ff378514d812956094a7df +e7599201cc39f4d5c1ada0875ebfce3d361dacf2b7de7b37bfe16f2bdacc58d0 +08a76911a1e58d455aaaa0360b2b2cfee503d6d40ef17935d354ec4128a71417 +825476d83278902757eb85768c8506a49138e4de1173a74cbfe8dd73cf088dd6 +6b4ea2a030ec6f58102f7b66c864d7ec83f6bae3ee00ab1fcc0f044031f796cc +a7eda58bb29622f4481ee8a50e1f689a66db433de71f1e1ed1bad717bd9caf93 +b9468bc407f8d6e48057ed9a13472d742798d84a28fcca57ade4a8b901320d78 +ece7b708c95114ace8d3788b7c2b1b750f1f252ccd842883faa83929b9c97b68 +3aa0256dfa305f9d3c4d77f98ddebd4a37bbbbf229ef2b2e215128522296743d +2726b3b0f3bad42f2552a99e7bbf08d3d7dde44c820817790891c152146250aa +fad4ad7256902a9455965f61f597f7e012c7d4a1815b2e6d70fe8d515057e083 +f2de32e39ca853add28011ef802f336e546789ea8abb093c44d0b79e2783315a +6c128f945d163d1a9692af5c167cf0727aaafb4f32f3678cf28e11a04c3f27ad +99bf982da397947eb0999292e909c17c78d884e18d3e59ac03fd2aa7f0241c7e +4b6e5e84069dd775e081aabb27853557f8f78e0d03bb14cf5861c512eaaaf95a +86f320365c5a53d8fe31c74034b4e681bc65e10b688cc520c706d8bb71be2151 +e054c137725b7a5d163dade8f5cd68c0927a2e8b00d920927dab9a7ba934ce5f +c0ec8533ecf531361dfd09f0a42186f7137f1b07a1e6b2f0016cb1488db05b1e +bde1477a5d1757b7d832612525a616c8cdb86b636b120d0b976eab2d567b180b +171f91ffd65afbe6448a62d300cbce6cffd3d06f9e59174875c0dbf50a5e4b9c +fbb7b594c89df8970f9c52689814adfaed19a6028f0220261e3e30be0fcabe10 +020c992ce13c318c9f50479de5c4bceaa9fe44d449ba71883297c75023e8b626 +a341a7841893faea4921f3da28b33a0ffa223f2c412ab84b68b4b83b33ce803c +9a462bf26c97567cc4107281fa73e11dc8d10e2262975f93f63cd351802d8080 +c10e33dc6c07dd326ef688a0fbcce48f0385cff936fd4e297418f05eb38d0a4e +4331fd5d59e127171c051e5be82b8c9f639ff0a7884a9a8ce64423868c4b003d +d516909bbd02391ba13dcf92b94dd3b447004573c80c62a633079130c401ed41 +81f863dcc4f241a9dcc855872a2201bf8968b4c9fdac5126cd1a16e3f308afd7 +c7164cdf350a0d01cc873d8a4b68cf05a4733a1a3db02e4dbea57cde43362b64 +185d457fac20b9d75447604233922171a541d01cc8516ac0bd21a8efb56aab87 +4ab3cc4296fee78153d60d2884323a84260157db0b83a72309272f109ad9dd32 +81e8a3f4f664515ed67dd41e6a72f2166986ce7aa915100684562acdb33747af +04ca6e279ae6f0a1d10b55b3c9193f686f354c317b9577b425de57fb80294d91 +b63963dcc7976de3ee8a2fa4e9fe2af0008d04cb76d6c56abe00e07b388e4e48 \ No newline at end of file