diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f3342823..7e7f33f19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - ZkProgram and SmartContract now also support private inputs that are not proofs themselves, but contain proofs nested within a Struct or array - Only `SelfProof` can still not be nested because it needs special treatment +### Fixes + +- Fix verification of serialized proofs done before compiling any circuits https://github.com/o1-labs/o1js/pull/1857 + ## [1.8.0](https://github.com/o1-labs/o1js/compare/5006e4f...450943) - 2024-09-18 ### Added diff --git a/src/bindings b/src/bindings index bfba51b9d..1bb51bcb7 160000 --- a/src/bindings +++ b/src/bindings @@ -1 +1 @@ -Subproject commit bfba51b9d8351b04af51bf6d59d5291cdb0490ce +Subproject commit 1bb51bcb7c1667e885a0d8d859b10b369708cd35 diff --git a/src/lib/proof-system/cached-verification.unit-test.ts b/src/lib/proof-system/cached-verification.unit-test.ts new file mode 100644 index 000000000..a0bf7d78d --- /dev/null +++ b/src/lib/proof-system/cached-verification.unit-test.ts @@ -0,0 +1,27 @@ +import { JsonProof, verify } from '../proof-system/zkprogram.js'; + +import { it, describe } from 'node:test'; +import { expect } from 'expect'; +import { Field } from '../provable/field.js'; + +const verificationKey = { + data: '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', + hash: new Field( + 3386199237106052514483028598342080466726836854279486504176575292823052975570n + ), +}; + +const proof = { + publicInput: [], + publicOutput: [], + maxProofsVerified: 0, + proof: + 'KChzdGF0ZW1lbnQoKHByb29mX3N0YXRlKChkZWZlcnJlZF92YWx1ZXMoKHBsb25rKChhbHBoYSgoaW5uZXIoOWIxYTk5NmFhZDU3YjhjMyBhZDRhNGVkZjhiZmRiYmM0KSkpKShiZXRhKDk2ZGQ4ZDJhNWFhMWE4YjQgYjZlOWQwM2M5ZDk5NWNiMykpKGdhbW1hKDkwZWQyZmJiYjJmMjY4YmQgNTAxYzQyOTM5NzQ2ZWI5YykpKHpldGEoKGlubmVyKGJiNmM1MzZlYjU4ODZmZTUgMGZiOTQxZDczMTgzNWZiNykpKSkoam9pbnRfY29tYmluZXIoKSkoZmVhdHVyZV9mbGFncygocmFuZ2VfY2hlY2swIGZhbHNlKShyYW5nZV9jaGVjazEgZmFsc2UpKGZvcmVpZ25fZmllbGRfYWRkIGZhbHNlKShmb3JlaWduX2ZpZWxkX211bCBmYWxzZSkoeG9yIGZhbHNlKShyb3QgZmFsc2UpKGxvb2t1cCBmYWxzZSkocnVudGltZV90YWJsZXMgZmFsc2UpKSkpKShidWxsZXRwcm9vZl9jaGFsbGVuZ2VzKCgocHJlY2hhbGxlbmdlKChpbm5lcigzN2ZjMjM4Y2ExY2Y1NzNhIDBjZDBjODNkYThkZjVkNmEpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcihiNDkwODk0NWFmYmUyM2ZjIDEwZjBlZmEyZjhhYTUwYmIpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcigyYjRhNzc0MWNkNGY0NDM3IDExZjZkOTMyNGI0MzEwZTgpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcigxMWI5M2M2M2I1MTY3ZjE5IGM5ZTljOTcyODg0NTJhYmMpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcig0MjRjZTVlNzA3MmNjNjQzIDFmNWI1ZTExNDk4YmU5NTkpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcigxNjQ1OTRjNDM3NDk3N2RmIDlkMGMxOGIwM2E4ZjA5MTEpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcig3MTg0Mzc4YTc5YTkwMjQ3IDI4N2JlOTMxMWFmZDA2OGEpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcigxZmU0ZWQ1ZWM4YWQ0NTM0IGMyZDkxMWM0MjdhN2MyYmQpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcihkNDRmM2FkMWRjNmM5YzY1IDk4MjFlMTkzNzQwZmM1YTcpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcihkOTBiNWQyY2QxZTFiYmMxIGE1NTIyZDE4MWRhMDhlYTcpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcigxZTFlN2FmODA0YjFhNTMwIDUwZTgyZjY4NGE5NzQ4MGIpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcihiNzM2YmJlNTM4MWQ3MTcwIGNkYjIxYzk2MmIxYWVlMDApKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcihiYjQyZDQ2ZjFjYzU2YzI2IGQxZTQ3NDJkYjJhNmQzNmUpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcig5N2Q4NmE3MDIzZmVjNzE3IGZiYTIwMTdkYzdmZGNjMGYpKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcihkNGZlMDViOGMxOWU4YjMxIDU3MTlhMGE3NTMyMmJlNDApKSkpKSgocHJlY2hhbGxlbmdlKChpbm5lcig3Yjg5N2VmYzJmNDk0NTE3IDQxYjc5ZWZkZDk2MGYyZmEpKSkpKSkpKGJyYW5jaF9kYXRhKChwcm9vZnNfdmVyaWZpZWQgTjApKGRvbWFpbl9sb2cyIlx0IikpKSkpKHNwb25nZV9kaWdlc3RfYmVmb3JlX2V2YWx1YXRpb25zKDdjODU4MmY2YzUwMDU0NzYgZTYwMWM2ZWE5NGVjMWUxYyBkMzg3NWFiMmU2MjBlMDE1IDIwOWJhOWU3M2MwNWI2Y2YpKShtZXNzYWdlc19mb3JfbmV4dF93cmFwX3Byb29mKChjaGFsbGVuZ2VfcG9seW5vbWlhbF9jb21taXRtZW50KDB4MTEzQ0M0NkU4Q0Y2MDgxREVDMDZGMzg0NTdFNzYyNzYxMDM5NUQ2RkQ4QjBFMDdFOTU5MUExMTA2Nzc2MTc1RCAweDNCOTNEQUZGNjRFMjQwM0NDMERBQkFENDZFQkEwNjAxMkFEQUFFOTg2NUFCRUI1MzcyOEJCRUVEQkM2QjRGRjApKShvbGRfYnVsbGV0cHJvb2ZfY2hhbGxlbmdlcygpKSkpKSkobWVzc2FnZXNfZm9yX25leHRfc3RlcF9wcm9vZigoYXBwX3N0YXRlKCkpKGNoYWxsZW5nZV9wb2x5bm9taWFsX2NvbW1pdG1lbnRzKCkpKG9sZF9idWxsZXRwcm9vZl9jaGFsbGVuZ2VzKCkpKSkpKShwcmV2X2V2YWxzKChldmFscygocHVibGljX2lucHV0KDB4M0QxMjNCMEFCNzYxMDNDMDEzMDE1MTkwQjEyMzc2NjdFNzUyQkEyQkNFREY3QTVBNzY3QkQ1Qzc2NzcyNEJDMyAweDM3NEU3NTc4QzRCMTZFNEMyMkI5NkQ1MUQwMzE3NkMxQjEyRkI0QzhDNjkwNzlBQ0MyMzYxQTQyRDEyNzEyMjgpKShldmFscygodygoKDB4MjI5NDUxRTE2RUI2MDRDRjdCNjg5QTU5MEI4M0Q2QTE4MzU5OUE5OUU2NTBCMTc0MDc1QjVBNDBGNjMxMkU1NikoMHgyMjkyMUE1MEM5QTVGMkRGRTJEQkQzQzcyRkEyMDcwMUM1RjJDQjZEQTNGRjAyNDQ1MTMxNzlDMEI5RDYyMjQ0KSkoKDB4MjJBRDI5NUU5MTVCREJFRDZDNjYyREU5MjIzMEI3QzhBMTZEMUY5Qjk4MDI3NzZDMkE5QzM1NUMyMkNFQTE1RSkoMHgyRjZENkVFN0ExRjE3NzEzMjVCNzMxMTExREEzN0U1MUQ1NThDMUUxODExNzZDQzQ0RDA3NTM3RjVGRUQwMkE2KSkoKDB4MDk0OTFFMUQ3MjhGQkIxNDg3OEFFM0Q4Mjg2RjcyMjhFNTBCRjlDMkQzNkJFMDFFMTJCRDVDRjZGQTNEQzY0OCkoMHgzMzZDNzI4NkM2QUU1NUFFRDgwQjExQTJFN0I0RDNGMDc5OEEyQ0VBMTk5RTcxRTUyM0QwRUQxREVDRTFDOURGKSkoKDB4MEY3Q0JDQTA1NzlEMTM4RUJDMUZEMzc5RTZDNkM2NTU3ODQwQUIxQ0YyQTg1NjA3MTNCMjNGQUQxRkQ1QkMyNCkoMHgyNDQ5QkEyRDhCOUYwN0E2NEU2MkI4RjJDRkY1Nzg5RTBFNUQ5ODgxNkM3QkQzMjg0Q0JGMTQ3NTExOEM4NzdCKSkoKDB4MjdGOEYwODU2OUU5M0Q4MzZCRDc3OTY4MEYzMjU5NEJCQzlBNjJFOTUwNzQ1NUY3QkM5RTRFNDk4RUNDRTA3MykoMHgzQzA4QjQwODA3NDQ1OTJEQUI4QTk1QzY1MTU3QjU1ODdDMzVBNjA0M0M5OTIyRkM1QzZFNzYxMzI3NDJBOTQ2KSkoKDB4MTA5Mjc4NDBDMzgxNTQ1MkNFNDg1MDY0OUNFNEI3NEE5Q0QwQzEzNTQ2Q0FEMzlDOUQ4MzU3NzE1RjZEQ0M4MCkoMHgwNTFEM0NBMDk3QzgzN0E5REM2QTM2OUY4OEQ5ODczQzJBMDdDODY2NUMwNjA3NkRDMEI4MzA1ODE5MkNDRkRCKSkoKDB4MTI5NTBGMDY0ODIzOUNBRjA1NjdCOTg5MkM1RjMyMUYyNzhFOEZCRUE2MThERjEzREQ0OTJCODZDNjI5NDVCMSkoMHgyOUI3Mjc4RjQ5QjVCRkRCMEExNEMyNTdEMzM2RUFEQUJEMTk3MTZFRDgyRjE1MTRCODlBRjJFM0YxMTY5QzFCKSkoKDB4MDY4RTZGNzNFQTMzMEExMTc4QzlEODAxN0YyRTM0NEM1QjQ3NDk5QUM4NDk1RDk0NDZDNjNEOEMzMDZCOTMyRCkoMHgxNjVBMTg4MzA1QkQ3QzQ2QjUwNEM1MTdDNTUzMkIwQzk2MDA2OEJBQTNCNkU2RkI3MjhCNTgwMTE0NTNBOUEyKSkoKDB4MzNFNjVCRDk1MjNDMzUwOTU1NTNCNzgxMUNERjk4MjA5NkQ5MDBGRjU3ODVFMUE4QkQzQjkyNUE0QjA4QjIzQykoMHgwMDU3OEYxOTVERDYzOTM3NjcyODY1MjAxMzRGNUU1OENCMkJDNDRGNjJBQzEwRjNFQzM5QzQyRkNBRUE2NTFDKSkoKDB4MkQ0MjYxODUyMDc2OTVFRTVGNDhDNjNCRDAwODk4QkY4MTY1MkEwOTBCNjNDNkRERkExQ0E3NzI3NkQ1MjMxNykoMHgyNTI2OEM4Njg5QjVDNzc2NkYyNzZGOUU5NzFFOUIwOTVCODc3RDQ3NUFCMzE2RjA0MTAyMzZGODZEOURENzVFKSkoKDB4MjJDQzA5NDAzQkFEOTFGRDZDMTg1MjU3QzQ3NTg3MUFFMEYyODUxNjZGMzI2OUYxMTI4MDUxRTI0NzQ1QTVGQikoMHgxOEVGMTI3QjM2NjREM0E3QTIzNTVFQjdDMDgyNUI0N0RDNjNBQjNCNzBDNkZDMjFFRDA1NTk2OEZGMUI2NUI4KSkoKDB4MjQ4NDU1NzA2MjE3OEMwMjQ5NjJEQTE5N0IxQzQ5OUY0MjJCRUZEQTE3MkM0NzFDQzg3NDE2ODkwNUQ1NDZCQikoMHgyRTY5RkFCRTNBQkY3MUI1NjQ0QkI0NDg3Qzk2ODJCQTA2MDYyOTRDNThGQkE0NEE5NUFERDFCRUU0NThBNjNEKSkoKDB4MkZEQjY4NUQ1NzZDRkRCNDM0RTc1RjJBQzJEN0IxODU0NzJFRjc5OTBEOUNFQTlCNkFCNUNGMjVEN0YxQTk0QSkoMHgwMkYwRDlFRThBMDEwMkZDM0JDMTJDNTIwQ0UwOTk1NTU2QUU5MDgzNzI2NDc5MTY4MUI1Q0MzQTFGRkQ5MzY2KSkoKDB4MDdDMjMxMUI0N0YwNjg3MjY1Q0RGQkIwRjk3N0ZBMDQyNEQxRDMxRURDQkQyNzcwRDlFMzk2QkIzMkRFMUZENCkoMHgxMEJCMzk0RDRCMTlBMTU2QjY1NTlDRjdGNDZFMTdFRTNDRDgxMjYxQzZBOEUxRTg2RDM2ODFENjI2OTA2RjMzKSkoKDB4Mzk5OTk2NjA5NEEyRkVCQjJDMjExQjQ0QTcxRjI4MkRFNjMyQzdGRTRBMDIzNUExMURFOUU4NjhGREMxMTFFQSkoMHgxQTkwQzQ4MjdCRjY2ODlCNTQyRTY4Njc1NkU2MDEyMjVCOTlCMUM5QjI0RTIzNDQ5QTI2MEMwMDZENDNBNzU3KSkpKShjb2VmZmljaWVudHMoKCgweDNGRkY0MjIxOTIyQTNDMzM5NTBEMkNGOERCOUNBRkIwQzUxQUZFRkI2QkYyMkFENzM0NEY0QTgyRTBFMDAwQkMpKDB4MDZFMTIzQTU1RThBQjIyMTJDNTI2MzhBOThDQzVBMEQ0ODBCNDQ1MDBFMDYyQkZFNTM1RjQ4NjRCRkQ3NkMzMSkpKCgweDI3NDE5MTkwNkE4MEY5RjIxMTJDRjY2NzVBOERENzI3M0UyQjc2QzI4QzI3RjVDNjEwMTU0QzdGNEU5NjNGMzEpKDB4MTg0MThCMkU0NTZCMjJCMENDNzM3NjU2RTBDRTZEQzIzOTlCQUQ5RDQ5QzVGNkY4OUMyMDM3Mzc2NDczNTE0OCkpKCgweDFBMENEQTRFMzhCNDZBOTY3MkFGMzIyMTdBNEZCQkNFRERENDk0MDlCOEM4QUNDNzcwOUMzOEE3MzdGOTcyQzIpKDB4MUExRUE3Qzk4NDk0Q0MxMjI3N0Y0MzhEMEI2QkFGNDAxRURFMENGQUNFQzYwODI0QjhCMkMyM0REMjY4NDBGOSkpKCgweDNBMjcyMDQ3MzVCOEY5NkM4RDdDMUYxNjdGMjU2Qzc1RkY4REJERUZDMkJGMDMyRUExRjg1NERCNDE0MEMzMUIpKDB4MkU3MDZGREQyOUMyOTY1NUFDRTU3RDg2MDEzNThEQjIwNEVDNEJCOTMxNUMxMDk5MTA3OEQ3OTk5MzdBODUzNykpKCgweDMzQkU0QjMxM0RGM0NCRkZBNzRGNDZEMDEwQzZBRTkwQjY1MkQ5RkZCNEEzMUQzRkVFMDk2NjlCMEU3MzFDMDApKDB4M0I3NjMyRDlBMDIzQTc1NjNFRDlDNTVEMDU5MDY2MzRFQzc5RUE1QkM2QzUzQ0Q1QkEwQ0Q0MUQzNkE0NkM0MykpKCgweDIwNDEwN0QxMzNEQzUwM0U3QzM4MTI1RDVEOUE1QTUwQ0ZBM0IxMDJBMzJFMTE5OUQ2NjVBQ0UxQjZBRDNBQjgpKDB4MjkyOEQxOTRFNDU3MkMzRTM1QTVCOEU0NTA2RTExQjlEMTE2OEM3NUJBREZENzYwQkEyNDg4NTA0NEJENEI5QikpKCgweDE4RDdBNEFGMjIyRkZENEU0RjVCOEE5MjA2MkFBNjNEMDRGNjM2RTc1OEI4N0RGNjM2OTFDMjc1QjYwNUQ3MTQpKDB4MTM0NTExOUFBQzAxM0JCNUVBMDg5QjIyOUI5ODc3QjRENjNEQzE4Qzg4MTBDOEM1MDc5NDA4ODM1NzM3NTJFMSkpKCgweDM0QTIyNjAyQjREQkRDN0M3QkYxNDAzMDIzQjcyRkI3ODM2MjhERjdFMjAzOEE5MzYyMUY2NjEwREI0RDMyMkMpKDB4MkREQkE5MTUxRUJBNkRBN0I5QTE0NzY2NzZEMEQ3OUVDQUZBMEJEMUZEQzY5RUUwODE0QkU5NUI0QUM5Rjg0MykpKCgweDI2MUM1RDU3OUE4RjY4RUQwODkyMkM5MEVBQkFGNTIxQjQ3MDBCNUY5NzAwNkQzQjczNzk5MjVGMTY2REZGQkQpKDB4MkE1MTlGMDUwQUJBMEQ0QzQyN0E0MjFDMUQ5RDlCNjRDMTk3OUU4MzU0RUFERkFCNkVBRTA5NjE1NkVENzVENykpKCgweDJFRkI3NDdBMzhGRDk0NTI5RjYxQTI3QjcwNzE2RTYxQzA0MzM1MTJGNjhFQUYwNjk3QTM4RDUxNjA5RUMwMkEpKDB4M0JFQUFFRDEwMEI0MUU1NkQ4Q0JGMUIxNzIxMzEyMjQ3NTVFNENFNDk3QzNBOUJGMjBBMTExRDk4NDI2NkYzMCkpKCgweDM4MjQxNTY1OThEOEQ4NDIyOEQwNzFCQTU2OTQyRDc0MjE4ODg5NDYyRUQ1NDE1N0Y3NjdDMjM5N0E3NDMzQUQpKDB4MEUzOTRERjNEQTQwMjBERjM5MDUzOUY2MjQ4MjgzMDE2NDY2QUE2OUIwMTVDOURBMEZGOTExRDk3QzA5OTUyMCkpKCgweDA2OUYzNzM3NTc2NjdDMEM5QzcxNTBFMzNCQjgwNTNEODk3QkUzNzExRjUxRjhGMUIyNTU5RURGRTYzRjVFRkUpKDB4MjBCNjY4M0VEQTFGMzJFNDA2Rjg5NjI0MUYzQTUzMzBFM0EwNDU3RDMzN0JFMzQxNjg1QjM5ODBGN0U2OUNGQSkpKCgweDFBQ0VDNkFDRkMwMTZFNzIwMDE3NDZBN0E1RTlGNzNFNzlFQkUwNTJEMUQ5NjkxQkIwOEZDOEY3RDYwNEJENzEpKDB4M0ExRkE4OTlFRDE0OUU0ODA1OTYwMDYwQzNCMEU5MjIyQUQ5RDdCNkM1QkE3NkU1QzlCNTk2NkY1MjQ5MEQzNSkpKCgweDFBNUI1MTBDQ0E2MzJENUQxMDZEOEIzMENFQUI0Mzc5NkJDRTA2OTI1MzFDNUMwMjdDQ0M2REI1RjNBQjAzRjUpKDB4MDE3NzY3NjQ3QTBFMjY4N0RERDQ5RTVFMzc2MUNBMTMxQURFQ0U5MTZFRTQ0NjE2MEZFMUUzQUU2QjE0RTQwMykpKCgweDI0REQ5RTBGQjNBMjFEM0ZBMUM5NUEwRDg4NUY2RjM0NDRFQjk0Q0RENzZERkQ2OTY0NTM2QzFGNEJBQzYxRDQpKDB4MUNERTA1RkM3M0NDRDJDQzNFOTI2NDNCOTNGODhGMzk0RjQwREMzMzgxRjgzNDQyNTZBQzRFMTQyMkZFRjk3OSkpKSkoeigoMHgzMDJBOTVFNEUwN0Q0OURCRjUxQTY5MkMyMDIzQjVFOUY5QjFEMjE2Q0NFNDZCREQ4N0Y2NUE2REQzMzc5MDE5KSgweDFDRjBFNjQ3MDczREU5NUI3NTBBMjk5RDEzN0RGNEQxQzkwNkVENUIzMzE0MkFBNkVBNzlBQUFDQUY5Q0Y4NEQpKSkocygoKDB4M0NDQzQxOUM3RDZCNTU4Nzc3QkE2MTQ4QjU2MEQ1MTBFN0RDNTRDNTRGRjU3MUZCRDg4NjQwMDY2NDIzRURCQikoMHgyNDRDODdCOEQzRDQ1RTMwNzMxQTk0RjQ4MDZGQzM4NzU1NEE5NDE5MURGNTg0MUIzQUZDREEwNzIxMUY5N0JGKSkoKDB4MUJBODVDNEJGNDY4NTgwMjZGQzAxQURERDY4MzA1Mzk1QkMxMUUzOEE0OTFBRkQ5OTc0RTYxQjczMzAwMUM4QykoMHgxNDYwNDVBQ0Q2Nzg4MkFEOTVFNDQwOTE0NDkyQTg3RTBGRThCODA0MTlBQzk0NzU2QjA3QTk3MEM5MjE3OTlCKSkoKDB4MjBGMjFBNjhCQ0FCMTE5M0FGNzhDMkQ0QUU3QTg1NUE0NTQ5RjA5MDQwMTUyMjk5QTU3RDE2REQ0NzQ0NjY5MCkoMHgyNDAyQjg1MzAwRjIyNkE1M0NDNjRCRTQzMTk1Qzc2MjcxODZFM0U3RjNDOEE4OUMzMjAxRjVDMjQ4QkYyNjMwKSkoKDB4M0JEMTUxMTdCQjg1NzcyQjVFRDg4RjhGQzI2OEM5NkY1RDAxNEE5NTJFQUM0RDQ2QzczRjk3RUZCRkIyMzBFMykoMHgwRjdDM0U5MkZGRUU5NkY5RDRGQTYxRTQ0QTNFMjNCM0FCRUEyQjMwRDExQTlBN0IyNTEzNTNBRkVGNDhENzk1KSkoKDB4MTZDM0NENTc5NEMwNzU2NTgxNkMzODYxRDIwQTNEMzk0NEEwNEYyOEU2RkVBMUU2QTJEN0MwOEFCRjc1OTAxMCkoMHgxOTFEQjAxMUI4NDAwMTJFMTdEOTM2RjRFRUU4MTNBMDkzODJCOTM1MDUyRUIzRjY2NzU2REEyMUM0Q0U1QTE5KSkoKDB4MDYxRjgyMUNBQThBMTY4QjIzRTQxNjMyODczNzY1MEU1REFGN0VFMzVEQzRDQjI4MzZDNTc3NUI0RTRENzJEMykoMHgxM0MyQzQ0Q0UxQjA4QUE3Q0I1RkEzRDU5M0MzMEZCREJEREI4NzU4MDcxNzdCOTA4RTM3NDAzNzk0QkRDRkI2KSkpKShnZW5lcmljX3NlbGVjdG9yKCgweDM4RjcyMTI2RTcwOTc5OTRFRTc4NTdDNTFGQTFERURDNEMyOEZFNDM5NUEwQTkzQzU1MkNCNzk4RjNFMkIyMUEpKDB4MURGQTUyMkQyQjBDMEZFQjRDQjBGRTE0NUU4RDFFREEwQUUyNkM1QjZFQTg5OTM1RTcyNkMxNTIwQTdFMEE0NSkpKShwb3NlaWRvbl9zZWxlY3RvcigoMHgzNDI2OUU1REM5M0VFNDk1QjQ2RTEzNjYxNkRDQzU4MDk0RTc3MjA1NTg3RTFDOTZBN0IwNTIzNDM3MDA3QUI5KSgweDBFRkIzMTFGQUVDMkVFRUQ2QzExMTM4RkE0RTkzRkUzQkU0NDIxMDJCNEREOEFBQjBGM0VGMUMyMUVGOUNFNzcpKSkoY29tcGxldGVfYWRkX3NlbGVjdG9yKCgweDIyNkZFRUFEM0Y0OTI0MTQwQzhCNTkwNjk4RkE3QjNENUQ1NENGNDJFRDRBOUM2Mzc4Njk3QTU1NDczREY5QkYpKDB4MTc4NThERUQzOTc0MTYzOUM3QzUwRjZGNDI3OThENzg3QTVGRjU3NUY0Mjc0QjU3QUQ5MkU3MjBCMkQ0NzkyQikpKShtdWxfc2VsZWN0b3IoKDB4MkZCNDg2QTRFQTZGQUNDOEU5RkQ4RUNFRUIzMUZBN0U1M0ExQzJENEU0RUJFOTg5RjA5QkI5QzMyOTYwOTIxMSkoMHgzNzIxMjAyNTBBRUVGNDk1MUE0QkNBNjZFRDVEQUI3MkRBQjY0NjFCREU2NUIxRTQ2MUYyNTYzNUE4ODRFMDMzKSkpKGVtdWxfc2VsZWN0b3IoKDB4MEI2RDFEQ0ZBMDAwQTM0NDQyMThDMDRGRjExRDg1RUYwRDdDOEE1RkVERjA4RDBGMzEzMjhDMENFMDZENkFDMSkoMHgwRjBCRUQ5NUQ2RTIyNzJFRjczNzIxNzczRDEzRTFEMzYwNTdBMUIzQzhDNjVFRkQ4MDMwRUVEMDA5Q0E0N0E0KSkpKGVuZG9tdWxfc2NhbGFyX3NlbGVjdG9yKCgweDI4MTM3NEMzMThENjIwOEMzNDkwNzAyRjUyMDNGNUE1QzFBOTE0M0FDQThDMDgxMDA0OUIzQUMxNjRFNjlGQkMpKDB4MEI0RUJGQjVCOTc3MDg1MTJEOTkzQkVCOTY5NTMwRUIxQzJEN0M0QzkyNzBBQ0ZENzJEMjk0MkIyM0FENkE4RSkpKShyYW5nZV9jaGVjazBfc2VsZWN0b3IoKSkocmFuZ2VfY2hlY2sxX3NlbGVjdG9yKCkpKGZvcmVpZ25fZmllbGRfYWRkX3NlbGVjdG9yKCkpKGZvcmVpZ25fZmllbGRfbXVsX3NlbGVjdG9yKCkpKHhvcl9zZWxlY3RvcigpKShyb3Rfc2VsZWN0b3IoKSkobG9va3VwX2FnZ3JlZ2F0aW9uKCkpKGxvb2t1cF90YWJsZSgpKShsb29rdXBfc29ydGVkKCgpKCkoKSgpKCkpKShydW50aW1lX2xvb2t1cF90YWJsZSgpKShydW50aW1lX2xvb2t1cF90YWJsZV9zZWxlY3RvcigpKSh4b3JfbG9va3VwX3NlbGVjdG9yKCkpKGxvb2t1cF9nYXRlX2xvb2t1cF9zZWxlY3RvcigpKShyYW5nZV9jaGVja19sb29rdXBfc2VsZWN0b3IoKSkoZm9yZWlnbl9maWVsZF9tdWxfbG9va3VwX3NlbGVjdG9yKCkpKSkpKShmdF9ldmFsMSAweDA4NjdDREQxOUI0NDBBMDlFMERFRkEyOUU1N0U1OUFCNUYyQjYyQjkxRkU5REEyOUE2NzIyQTM2NTk3RDlEODYpKSkocHJvb2YoKGNvbW1pdG1lbnRzKCh3X2NvbW0oKDB4MjlDNTQzOUFDMjE5RTU2REIxMkFBNDc2QjM5NjUzNzU4Q0Y2MUU1OENBMEJDN0I1REIwMDg0NDJDNUVCNDJDNCAweDA4QTkzMUM1NkI1M0FGRTRGRDRBMjE4QUMwRjQ4RTgyNzdCMTEzQTIwQjQ5NTE4QjIwMEQxNkYzOUIxNTNBREEpKDB4M0ExMTNEMjAxQzE2RDBDRDExNjBFMTkxQUY4NDg1MjEzNkNERTc0QzAxNUREOTUxNEYyRDk3NDg0QzM1NDczOSAweDA0NkIyNDRBQzQ1MkY2QjM3Q0Y3NzNDRjExNUUyODVDQzI2M0QxRThGMzYzQUREOTlCMDdENkZCN0FDMDgyNUEpKDB4MEMxN0E1RjA5MDAwNEQxODdFOUNDM0RDQUQxNzRFOTI4NDc1QzM0RDU2NUI1QkMyQUYxMjcwQTI2QjFBMDJGQiAweDNFNzUxRUMyNzFBNzMwMzYyMUMzOTNBODEyNzU4RTRFQkUwRkM5OEQ0MTc2NDNFRjg0MjczNEYzMUQ3ODdDM0QpKDB4MjdEQkE1RUQyNzE5OEQwNzNFNTUyRkI3QTI0RDIzQzE2RTczRjJFQzM4Q0JCNzBDMEMyNzIyOTcxN0I3QTNBNiAweDJFMjQ0MEI0RTE0OTFGNjVCOTFCQTNEN0I1QzYwQzBGREEyQkRFRjU4MDcwM0FCQzQzQkVDRTkyMUFDQTRCNzkpKDB4MUY0QTU1MDdDNkM2MTI0QjU5NDQwNENBREQyNzkxOEFFQjRCQzQxMzEzQzkzMjY2Q0IyQjlCQTIyRjdEMjY2MyAweDE5QjZDOUFEODhCN0Q0OUI5ODYxMEE0MDNCOTIyREM5MUE5N0RBOUIzMzNDRjFGOTE3QTdBMTdFOTZCNUI4RjIpKDB4MDE4OTk5MTk1NzI3OUU0NDQ5RkYzQzdCMzhEQzY2N0RBRjhFOUIwNDM3MzEwQzJBRThBMTkwRjJEQzM3QTMzNiAweDA1NTQ4QjU0M0UyOTBFRDIzRjczOEUxMThGRjk5OEM5RTcwMThBNTFDMjREOTkzNDI2QUY4MTVEOTQ1RTU4QUMpKDB4MTU5MDYzQzUzMTk3NkQ1RTA4MjRGRjM1MjVFMEVDMjhDRkJBQjUxNzZBNUVGQzdBNjIzOENDMkY2NTE4NkQ4RCAweDFDMDZEMTI0NkM2RkM0OTEyODgxMTdDNDc0OTNGMTY5MUQ0MUYzMkJCQzk4NEI3MkQzMTA3QkRFODc1NEEzQjcpKDB4MjlEQUYyM0MyMTU4REY2MkRBQzBCQUZFRkM1MEJDMjQxQzJENDRFOEVDRUY4QUE2MEZBOEY3RjgwQTg3Q0UyRiAweDFFMEUyNDhERkJBRTQzNjAzOTlEMUJERDEyMEJDNzFEQ0NFNzI2MkE1OUU3NDRERTlCRDg1Nzc5RkNBMDM3M0UpKDB4MDM2MTg1M0U5NkFCRkMyRTEwMkJDODIxRjc3MTNCREEyNUUyQTg5OUNCNEQ5MUZFMEZFMUVFQTY5QjU5MDJEQiAweDM3MEJFRjdFMDlDMzhCQzZDNENGN0NBNzA2MzRCRENEOTdBNzZFQTNEQzkzOTA5OUM3RDJEMjBFNDU3MzdGRjMpKDB4M0U3NDc5QUU3NzZCOUY3ODM1MDVDQTNENDRGNjk4NEM2Q0ZFN0YyNURGNDdGMTNCRDQzMjA0NzUyQUU2OUU3MyAweDFEQUFBOEQ0M0NENEYzODI3RjU5MENDRjA3OTYxNzRFRDA3RURCRjI5RkM5N0ZBQTU2QjA1MjZCQjAxMTk2QzIpKDB4MkNEOTUyMEIwQThFQTM4RTdGQTgyQzVBMkEyREI4MTQ5QzkwNTc1NTc3QkY0REU1OUZFNTQ1N0UyOThBMjgxOCAweDE0RkM5MTJBRjgzOERGQTRCM0I5REQyN0FFMEU1QzcxMzU5MDdBMEZFODkzNDNFNDE0RjU4NTEwMzE5OTgxMjIpKDB4MDUxQTBBQ0UwM0EzMUQ2NDg3RjhGMzA1QUZDMjA0NjI1NzQ0NTVCQTNDNUQyQkExNzAwNjk4QkQ0MTdFMTBDNCAweDE1OENBOURDODJGN0VCOURDOEI5NzM3QjhGNDVCQURGMTQ3OTU5MkZDMTczMDM0QTY3OTZEQkJBOUZGRjQ2MDQpKDB4MzJDMzcyODlFODZGNjlEREQxOENFRDFDQzFBMTMxMDJBMzZBODJCQjRDOUQwQjAzMEU3MDVDREUzQzlDOTZENyAweDE4QzZBRENGODE3QjcyM0VDREI2RjgwRTVBRUVDNkU0MEQxQTk2RTlFMTJDNjIzQjlCN0JDQ0NFODcxMEIwOUYpKDB4MDlFMTBFRjJEQTQ1NDlDM0JDMjJFMzc0NkVDNThEMTY4QzBDNTBBMjUzMTQxQkMzQjcyM0E5MTg3Mjk3RUUxQiAweDFGOUNDQjU1QTVBODdCQTk0MzQ4OUYzRDY0MTY4NThBM0Y0RTZGQzdBNDM0NEE1MDU5N0EwRTQxRkZFQTgyNEUpKDB4MkY5NEIzQjc2RUJCNTA2ODMzMjQ2MjA4MTczNjhEQTU4MjY4N0QxNjZCMThGOTJDMzg2Mjg3RUJCQjAxQ0ZEQiAweDAwRDdCMDcyQ0I0RDhERDA2NTM4NEI4QzE5NzNDRTIzRkQ4NDU4RDZBMDIxNjg5MDE1RTQxNUUwM0NDRTdFRDgpKSkoel9jb21tKDB4MTYxM0E3NUIxRTU4MjVBQzQ3RjM0NzVGMjE2NkUyMEUzRkFEMzc0QTA1Q0QxNThFMzg4QzRDNUM2NUM4Q0VCMyAweDI5MjMyQjk5MDAyRUZDMkQ3QzQ2OUYwNjgyM0QyQjFBNjA4NjJBRTcwMUNDOTE1NTc0M0FBQ0RFOUU4Qjk4N0EpKSh0X2NvbW0oKDB4MkY2QkU0ODNDNTUyMjg4Mjk5RTQ0NDcxMUNBMDJGRTdGNTZCRjJEQjZFRUZGRTFGMjhFODJFOTNENzc4OERFQyAweDJFNDZDMTQyOTY5MjQwMjE1RURGRUNFNzJBRDRGRDE3RTQ5MjFFM0RENDFENUEwREQxOTI1RUU1MkU3Nzc3OTMpKDB4Mzc0M0ZGNjBBOTk4MjJGRTZFMEYyNDBBMjFFRDcxMjZEM0I3RkUxOEQwNkZFQ0MzQkE4MjZBOEExQThFODkwMiAweDJCQURBNzRBNTk4MURGMEM4QTVCRTA2QkNBOTQwMkMyMDJCNzUzODBFOUUwREUxRDE0QzU0RUNCMjhGMjM3OEIpKDB4MDhFMDI5MDM5NkZBQjgwMzU5MUMwRUU4QTlFRkI3RjEyOUFCODdBN0M5QjI5QkM2QjFBRTc0QkE0QURBQkVGOSAweDM3NTYxNjUwMzVDOTY3MjdGOUNBMUUwQjExMjRCQ0ZGMjc1QzUyOENFMUNEN0I2ODAxM0VDNTFGQTEyMzlFNUQpKDB4MjA3MjUxOUYxQjMyRDdERjU2QTQ3ODZGOTQ0NkUxQkVBMEM2RTQ2Qzc1Mzg3RUI4QjE1RDQyMDE3Njk2MkUyMCAweDI5REFGODFFREFGQjk3MzIwOUUwRTk2NjhDRjIwNzk1MDE0Qzg3QkJEN0I2NjdBQjZGQzczOEZBMjVFN0FDNEEpKDB4MTcwMjk2NDRFMEI1QjIwNzIzRjc3QTYxN0UzMkIxQURGRTQ5Q0IwRkIyM0MzMEQyMUU1NUE3NTVDNkYzMjE4MiAweDMyOUFEMEU5RkY5NjdCQURDODBENjgxRkE0Qjg3MzhFODU2MjNDNzE0ODNFNkU4NDEwQjRCMjY1QkJCNkY3MkIpKDB4MzI1ODBGM0NCMDcyMUMwODU5QUY0OUFDQ0VGMjg2MzYxQkMxMjgxMEJCM0JGQzE3Q0EyRTNDOTk2NjFBMjZGRiAweDEwRDQyQUQ3M0EyMDk2NDM4OEM2N0VGRDBGREU3MUI0Qzg3RjVGNUFDOEU0N0FEM0ZBNEVGQzdEQTFBMDhBMDQpKDB4MjY3Q0YxODA2NDVCOENDRENFMUVENUM2NTYwMzE2NThEN0QxODBFQjQyREI1ODBDOTZFRkU0QjJCMzg3MkM3NCAweDI2RUYzN0NDRDNDRkFEMjJEN0M4NTY4RTIyMjA2QTc5NTI4QkFBODE3QjAxNDBCNTM1MDYzQjREQTYzRTEwQ0YpKSkpKShldmFsdWF0aW9ucygodygoMHgwNTcwQTA5MUVDMzZDMTRERTJDRUJEN0ExODRFMDM4OEEwMUE4QkYyQ0RBMjM1QzFGMzM1MjAxRTM5OTM3RTQ0IDB4MDI4QTNBRkQ4NjY5NjQ1OEQ5ODA2MzZCNUQ2NUI3ODkxRUJEOTRBMjk3ODFBNUY4OThCQzUwMEY2NDRFRjU2NykoMHgxOUVENUFGNDcxOUE1MjdDOEE0NjlBMkI4NkJDODIwNjUzN0YxQUZDMUUzNTIwODlENkVDMzkzRTkzNEU2NUUzIDB4MkVFNjQ1QUU4OUQwRjFFMzIwNTFFMzBGMzgwNDBCMDUyNTg3RDIyNUU4QzE0Q0M2RUVBRjRDMzM2NThFQkY2QSkoMHgxRTg0QUExMjBBMzZDRjk0ODhGNUM2QkQ0OEY0NDRDOTQ5MUZFRjlDMUExMjQyRTVDNDgwNTQ5QjhCMEYzODY3IDB4MDI0NjYzOTEyMThGMDJENEQ3MTM1NTlBODRGMjk5RDE1NTMxQjA3QkVBOEVFQTNDRUVDRjBFRkQ5RkMxODM1MSkoMHgyMjJGQzJERTAxQTU0QjU5NDdEQzRGNjA5RUZDNDUwMEZDODM3NjgzNzA2QUIxNDNGRjFGQzg2MjRERDVFRDQ0IDB4M0M3NTlGQkI3Q0Q5RjI3QjFENDVBQUZBODRERDY4M0FGMEMyMzRBOEREMDczNDhFRTkzMzczMTFCM0RGQUZBMikoMHgxMkNEREIzNDZDRTA5OEJGNTNDNzE0Nzc5NzMzQjdENjZGMUFFQzU4NTlBRkM2QkQ1RTY3MDU3NUEwRjIyNjUzIDB4MzNDNUVENDY5QkMxRDQxOTIxQzM3NTc4QjY2M0Y0MTU3QzIwODJENUY4RkMxQUEwQjdFMTBENDc2QjE0QzUyNikoMHgxNjJDQ0Y3QTM5ODg5QjQ1NDBERTYxQjdCMEUwNzcwQzE3ODE4QzNDRUY0RjZDQ0U2MzQ3OTEzRkM4RUU1MDcxIDB4MjMwM0IzOTQ0MkU3RDAxNkE1NzgxOURDRkNDQ0U0MzNBNzM2ODU0MkI4ODAyRDM1MkEwRTNDRDgzMjMwNkRBMCkoMHgwNDA4RTMwNTA5MzhGM0QyQUEzNTY2MDg5ODUzMzM3RkI0NTNENUNCQUJCMzVEQjY5NUMzQzIyMkU2MzJCNjk2IDB4Mzg5RUY2RTVCMjQxRjI0QTYxOEI5ODQ1RjlCRjZBOTg4OTE0RkJBQzIyNDM4N0ZDNDA5NzcwMjQ2REIwMTdBQykoMHgyQjE2RjQ1QkEwOTQ5QTAxM0I0RjI4REE4OEYyQkQxRjRERDAyOUM2QkY0RTIwOTcwNEYxMzNCQzAyNjI3MDNFIDB4MzA0RTZDNzhCNzI4QTQ5OTJEMTI2Rjk0OUM4NUUzRDFGRUU1QTQ2NThGMjA4NkM2NkMwNDJCNzc3NTY0QUM3NykoMHgwMTQ0RjE5REY5MTkzMDlBNDlBMDA3QTg0OEU5MDA4RTE2N0NGRTBDNzc2MzJEODdEQUZBRjMzMUNERTIzNzU1IDB4MkJBQzk0Nzk2Q0YzNEFGMzdCRjcxRjUzQzMyNzAxNTE3REVCREVCQUYzNUM4NUQ5NDg3MTI1MEI4RjFBOTdDOCkoMHgwQzMwRUY3MTk2RTRGNDY0Q0JBRjgwRDNFNjVBQkRFQzREQ0MxQ0ZFOUE2RjZDQjg1NUQ0NDg3MjBDQUUzQTBBIDB4MTE0QzQ3MDNDMjg5MTM4MUY2RURFMTlDQzExRjgyNDQwOEU2N0ZCMEEyNkE0MDNCNTM3RTc3NjdDNjU1NTUwRSkoMHgwNjEwNjZENjgyOEFDRTlBMzI4RDAzRTkyNkMxRThCNzg5QjE0ODBFMTM3RkVENUU5NjY0M0FEQjNDRDc1N0ZEIDB4MTYxRjY0RTVCMEFCMDJBMzIwNkMyNkE2QTk5RTYxODhENkFGOTQ1RDEwNEMyMTY4OUE3MDAxMjQ5NjQ3RjdEQikoMHgzRUY4MUEzQzkyMkM3NjRDRjU0RTgwRUFEOUMyNDVFRTQzNjFGOTQ3OUM0QUUwRjNDMEYzRDQ4MTFGQjU5OEVDIDB4M0RDQjlFMzAyRDNFOUQxMEMwN0I3NUQzRDM0OUJGQzQwREZGQzREQkQ4MzY2RjVEMjRBQUY5Q0JERTYxQkMzNCkoMHgxMEEwN0VERDM0RjcwODM0ODYwRTZGREQzNjdDMUNCNzhBMkNBNjUyNTZBMUJFREFBMDYxMkRFODhFQzZEQ0ZBIDB4MDJGMjk4NEM1RTRBNkVGMjVCMzA2RjJCNTUyRjI3NDY5NTc1QTUyNUQwMDVGQURFMDBDQTE0Njk5RDUxQUI5NCkoMHgxNjhDMjNDQUE0OEIzRDk5QTg3RTE0ODhGRTc0NDE2NzcyQ0JGNjlCNTczQjBGN0JEOEY3QUY2Mzk1REE3MzRCIDB4MTY5MTZCNzM0RDZERDc2RTg3MDhEMEJFMTg4Q0M2QjJFQzFCRTQwNUU0MzQzMEI2M0FBMzZDQkFGQ0NFRkEzNSkoMHgyQ0M1OEVDNjEzRjFFOTY5MjI5REJENDc2MTFDMUYwMzA4MUFFREQ5RDQ1Q0VGNTA3QURBQzI5MDFCRjVCQjgzIDB4MjdDODAyMzIwNEM4QkRCOTY5OTUzREQxM0QzQzhGN0I1QUREMEEwOUFFRjVFRDM5Qjg1RTFFODc1QTA3QUZCMSkpKShjb2VmZmljaWVudHMoKDB4MkVGNkZGRUVERDdFRDAzNDQ4NDYxRUE1MUU0OTc1MzREMzU3MEI3QTQ2NThGRTU3Mjc2Rjg1QkE3Q0I0QjhFNCAweDI1MEJBRDk3Rjg0NDc5Njc5RjIyODkzOTY4MkUxOUVCQjY2REU2OEQ2REJDRDk1QkRGQjU3NzgxM0NFMEVENUQpKDB4Mzc0QTkwODhGQkRGQTc0QTQ5NkI1QkU5QTQyMjcxNkQwMzAwMkE1Mjk1NEQ4NzRDQTg0QzJFNjg3RENCRDA3RSAweDAyQkQzNDJFRjMxMTgxRUM5OEEyMDUxMjhFRUNCRjEyNzdDNkQ5MzJGMjkyMURGNTc4QTcyQzZDRDM4MTVENEQpKDB4MUI3MTdEMkM5MUM1NjQ2MzFFRTgwQURGRTJBQTI0QUVCRkJGRkQ4RDNDNTYyRkI2NzZCQUIyQzg4NEIxRTExQiAweDM2QjA2NzhBQ0JBODJENUQ2MTUxMEIzMUY3QkI5NDBGOTI0QjBDQTE3N0NCQUMyNTMxOTFGRkZBQkI2RTdBNzcpKDB4MDgwNzAwNEREQjA2MDI2NThFQkNGQjVCQUNBMjlEMDkyMkRENkIzMjYzM0MxRDA4ODcxQkU3NUFFNzVEMUNDNCAweDAxNjREREI5Nzk2NjI1RDJGMDI1M0FCRjE0NzAxRDNFQUU0QTZENUM2OEFFRTM1QUNGQUEzRUIzMTE0QTFENzQpKDB4MzcwQzA4NUE4MUZBRjFFMTczNTg2RDAyQTVEOUU4QkI3RTYwQkU4REIwRTVEQzZCNTUwNDg3RTQwOUY5OUM2NyAweDBCQ0U2ODc3N0M2NzNEOEM0MEM2MTg1MTFCRTA1NTQ3QjMzQURFQjVENTRCMTExMTJDM0JDQTlEOUI1OEQ3QzkpKDB4MjlGMDgxRTkwQTUwM0RCRTA2MUVEMkEwNDgzRkIxM0UwRjA2NTA0RDA2MjBBMTU5Mjc5NDc1ODQ0NkM2NDkwQyAweDM4MzExMEU4MzdEODA4REZGRUY2RTJEODU3QTJFMTRERkZEODk3OEJCNTM1OEFBQTdDNEVCQTYwNTIyQzNDRjcpKDB4Mjg2NUM3MTY4OThFNkRCMEI0NTk5NDBDQUE3MkI5QTc5RTgyQkU1REMyNkJDNDk2ODMyM0E1NkQ3OUM3OTk5RSAweDIwNEUxMDZGNDg1RDIxOTlCMjUwNzU3RTY5M0REMkJCRTNFNjZFMDdBOTUwNDE4NjU4NDY1M0MyQjM5ODIyRTApKDB4MTREN0Q0MjU2NkM3RTI2NEUwNTFGOTVBNTZBRjk2RjBENTI0MDJDOURFNkNDODk2OUFCRTJENkM0RDVCOTc0MiAweDI1NzYwNURBNUExMTRFMzVFQTQ3QjVCOTBFRjA0QjZCQTA0ODZDRDVDOEQ2NkZENDMyQzJDRjRCQUE5MTc0NjEpKDB4MTBGNEYwQjI2NEQ2MjNGRDFERTgxOEEzOUE0NUJEQzc2RDA0MUNERTcwN0ZBNTk0QjU1MzMzRkQ3RDMwNTBCMiAweDFFQkQwMTIwREQwNTYzNDhEMUQ5Mjg5MzU5MjJENDQ5QTYzNzVFOUQ5NURFNThDQ0FBOEM5NTJFOEREOEIyN0UpKDB4MkI2ODYwOTAyNEJDNTE0RDRGNTMyRDBDQ0IzOEVDNTY5Q0QxQTZFQjRGOEZCMjE2ODI2QURGRUU3RTc5OTM2NiAweDFGQkRFNTE4MkQxRTExRTY2RERDODExOTE0M0Q4NjI0MURERTA4ODcxMUE3NjRDRjBDMzk0NTJCNjQ5MUM4RkYpKDB4MDNBMzRBQkNFQjJGQjM4QTc4QzQyRjRCNTE3RjU2M0RBRDE0N0U2RjQ3QkVBODNBNENBQjQwMDFCNUQ5NDI2QiAweDM4NDE2NkEzM0UyRDNEOTRBQzRBNTg2MzA5ODIwQ0I2QzU0N0UyOTNCNjVFQjlBMjYzRTVFOTg4N0QyNjhBQzMpKDB4MTVGNjQ4RjcxMDExMEJBMjczODk2QjAxRjdEQUZEQUMxOEJFNDcwQzNFN0NCNzhFQ0I4NzdDM0FBNDg3RTk1NyAweDI5Mjc5NTBEQ0IwNjhFMEE3NDI1RTBDNkE1RDlENDdEMjUyMDMyMDAxQ0FEMDI4ODNDNTE3MzYwQjNCNjMwQzkpKDB4MTM3NzEwRDUyRTVFMkNFQzZDN0U3QUU5QTMzODJBMEExM0JFNUNFQTc1M0U0M0FERDlFODY5NzU0RDQ4QkVDNCAweDA4NzJGOUMxRDcyODI4NDI5NzEzNDI4MzI1MjlGRUMyM0Q5QTIwQUY5NjdGRkI2QjQxQzIwMUUyQkNFRDg5NEYpKDB4MzFBOEU0NEJCNTBFNzcyRTIxQTc5QkJBMjc4QjQzQzQzRTk0N0NENjlFN0FGNjg2RTgyNzJGNUVGMEJCOEY4QyAweDFDOEVDM0YwQ0NDNTg5ODkzMjE4NTU2Q0VBQkFCRDVENENDMDgyOTQ5NzVEOEM0MzIzNDlEQTlGNjREQUQ0OUMpKDB4MjIzMTI2Q0YxQzUyOUYzQTg3RDI2NTk5QzMzMjJBQTYwNjRFQkJCMUZCODU5MjQ0Q0EyMzU5QjM0RkM3RDlBNyAweDEyMkQ3NkQwQ0FFNzRBQjZERkZDMzVFOTIxOTdEQUNFRjY1OUYxN0MyQkM0NkQwODBDQkU5RThENkYzQTRGRDMpKSkoeigweDIwMEE5RTQzQkE4MkM3OTQ5RTE3QjBBODczM0NBMTM3OUMyOEZFQTdGQTBBMTVEODMwQzlCMUFEMjNCQTI3QzYgMHgzMzg4QTgwMzQzNkQwQjVFQ0ZDOTFENjA0NDUwRjM5MjI1NDg1QUFBMzY2MkY1QjBBRUU0N0Q0QkY3REIzMDQ1KSkocygoMHgwNDQyQjgwMDhFQ0M1RjBDMUUyNjM0QTc1OTE4OTkwOTQyREE3MjIwREVCNUEwQkZDOEI1QThCQkY1Q0VBMEVCIDB4MTkxRDRBQ0FDOUU2NzgzRDZGNEJDOTA1RkMyMEQ1Q0UyODQ4QjI5NEYxODA5QTdBNDA5MTk4Mjc2MzM2RUVBNikoMHgyRDZBRTRBMTcyRERGMTI2M0MzMTdBNjM0RDg2RUZDNDM4OTA4QTlFQzBENkY3OUI4REVFNDM5ODZCRTkxQTE2IDB4MEIwNUJFRjA0OUIyM0Q4NkZBODIyNkVBNUU5QUMwNDdEQjYxQjYyRjQzM0Y3M0YxQUZBMzhGMDFBNkE1NEIyQykoMHgwMThFMUU5ODUyRjFCRkFGRDQ3MzUzMDE0NzkyMkM1MzhCQzU0Q0JCNEQ1RTY0OEZGN0RBQ0M5MTc5RUU2N0M4IDB4MEI1MDA3RkMxQzJBMTU5NDkyMkI3NTg1M0E5QzM4OEQ1MzI4OUE5RTkxRjRBOERBQTczQUY2MjczRDZDNDQ4NikoMHgwQzY3NDdEMjkwQjZEMUM1NEVEOEM0MjlBOTU5RkYyQTBDMUU3N0U4NEE2QTVFMDZDQTc3QzJDQzhDMjMxNzE3IDB4MTkxMDNGMjBCRTFDMTg4OEExNjhEREUxNTIyNjMzNzRGOTI5Nzc2MkQzRjI2NEFDMzc1Q0M4ODEyMUZEOUVDOSkoMHgxNDUxQkU2NjU5MTA4MkM5NUZDREM5NkZCNzMzRkExNUJGQUJFNjYyOTZBOEI5RUU3QzVFQjNDN0E1NkJEMTlBIDB4MjdFNzVDQzI3RDNBRjg4RUJCOTM3MUYwOEQzMTJDNjhENDNDRkQ3MTZFMkYyMjNDMDlDNUQ5QkY5QTlCOURBMSkoMHgxMTFCNTY5MEM4NjdEMDVCNEY4OTZDOEQyNTUwNDM3NUQzMkFGRTlDOUUxODNDMzYyMTlGMTNGMjJERUEzNTlDIDB4MTNDODQzRDY2NkYyRDU1QzE1MDNDN0VCNjQ1MjVBREMxRDUyMDFEMjg3QkM4NDQzNzQ1QkE5NUFCNjE1QkMwRSkpKShnZW5lcmljX3NlbGVjdG9yKDB4MDE5NzhCMkQ3NDdEM0JDRkRCM0RFOTFEQkI5NzQwMkM4QkEwQjcwNDczQTMzRkFEOTM5MDNBRkY0MzZEQUU4QyAweDFFQTFDQzNGOUZEODI3OTIwQkZBQTQwRThCOERFNzUzQ0FGRDQ1RDM2NEU4NDQ3RkM2MzQ0N0M0RkUwMEU4MjgpKShwb3NlaWRvbl9zZWxlY3RvcigweDBFRTRBNkMxQTM3OEY1RTYyRUUyQTNCNzU4QjFGMUUyODQyRENCODVDRDBBRjgyRTM2NzUxRjk5QjE1OTQ0RTMgMHgzMDM4NDRGRkQxQUY2RjU0RjExNEFCQTlGMjZBRDgwMzk5Q0YyQ0M4NDUyMDdFMTIzMUEyRUI5QjFBN0JGQ0MzKSkoY29tcGxldGVfYWRkX3NlbGVjdG9yKDB4MDgzMDVFNDM2RkY1RjJDNDA1Q0EzOTdFNDJFMjhFNEVDOEE5REMwMDY5ODY4NTE5RkQxM0YzN0QwNkZFRjQxNyAweDFDNkQ0RUFEN0VBQ0FCMEUxMzFBODAwMzQ1NzcyNTZEQTFFOTczMDIzN0ZBOTA4NERGRTY4OTg2QTNENzIyNDMpKShtdWxfc2VsZWN0b3IoMHgzREExQjYyNjM4OERCODVDNUIzRjJDMEM5QkI5MzYxQjBCRkQ1NTY1Q0Q1NzRENkNDQzg5NzFEQTA2M0E0QTc5IDB4MTUwQUExNzg1NkE2M0Y1QjFCODNBNTAxOEJFNTA0RDg0QzMxRjkxNDYyMjFCODE3OUU2MTNBQ0M3NDRCOUEwMSkpKGVtdWxfc2VsZWN0b3IoMHgxRjYxRDY3MDE3MzlBMDkyNTMwQjBFOEExMEYxQzE5NzM3MTAwODE3RDY0MDEzMTZCM0UwRTg1NkM3QTE2QTU5IDB4MkNBMThGRjJBOUU0RURGNDBBREQwQzAyN0YxMzZDMEMyMEVCMkNFNkNCOTBERjYwQUFDOEI3QjYwQUE5M0JDNikpKGVuZG9tdWxfc2NhbGFyX3NlbGVjdG9yKDB4MjgyN0NDNjk1M0YwOUYwMDM4QzUyM0M0ODcxQjIxMUQ4ODZERjA3OUNBRENFOTQzMzUxRTFGOTVFMUU1MzMwNCAweDM1MDQ1MThENEQzODQ1NkM5QjFDMjU3NDFDNjIxQUIwQkZCMTM2OUU4MDU3NDg0RTBCQ0VGOTgwRUM0MjBEMTcpKSkpKGZ0X2V2YWwxIDB4MzRENEExNjc3RjcxQjkxQzc5RkExNjNFQkMwNzA1RUUwQjZFMDAyNkVGOERFNkE4MDkyOTE0Nzg2ODgxMzA0NCkoYnVsbGV0cHJvb2YoKGxyKCgoMHgzRDhCOUE4MzhBNjlCNjNBQjg3NTMyNDQyNDUwNEI3QkQzNjBFQURCQzBBMTRBMDczMjM0QjVENUMwOEE1MkVDIDB4MTQ2NzdGM0FCRjg5NTRGRTI0NkREMzM5ODUwRTcyREZENTEzQjVCOUYwRTRCQzU2QTQ2RTQ2MUQ5NEIzOTAyMykoMHgwQjJGMUFDODEwMENGNUVCMEI4OERBRTNCOTc2MDBEQTA0MEExNjRENDY1NkRDNjZGNTNGNTVCOUUxQkVGRjQ2IDB4MUE0MEREQUQzQkI0MTc3OTFGRDczOUJCN0E4MzBDRDA0RkEzREJENTc3NkJBQUIzQzQ3OEYyNjIyRThGMjFEMikpKCgweDNFNTIxRTdENjA2RkM1MzIxNzc5NUQ3QzJCRUM1N0UyQkMyRDkwQjg1MzY2MjI4MEQxMTE0NDExN0ExNkVFNkQgMHgyN0Q4NDc3RUJFNkJFMDlCNTYyQUIxNUJGOEI3RUFFNzIyMzZDQzA1OTM3ODYyNTdEQTRFRDIyMjVBOUQwNUU5KSgweDE5RDk0OTIwMTcxRDA1OEEwMDdBNEIxNThCRjcwOUIwQ0NBOTMzRTFCOTAxODM3MzYzRkFDNzEzOEJBQ0U0N0MgMHgwOUZGMDg3OTBGNTQyRTYxMUI0MjBGNEY5OTBBM0Q4RDdDM0ExMEY5MjU0Njc0OTRDN0Q3RTQ2ODMxOTJDMTRFKSkoKDB4MDJGNjIyMUVENkNGQjQ2N0FGMDUxQkU3MDZEMTU3Q0ZGNEU2NEZEODQ0MTExQjYzQTBBNzk4RkUwMTBENTQwMyAweDEwMTIwOUZGMDkzN0ZEMDc5N0I1NDI1MkFGMjI5Mjc3NDY3MTgyN0EyQjREODU2RDIzOUZGRTg0M0IwNjgxRTcpKDB4MkExN0ZERjczQkMzNkQ3RDcyQ0E5OEQ5QjM1Njk5NTlEQkQ1MDMxRTk5RDE0NTFFQTFBODU0QjQ5Mzg5M0ZFRiAweDM1REQwRTYyRTgzNURGODFGRkU5NEM2ODEzMjcyMkRERjY2MkRFQjc4OEVBMTE5MkM4OURCQ0M5NjM1NjRFNjUpKSgoMHgyMzIwMTgzN0Q2MjVDNzVDNTM3REU1QTExMzI3NzBBRTUxQjAwM0FENjNFMjhGMTkxRTk2NDZGMzVEQkRGOTA3IDB4MkExQUQ5QTQxNjgxRTM2NUUzQTU1MkQ3NTVBQkY2MjA0NkY1MUQ3OEU1NzU4QkZFNTBFQzI0RjE2NjYxNzkxQSkoMHgzQjI5OTBGNDBFNTNEQUU0QjU2RkQxQkIxNTg0NTNGOUUzQkRDQTU1RjQzRkNDNzhBMkRENTIyNDQ1OTI2NjVDIDB4MDhBOEZBNENFODE1OEQ0NTdEOEJGMUEyMUQzOEY0QzQzOTEwREUwNjAzRjlGNjU4NjA4MUE5NjQ0RkUzNEI2NCkpKCgweDMxN0RGNjE4NUUwRjg4QzlBMDBCQ0Y3QjJDNDFENTU1MjA4MTA3MzRDRUEzMzY3NjgzMDhGNkE3RjdDMkNBOUEgMHgwMjIxQjcwMkE3NkFFOEI0OUY0MjM5Qjg2QUJBRUVDRkYxNzFCM0MxRTc0MkM1NDVCNTg1M0NGMkVCMjRENEREKSgweDMzNUI0MzRFOTFFQkJGOTNCOThEQTBDM0M2MEQ4RTY3RDdCQzM5RjBCMDEzMEY4QkEyREY1NUVDODlGQTFDMEMgMHgxN0QwQkRERTFFNjEyQUMzMUREQ0EzOTRFRTRCRjFFOUNCNUYwNTg3MTg3OTZGMjJCOUY4QUJFOUZGMUE5NkQ4KSkoKDB4MzZDRTJCRkE1MzJGM0E3NkYyQzM1M0NGMTA5MzAxOUIwRjJGMjFDQ0RDNzdGN0QxQ0NFOTI2MUNBRUZBODE1NSAweDBDNTUyQkE3NkNCRTU1NkQ5MEE2MjQ1MjU2ODcxNzk4MzcxNzZCNkVDMzQxMDA1QkUyMjNDQjc2MUQzNzZDMUMpKDB4MDJDMTRGMDM0NDc1OURFQUVDMjIwRDE4QjhGMkYxMzc5Mjk3QjU4NEU5MjdFM0FGOEYxNUJCMDE2Qjk3NjA1RCAweDMwMEUxRUNDRDM1RERBMUI1Qzg0NUYxMkZBNDU3MEMwM0YyM0JBQTczNUQzMTczOEU3MDg4MDkwMUFDNDBDMzgpKSgoMHgzRjBFNUNGMjRCNEM0RkY2MDIzNzc3RDAyMTQ0MjQ5MEEyMDcwQjNEQ0RDQkNENDZENjk0QUZGNTdDNUQzMTRFIDB4MjM0NDJGM0Y0MjQwRThGREI3NjZDMjJGMjdFREYxNDlDOUQ5QUE5MzkzRDlEOUI2ODRFNDc1QjU1QjhFOUNBOSkoMHgwNkEyQzJFMDcyRTdBQUU5MDA1OUE5ODE4MEM5Nzc2MTRDOTdGMDRERjcwNzBDREU1NjA2MEZBNUYyRDIzMjgyIDB4M0I5MUMxNUUxM0Q4MDMzRjU3QTJFOEE2OUE4QzVEQ0Q5QzZGMTJFRUZDOEVENEE0MTY3OUI4NDgzQjZDMkRCQykpKCgweDA0NjYwNUNDQTY3RTNGNTNEMjNCQjRCNTM0N0RDRDJGREYzMzI4NzBEMzk5Q0M2MzU1MjQwNjI4QzE3NDg1NjcgMHgyRDRDRTlEMjM1RTI2ODEzQzY4QUI2NTQ0NzQ3QkE1MjQ5MEQ4NTc5QTUyRDkxMjI0NzU3OTg1MUY4RThCQTBGKSgweDE5NDMwRjM0OTgzQ0M5OTY2OTYzNTQ0QTAzNEE0QzM2RkE2MDg0MzRBQkM2Q0E1Q0E0RDY3MjkyODM3QUU2NjQgMHgwNkE4QTU1QkJBM0E4NkI2MkMzRThBNTlGODIyN0FDRkQ4NjU3NjEyMDY2RTk2RUQ5RkIzQzhFQ0NEMjMyQjIxKSkoKDB4MDFENTk5NjhCMTQ3REU0QjlFN0ZBMjA1MjYyRjg1MzA4Qjg0MjZBM0FBRjA0NzE3OEI0OEZEOTc0MjIzNTAyOCAweDIxM0Y4OTQ0RTJEMDdEMkE0MkVDRDlFRTdDNzgyRjFENkQzRTlGRTk4OEY0NTAyMEVDQUE5OTQ2NTgwRDE3MEQpKDB4MDBFMzVFNjEwQzczOENGOTgxM0MxRjMyRDlFMDc4MzQyRkY5NkEzMUNEMkMzMkQwQkVDNEY0RUExQTY0NERBMCAweDFBQjQ4NkU0NEMyNDgyQ0QxQUU5RUMwNEE3QzNBNjg2RTgxQ0NCRDQ5NEI4RkY1OTQ3OTdGNUM5OTY4NDIxRjUpKSgoMHgwNjA2RjBGQTU0REFEMTAxNEE1QzY0NjEwMkRENkVDQkFBQTE3MkUxRkE2QzI5RjM3QTk0Nzk4NkJCQjIwQTE3IDB4MDhGMkRGODc2M0E5ODEwMzVDRjZGQTgyNDI1NDIwODMxMjhGN0E0M0EyMUNFOEVEQUVBMkYwQjg5QjFDQkQ2MSkoMHgwMzZDMDE3MTYwOTE5REE2QjgyQjQzODE0MzI4QTIzMjA3NjlERjBDRkE4OENGMEQ5QTU4MDJFNTUzNTc5NEU2IDB4MkU3OEIzRDFGRjkzN0FGMUVENTE1QzAwMTBGMUU1QkU1NDQzOEJFNzNDRTc1OURCQkNCRTg4MTFBODdDRjJCOCkpKCgweDA3RUY0MTIzNzhDNjE0OEE0NDMxNjcwQTE3MTQ5RUREMDNCOEM0QkI5OUY5MTJBMTIwOUY4RkU5MTM4OTdBOEIgMHgxMTczNjBGNTM5QzdCNTE1NTY1RDQxNTU3OTU5OTNCRTQyN0VGNDFFNUU2RTU1NTM4MjVFRTkxMkUyNDlDQ0U1KSgweDIzQThBMTRGMDFFQkRFQTk1RkFFNjA3MkMzNkI3QkJCODdFOEMxQzhBRDVGNzczMjg2NjhBNDNFNTdCM0MwMzUgMHgzMDU5NTQ5NjE1NkNEQkExNjI2MzMxQ0U4RThBQTFFOTgwQkY4MDk5RkVCMjBCNzUwNEYwMDZFMTA5RjRCRjEwKSkoKDB4MUIwODFENTcxNTMzOTBCRDNFNzA2OENDOThCNTRGOEFCODY3NzRGNDg2NDkzOUI1MDlGNUIyRjczOTg1N0M3OSAweDE4REJGNzBDNTlGNTNBRTRCRTY3RDczMEYxMjVDNzc5N0I2NTFFRkQ1N0IyRkZBMEU1MzA2MkE5QzVFMEQ0M0IpKDB4MDcyNjYxMDEzRUFEMjAxMzQwRTYzREEzQ0RBRkRGMDk1NjQ4OTk5MURCODU0MDcwQTFBMEQ4NDFCRTk2RjdEMCAweDMwOERBMUMzOUFDODNCOUM4MDIwQTNGMDU4OTk5QzQ4NjQ3MDEzNUM5QTU3RDcyMjlGNkVBNzJBRDZEQkI1NUQpKSgoMHgxOTQ3NTg5QTUxNTA4MjNENjAyOEM1MjkwMkEwRTE4NzlEMDQwOTUyMDlDRUY0Q0Q3Q0JCQzExN0VBMTRCMUIzIDB4MTlEQzgzNEU5REY2M0NDOTI1OTMyODc1Q0I5OEFGNEM1RTZGMTY5MTMzRjdGNzUwODgzRjIwNjMzQzlFNzg5QikoMHgyQ0JDRUNFQjQ3MkUyRjhFNkMzQzM0Njg0OUNGNzZBN0YyNUI5ODdCREZEQjhEMDRBNEQyRjFENkYzM0E5Q0RDIDB4MjhDRjFDNUYwQzBFODFEOTE5QkMyQTJFQTU4N0YyODMzMDU3NEJDNzhGODEyM0E1NzM2MkZBRjZFOUVCRUZBRCkpKCgweDM3ODc3MzI4NkU4OEUwRTM4ODI5MDc3NTdERkU5NEVGMzQyMzRGMzQwODc5RjA1QkQzRjFGNkMwOEU4MzdEMTEgMHgwNjNFRkQ1MEZDQTMwMzA0QUVFMzUzRjFDQUZCMjE1OTA0NTI5N0U0MUZDNDhBN0QwMzRGMzUxMUMyNjczQTVFKSgweDE0QjhCQUNCMTM4RjRERDE5QzY3RDE2MDg4QzI0MTY3OUU0QTUwNUExRkFEMTIzREZCRTU1QzAwRjhERDY4NDIgMHgzQjQyNzZFQzBBRDFDRjdFODFDMzg5MDJBQzU5RDBEMTMyRkMwQzM0QTIxNkYxMTc2NjIwMTE4REI5NzZEREEzKSkoKDB4M0YxMzU5ODdDQkJDOThEMDEwMUJGOEE0NEQ4OUU3NkQ0NEU5NkYzMjQzNDI1NTgxMTM0NEFENTlCQTkyRjc1NyAweDBFRTU4RUNCRUIxMkJDQjA3QzQ5MTE0ODZGRjA3QkM4RTc2REMzMEFCQjJDMjg1Q0U2MUFGNkFFRjNERDU0OEUpKDB4MkQzMzFCNjFFMDQ2MDhFNDQxRDc1MDFEOTA1QUVFQzI5QUFCOTMzMjE5Q0YzNDMyMTNCMUREQTYwMEQzODQwRCAweDE0NEIwMThDMUVEMDdFMEQwRkJGNDc2MDhEMkQ1NTE4RDZGQUQ1OTcxNkNEMDIwNjU5ODdFNkI3NEI2NUQwNUUpKSkpKHpfMSAweDNFQTI3RTdGREQxNUUwN0QxMTc0MzZFNDI3QzY5NThBRDhEQzk2Njk4NDM0ODdEMTE0QjI1MzVDRjA3NEVGQUIpKHpfMiAweDA0QjBGRTcwQTQxNEFCNzZGNUI2QUUyODRDRTkzRDI3ODg3RDQ4M0ZBODNBNTEyRjJFREZFQTgxMUZCOEQ0RDYpKGRlbHRhKDB4MEYxODg2REIzMjc0RDE2QkY2MTFCN0RDMTkyNzVCRTgyOUZCNDI0OTM1QkFDMzRCNDk5NEM2OTIwNjA1OERCOSAweDNEMzJEMjQ5NUVDMURENjlGOTIyMEZGOUIyNzVEMTM3NzA1MkMwQjA2M0E1RDQxNUQwQzBGQUQzN0ExMzRGRkEpKShjaGFsbGVuZ2VfcG9seW5vbWlhbF9jb21taXRtZW50KDB4MDFDMEI0OTg0M0NGRkRDQkMzN0NGMjQ5NEE1RTRDMEFENTBEM0QwRjM5NjAxNUExM0E5MDkyQzU5QTZBRDUxNiAweDA5OTBCNjM2NjVENjFDNEEzRDQwOTY0QUJBMEUwNDkyQUU1QzdENzMzNjRDOENCOTc4ODMxNERFNUJEOEZBRUQpKSkpKSkp', +}; + +describe('Verifying a cached proof', () => { + it('should verify a proof', async () => { + const valid = await verify(proof as JsonProof, verificationKey); + expect(valid).toBe(true); + }); +}); diff --git a/src/mina b/src/mina index d68deacf7..573f6c8f6 160000 --- a/src/mina +++ b/src/mina @@ -1 +1 @@ -Subproject commit d68deacf78c2845e55e7fd8888e42571ac0fac97 +Subproject commit 573f6c8f6dcbedc16009b0ce985710bf5382c8c4