diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 700be04..d8b6e9c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,30 +1,31 @@
name: Continuous Integration
-on: [push, pull_request]
+on:
+ push:
+ branches:
+ - master
+ pull_request:
jobs:
test:
name: Test
- runs-on: ${{ matrix.os }}
-
- strategy:
- fail-fast: false
- matrix:
- os: [ubuntu-latest, macos-latest, windows-latest]
- node-version: ["12", "14", "16", "18"]
+ timeout-minutes: 15
+ runs-on: ubuntu-latest
steps:
- name: Checkout project
- uses: actions/checkout@v2
+ uses: actions/checkout@v6
- name: Setup Node.js
- uses: actions/setup-node@v3
+ uses: actions/setup-node@v6
with:
- node-version: ${{ matrix.node-version }}
- check-latest: true
- cache: 'npm'
+ node-version: "lts/*"
+ cache: "npm"
- name: Install dependencies
run: npm ci
+ - name: Install Playwright dependencies
+ run: npx playwright install --with-deps chromium
+
- name: Run tests
run: npm test
diff --git a/.gitignore b/.gitignore
index 07d2049..7097acb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -66,3 +66,4 @@ typings/
tmp
.DS_Store
+.idea/
diff --git a/build/bls12381_wasm.js b/build/bls12381_wasm.js
index 27fc492..d7d853b 100644
--- a/build/bls12381_wasm.js
+++ b/build/bls12381_wasm.js
@@ -1,18 +1,16 @@
-
- exports.code = "AGFzbQEAAAABlQESYAJ/fwBgAX8AYAF/AX9gAn9/AX9gA39/fwF/YAN/f38AYAN/fn8AYAJ/fgBgBH9/f38AYAV/f39/fwBgBH9/f38Bf2AGf39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38Bf2AHf39/f39/fwF/YAl/f39/f39/f38Bf2ALf39/f39/f39/f38BfwIPAQNlbnYGbWVtb3J5AgAZA9MC0QIAAQIBAwMEBAUAAAYHCAUCBQUAAAUAAAAAAgIAAQUICQUFBQgICAgAAgABAgEDAwQEBQAABgcIBQIFBQAABQAAAAACAgABBQgJBQUFCAgICAACBQAAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgDAAgIAgAACQsLBQULAAgNCQgCAgEBAAUFAAUFAAAAAAMACAICCQgAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgFAwAICAIAAAkLCwUFCwUDAAgIAgAACQsLBQULBQUJCQkJCQACAgEBAAUABQUAAgAAAwAIAgkIAAICAQEABQUABQUAAAAAAwAIAgIJCAACBQgJBQAAAAAAAAAAAAACAgICBQAAAAUAAAAABA4PEBEFB84nvQIJaW50cV9jb3B5AAAJaW50cV96ZXJvAAEIaW50cV9vbmUAAwtpbnRxX2lzWmVybwACB2ludHFfZXEABAhpbnRxX2d0ZQAFCGludHFfYWRkAAYIaW50cV9zdWIABwhpbnRxX211bAAIC2ludHFfc3F1YXJlAAkOaW50cV9zcXVhcmVPbGQACghpbnRxX2RpdgAND2ludHFfaW52ZXJzZU1vZAAOCGYxbV9jb3B5AAAIZjFtX3plcm8AAQpmMW1faXNaZXJvAAIGZjFtX2VxAAQHZjFtX2FkZAAQB2YxbV9zdWIAEQdmMW1fbmVnABIOZjFtX2lzTmVnYXRpdmUAGQlmMW1faXNPbmUADwhmMW1fc2lnbgAaC2YxbV9tUmVkdWN0ABMHZjFtX211bAAUCmYxbV9zcXVhcmUAFQ1mMW1fc3F1YXJlT2xkABYSZjFtX2Zyb21Nb250Z29tZXJ5ABgQZjFtX3RvTW9udGdvbWVyeQAXC2YxbV9pbnZlcnNlABsHZjFtX29uZQAcCGYxbV9sb2FkAB0PZjFtX3RpbWVzU2NhbGFyAB4HZjFtX2V4cAAmEGYxbV9iYXRjaEludmVyc2UAHwhmMW1fc3FydAAnDGYxbV9pc1NxdWFyZQAoFWYxbV9iYXRjaFRvTW9udGdvbWVyeQAgF2YxbV9iYXRjaEZyb21Nb250Z29tZXJ5ACEJaW50cl9jb3B5ACkJaW50cl96ZXJvACoIaW50cl9vbmUALAtpbnRyX2lzWmVybwArB2ludHJfZXEALQhpbnRyX2d0ZQAuCGludHJfYWRkAC8IaW50cl9zdWIAMAhpbnRyX211bAAxC2ludHJfc3F1YXJlADIOaW50cl9zcXVhcmVPbGQAMwhpbnRyX2RpdgA2D2ludHJfaW52ZXJzZU1vZAA3CGZybV9jb3B5ACkIZnJtX3plcm8AKgpmcm1faXNaZXJvACsGZnJtX2VxAC0HZnJtX2FkZAA5B2ZybV9zdWIAOgdmcm1fbmVnADsOZnJtX2lzTmVnYXRpdmUAQglmcm1faXNPbmUAOAhmcm1fc2lnbgBDC2ZybV9tUmVkdWN0ADwHZnJtX211bAA9CmZybV9zcXVhcmUAPg1mcm1fc3F1YXJlT2xkAD8SZnJtX2Zyb21Nb250Z29tZXJ5AEEQZnJtX3RvTW9udGdvbWVyeQBAC2ZybV9pbnZlcnNlAEQHZnJtX29uZQBFCGZybV9sb2FkAEYPZnJtX3RpbWVzU2NhbGFyAEcHZnJtX2V4cABPEGZybV9iYXRjaEludmVyc2UASAhmcm1fc3FydABQDGZybV9pc1NxdWFyZQBRFWZybV9iYXRjaFRvTW9udGdvbWVyeQBJF2ZybV9iYXRjaEZyb21Nb250Z29tZXJ5AEoGZnJfYWRkADkGZnJfc3ViADoGZnJfbmVnADsGZnJfbXVsAFIJZnJfc3F1YXJlAFMKZnJfaW52ZXJzZQBUDWZyX2lzTmVnYXRpdmUAVQdmcl9jb3B5ACkHZnJfemVybwAqBmZyX29uZQBFCWZyX2lzWmVybwArBWZyX2VxAC0MZzFtX211bHRpZXhwAIABEmcxbV9tdWx0aWV4cF9jaHVuawB/EmcxbV9tdWx0aWV4cEFmZmluZQCEARhnMW1fbXVsdGlleHBBZmZpbmVfY2h1bmsAgwEKZzFtX2lzWmVybwBXEGcxbV9pc1plcm9BZmZpbmUAVgZnMW1fZXEAXwtnMW1fZXFNaXhlZABeDGcxbV9lcUFmZmluZQBdCGcxbV9jb3B5AFsOZzFtX2NvcHlBZmZpbmUAWghnMW1femVybwBZDmcxbV96ZXJvQWZmaW5lAFgKZzFtX2RvdWJsZQBhEGcxbV9kb3VibGVBZmZpbmUAYAdnMW1fYWRkAGQMZzFtX2FkZE1peGVkAGMNZzFtX2FkZEFmZmluZQBiB2cxbV9uZWcAZg1nMW1fbmVnQWZmaW5lAGUHZzFtX3N1YgBpDGcxbV9zdWJNaXhlZABoDWcxbV9zdWJBZmZpbmUAZxJnMW1fZnJvbU1vbnRnb21lcnkAaxhnMW1fZnJvbU1vbnRnb21lcnlBZmZpbmUAahBnMW1fdG9Nb250Z29tZXJ5AG0WZzFtX3RvTW9udGdvbWVyeUFmZmluZQBsD2cxbV90aW1lc1NjYWxhcgCFARVnMW1fdGltZXNTY2FsYXJBZmZpbmUAhgENZzFtX25vcm1hbGl6ZQByCmcxbV9MRU10b1UAdApnMW1fTEVNdG9DAHUKZzFtX1V0b0xFTQB2CmcxbV9DdG9MRU0Adw9nMW1fYmF0Y2hMRU10b1UAeA9nMW1fYmF0Y2hMRU10b0MAeQ9nMW1fYmF0Y2hVdG9MRU0Aeg9nMW1fYmF0Y2hDdG9MRU0AewxnMW1fdG9BZmZpbmUAbg5nMW1fdG9KYWNvYmlhbgBcEWcxbV9iYXRjaFRvQWZmaW5lAHETZzFtX2JhdGNoVG9KYWNvYmlhbgB8C2cxbV9pbkN1cnZlAHARZzFtX2luQ3VydmVBZmZpbmUAbxdmcm1fX3JldmVyc2VQZXJtdXRhdGlvbgCIAQdmcm1fZmZ0AIwBCGZybV9pZmZ0AI0BCmZybV9yYXdmZnQAigELZnJtX2ZmdEpvaW4AjgEOZnJtX2ZmdEpvaW5FeHQAjwERZnJtX2ZmdEpvaW5FeHRJbnYAkAEKZnJtX2ZmdE1peACRAQxmcm1fZmZ0RmluYWwAkgEdZnJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24AkwEIcG9sX3plcm8AlAEPcG9sX2NvbnN0cnVjdExDAJUBDHFhcF9idWlsZEFCQwCWAQtxYXBfam9pbkFCQwCXAQxxYXBfYmF0Y2hBZGQAmAEKZjJtX2lzWmVybwCZAQlmMm1faXNPbmUAmgEIZjJtX3plcm8AmwEHZjJtX29uZQCcAQhmMm1fY29weQCdAQdmMm1fbXVsAJ4BCGYybV9tdWwxAJ8BCmYybV9zcXVhcmUAoAEHZjJtX2FkZAChAQdmMm1fc3ViAKIBB2YybV9uZWcAowEIZjJtX3NpZ24AqgENZjJtX2Nvbmp1Z2F0ZQCkARJmMm1fZnJvbU1vbnRnb21lcnkApgEQZjJtX3RvTW9udGdvbWVyeQClAQZmMm1fZXEApwELZjJtX2ludmVyc2UAqAEHZjJtX2V4cACtAQ9mMm1fdGltZXNTY2FsYXIAqQEQZjJtX2JhdGNoSW52ZXJzZQCsAQhmMm1fc3FydACuAQxmMm1faXNTcXVhcmUArwEOZjJtX2lzTmVnYXRpdmUAqwEMZzJtX211bHRpZXhwANoBEmcybV9tdWx0aWV4cF9jaHVuawDZARJnMm1fbXVsdGlleHBBZmZpbmUA3gEYZzJtX211bHRpZXhwQWZmaW5lX2NodW5rAN0BCmcybV9pc1plcm8AsQEQZzJtX2lzWmVyb0FmZmluZQCwAQZnMm1fZXEAuQELZzJtX2VxTWl4ZWQAuAEMZzJtX2VxQWZmaW5lALcBCGcybV9jb3B5ALUBDmcybV9jb3B5QWZmaW5lALQBCGcybV96ZXJvALMBDmcybV96ZXJvQWZmaW5lALIBCmcybV9kb3VibGUAuwEQZzJtX2RvdWJsZUFmZmluZQC6AQdnMm1fYWRkAL4BDGcybV9hZGRNaXhlZAC9AQ1nMm1fYWRkQWZmaW5lALwBB2cybV9uZWcAwAENZzJtX25lZ0FmZmluZQC/AQdnMm1fc3ViAMMBDGcybV9zdWJNaXhlZADCAQ1nMm1fc3ViQWZmaW5lAMEBEmcybV9mcm9tTW9udGdvbWVyeQDFARhnMm1fZnJvbU1vbnRnb21lcnlBZmZpbmUAxAEQZzJtX3RvTW9udGdvbWVyeQDHARZnMm1fdG9Nb250Z29tZXJ5QWZmaW5lAMYBD2cybV90aW1lc1NjYWxhcgDfARVnMm1fdGltZXNTY2FsYXJBZmZpbmUA4AENZzJtX25vcm1hbGl6ZQDMAQpnMm1fTEVNdG9VAM4BCmcybV9MRU10b0MAzwEKZzJtX1V0b0xFTQDQAQpnMm1fQ3RvTEVNANEBD2cybV9iYXRjaExFTXRvVQDSAQ9nMm1fYmF0Y2hMRU10b0MA0wEPZzJtX2JhdGNoVXRvTEVNANQBD2cybV9iYXRjaEN0b0xFTQDVAQxnMm1fdG9BZmZpbmUAyAEOZzJtX3RvSmFjb2JpYW4AtgERZzJtX2JhdGNoVG9BZmZpbmUAywETZzJtX2JhdGNoVG9KYWNvYmlhbgDWAQtnMm1faW5DdXJ2ZQDKARFnMm1faW5DdXJ2ZUFmZmluZQDJAQtnMW1fdGltZXNGcgDhARdnMW1fX3JldmVyc2VQZXJtdXRhdGlvbgDjAQdnMW1fZmZ0AOcBCGcxbV9pZmZ0AOgBCmcxbV9yYXdmZnQA5QELZzFtX2ZmdEpvaW4A6QEOZzFtX2ZmdEpvaW5FeHQA6gERZzFtX2ZmdEpvaW5FeHRJbnYA6wEKZzFtX2ZmdE1peADsAQxnMW1fZmZ0RmluYWwA7QEdZzFtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24A7gELZzJtX3RpbWVzRnIA7wEXZzJtX19yZXZlcnNlUGVybXV0YXRpb24A8QEHZzJtX2ZmdAD1AQhnMm1faWZmdAD2AQpnMm1fcmF3ZmZ0APMBC2cybV9mZnRKb2luAPcBDmcybV9mZnRKb2luRXh0APgBEWcybV9mZnRKb2luRXh0SW52APkBCmcybV9mZnRNaXgA+gEMZzJtX2ZmdEZpbmFsAPsBHWcybV9wcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uAPwBEWcxbV90aW1lc0ZyQWZmaW5lAP0BEWcybV90aW1lc0ZyQWZmaW5lAP4BEWZybV9iYXRjaEFwcGx5S2V5AP8BEWcxbV9iYXRjaEFwcGx5S2V5AIACFmcxbV9iYXRjaEFwcGx5S2V5TWl4ZWQAgQIRZzJtX2JhdGNoQXBwbHlLZXkAggIWZzJtX2JhdGNoQXBwbHlLZXlNaXhlZACDAgpmNm1faXNaZXJvAIUCCWY2bV9pc09uZQCGAghmNm1femVybwCHAgdmNm1fb25lAIgCCGY2bV9jb3B5AIkCB2Y2bV9tdWwAigIKZjZtX3NxdWFyZQCLAgdmNm1fYWRkAIwCB2Y2bV9zdWIAjQIHZjZtX25lZwCOAghmNm1fc2lnbgCPAhJmNm1fZnJvbU1vbnRnb21lcnkAkQIQZjZtX3RvTW9udGdvbWVyeQCQAgZmNm1fZXEAkgILZjZtX2ludmVyc2UAkwIHZjZtX2V4cACXAg9mNm1fdGltZXNTY2FsYXIAlAIQZjZtX2JhdGNoSW52ZXJzZQCWAg5mNm1faXNOZWdhdGl2ZQCVAgpmdG1faXNaZXJvAJkCCWZ0bV9pc09uZQCaAghmdG1femVybwCbAgdmdG1fb25lAJwCCGZ0bV9jb3B5AJ0CB2Z0bV9tdWwAngIIZnRtX211bDEAnwIKZnRtX3NxdWFyZQCgAgdmdG1fYWRkAKECB2Z0bV9zdWIAogIHZnRtX25lZwCjAghmdG1fc2lnbgCqAg1mdG1fY29uanVnYXRlAKQCEmZ0bV9mcm9tTW9udGdvbWVyeQCmAhBmdG1fdG9Nb250Z29tZXJ5AKUCBmZ0bV9lcQCnAgtmdG1faW52ZXJzZQCoAgdmdG1fZXhwAK0CD2Z0bV90aW1lc1NjYWxhcgCpAhBmdG1fYmF0Y2hJbnZlcnNlAKwCCGZ0bV9zcXJ0AK4CDGZ0bV9pc1NxdWFyZQCvAg5mdG1faXNOZWdhdGl2ZQCrAhFmdG1fZnJvYmVuaXVzTWFwMAC0AhFmdG1fZnJvYmVuaXVzTWFwMQC1AhFmdG1fZnJvYmVuaXVzTWFwMgC2AhFmdG1fZnJvYmVuaXVzTWFwMwC3AhFmdG1fZnJvYmVuaXVzTWFwNAC4AhFmdG1fZnJvYmVuaXVzTWFwNQC5AhFmdG1fZnJvYmVuaXVzTWFwNgC6AhFmdG1fZnJvYmVuaXVzTWFwNwC7AhFmdG1fZnJvYmVuaXVzTWFwOAC8AhFmdG1fZnJvYmVuaXVzTWFwOQC9AhNibHMxMjM4MV9wYWlyaW5nRXExAMsCE2JsczEyMzgxX3BhaXJpbmdFcTIAzAITYmxzMTIzODFfcGFpcmluZ0VxMwDNAhNibHMxMjM4MV9wYWlyaW5nRXE0AM4CE2JsczEyMzgxX3BhaXJpbmdFcTUAzwIQYmxzMTIzODFfcGFpcmluZwDQAhJibHMxMjM4MV9wcmVwYXJlRzEAxAISYmxzMTIzODFfcHJlcGFyZUcyAMUCE2JsczEyMzgxX21pbGxlckxvb3AAxgIcYmxzMTIzODFfZmluYWxFeHBvbmVudGlhdGlvbgDKAh9ibHMxMjM4MV9maW5hbEV4cG9uZW50aWF0aW9uT2xkAMcCGmJsczEyMzgxX19jeWNsb3RvbWljU3F1YXJlAMgCGmJsczEyMzgxX19jeWNsb3RvbWljRXhwX3cwAMkCCGY2bV9tdWwxALACCWY2bV9tdWwwMQCxAgpmdG1fbXVsMDE0ALICEWcxbV9pbkdyb3VwQWZmaW5lAL4CC2cxbV9pbkdyb3VwAL8CEWcybV9pbkdyb3VwQWZmaW5lAMACC2cybV9pbkdyb3VwAMECCvK7BdECPgAgASAAKQMANwMAIAEgACkDCDcDCCABIAApAxA3AxAgASAAKQMYNwMYIAEgACkDIDcDICABIAApAyg3AygLLAAgAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AygLTQAgACkDKFAEQCAAKQMgUARAIAApAxhQBEAgACkDEFAEQCAAKQMIUARAIAApAwBQDwVBAA8LBUEADwsFQQAPCwVBAA8LBUEADwtBAA8LLAAgAEIBNwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AygLawAgACkDKCABKQMoUQRAIAApAyAgASkDIFEEQCAAKQMYIAEpAxhRBEAgACkDECABKQMQUQRAIAApAwggASkDCFEEQCAAKQMAIAEpAwBRDwVBAA8LBUEADwsFQQAPCwVBAA8LBUEADwtBAA8LxQEAIAApAyggASkDKFQEQEEADwUgACkDKCABKQMoVgRAQQEPBSAAKQMgIAEpAyBUBEBBAA8FIAApAyAgASkDIFYEQEEBDwUgACkDGCABKQMYVARAQQAPBSAAKQMYIAEpAxhWBEBBAQ8FIAApAxAgASkDEFQEQEEADwUgACkDECABKQMQVgRAQQEPBSAAKQMIIAEpAwhUBEBBAA8FIAApAwggASkDCFYEQEEBDwUgACkDACABKQMAWg8LCwsLCwsLCwsLQQAPC7wCAQF+IAA1AgAgATUCAHwhAyACIAM+AgAgADUCBCABNQIEfCADQiCIfCEDIAIgAz4CBCAANQIIIAE1Agh8IANCIIh8IQMgAiADPgIIIAA1AgwgATUCDHwgA0IgiHwhAyACIAM+AgwgADUCECABNQIQfCADQiCIfCEDIAIgAz4CECAANQIUIAE1AhR8IANCIIh8IQMgAiADPgIUIAA1AhggATUCGHwgA0IgiHwhAyACIAM+AhggADUCHCABNQIcfCADQiCIfCEDIAIgAz4CHCAANQIgIAE1AiB8IANCIIh8IQMgAiADPgIgIAA1AiQgATUCJHwgA0IgiHwhAyACIAM+AiQgADUCKCABNQIofCADQiCIfCEDIAIgAz4CKCAANQIsIAE1Aix8IANCIIh8IQMgAiADPgIsIANCIIinC5ADAQF+IAA1AgAgATUCAH0hAyACIANC/////w+DPgIAIAA1AgQgATUCBH0gA0Igh3whAyACIANC/////w+DPgIEIAA1AgggATUCCH0gA0Igh3whAyACIANC/////w+DPgIIIAA1AgwgATUCDH0gA0Igh3whAyACIANC/////w+DPgIMIAA1AhAgATUCEH0gA0Igh3whAyACIANC/////w+DPgIQIAA1AhQgATUCFH0gA0Igh3whAyACIANC/////w+DPgIUIAA1AhggATUCGH0gA0Igh3whAyACIANC/////w+DPgIYIAA1AhwgATUCHH0gA0Igh3whAyACIANC/////w+DPgIcIAA1AiAgATUCIH0gA0Igh3whAyACIANC/////w+DPgIgIAA1AiQgATUCJH0gA0Igh3whAyACIANC/////w+DPgIkIAA1AiggATUCKH0gA0Igh3whAyACIANC/////w+DPgIoIAA1AiwgATUCLH0gA0Igh3whAyACIANC/////w+DPgIsIANCIIenC6ciGgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gA0L/////D4MgADUCACIFIAE1AgAiBn58IQMgBCADQiCIfCEEIAIgAz4CACAEQiCIIQMgBEL/////D4MgBSABNQIEIgh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIEIgcgBn58IQQgAyAEQiCIfCEDIAIgBD4CBCADQiCIIQQgA0L/////D4MgBSABNQIIIgp+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIIIgkgBn58IQMgBCADQiCIfCEEIAIgAz4CCCAEQiCIIQMgBEL/////D4MgBSABNQIMIgx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIMIgsgBn58IQQgAyAEQiCIfCEDIAIgBD4CDCADQiCIIQQgA0L/////D4MgBSABNQIQIg5+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyALIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIQIg0gBn58IQMgBCADQiCIfCEEIAIgAz4CECAEQiCIIQMgBEL/////D4MgBSABNQIUIhB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIUIg8gBn58IQQgAyAEQiCIfCEDIAIgBD4CFCADQiCIIQQgA0L/////D4MgBSABNQIYIhJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyALIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyANIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIYIhEgBn58IQMgBCADQiCIfCEEIAIgAz4CGCAEQiCIIQMgBEL/////D4MgBSABNQIcIhR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIcIhMgBn58IQQgAyAEQiCIfCEDIAIgBD4CHCADQiCIIQQgA0L/////D4MgBSABNQIgIhZ+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyANIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIgIhUgBn58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgBSABNQIkIhh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIkIhcgBn58IQQgAyAEQiCIfCEDIAIgBD4CJCADQiCIIQQgA0L/////D4MgBSABNQIoIhp+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBZ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyAXIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIoIhkgBn58IQMgBCADQiCIfCEEIAIgAz4CKCAEQiCIIQMgBEL/////D4MgBSABNQIsIhx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIsIhsgBn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgByAcfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAafnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAYfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAWfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgFyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgGSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgGyAIfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyAJIBx+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAbIAp+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIAsgHH58IQMgBCADQiCIfCEEIANC/////w+DIA0gGn58IQMgBCADQiCIfCEEIANC/////w+DIA8gGH58IQMgBCADQiCIfCEEIANC/////w+DIBEgFn58IQMgBCADQiCIfCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIANC/////w+DIBUgEn58IQMgBCADQiCIfCEEIANC/////w+DIBcgEH58IQMgBCADQiCIfCEEIANC/////w+DIBkgDn58IQMgBCADQiCIfCEEIANC/////w+DIBsgDH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgBEL/////D4MgDSAcfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAafnwhBCADIARCIIh8IQMgBEL/////D4MgESAYfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAWfnwhBCADIARCIIh8IQMgBEL/////D4MgFSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgFyASfnwhBCADIARCIIh8IQMgBEL/////D4MgGSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgGyAOfnwhBCADIARCIIh8IQMgAiAEPgI8IANCIIghBCADQv////8PgyAPIBx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIBp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIBZ+fCEDIAQgA0IgiHwhBCADQv////8PgyAXIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAZIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAbIBB+fCEDIAQgA0IgiHwhBCACIAM+AkAgBEIgiCEDIARC/////w+DIBEgHH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgGn58IQQgAyAEQiCIfCEDIARC/////w+DIBUgGH58IQQgAyAEQiCIfCEDIARC/////w+DIBcgFn58IQQgAyAEQiCIfCEDIARC/////w+DIBkgFH58IQQgAyAEQiCIfCEDIARC/////w+DIBsgEn58IQQgAyAEQiCIfCEDIAIgBD4CRCADQiCIIQQgA0L/////D4MgEyAcfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAafnwhAyAEIANCIIh8IQQgA0L/////D4MgFyAYfnwhAyAEIANCIIh8IQQgA0L/////D4MgGSAWfnwhAyAEIANCIIh8IQQgA0L/////D4MgGyAUfnwhAyAEIANCIIh8IQQgAiADPgJIIARCIIghAyAEQv////8PgyAVIBx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAbIBZ+fCEEIAMgBEIgiHwhAyACIAQ+AkwgA0IgiCEEIANC/////w+DIBcgHH58IQMgBCADQiCIfCEEIANC/////w+DIBkgGn58IQMgBCADQiCIfCEEIANC/////w+DIBsgGH58IQMgBCADQiCIfCEEIAIgAz4CUCAEQiCIIQMgBEL/////D4MgGSAcfnwhBCADIARCIIh8IQMgBEL/////D4MgGyAafnwhBCADIARCIIh8IQMgAiAEPgJUIANCIIghBCADQv////8PgyAbIBx+fCEDIAQgA0IgiHwhBCACIAM+AlggBEIgiCEDIAIgBD4CXAvOIBABfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAA1AgAiBiAGfnwhAiADIAJCIIh8IQMgASACPgIAIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AgQiB358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCCCIIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgByAHfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIMIgl+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAh+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIMIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhAiCn58IQIgAyACQiCIfCEDIAJC/////w+DIAcgCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAggCH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCFCILfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAJfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIYIgx+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAJIAl+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIYIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhwiDX58IQIgAyACQiCIfCEDIAJC/////w+DIAcgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAggC358IQIgAyACQiCIfCEDIAJC/////w+DIAkgCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCICIOfnwhAiADIAJCIIh8IQMgAkL/////D4MgByANfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAMfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSALfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgCiAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CICADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIkIg9+fCECIAMgAkIgiHwhAyACQv////8PgyAHIA5+fCECIAMgAkIgiHwhAyACQv////8PgyAIIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIkIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AigiEH58IQIgAyACQiCIfCEDIAJC/////w+DIAcgD358IQIgAyACQiCIfCEDIAJC/////w+DIAggDn58IQIgAyACQiCIfCEDIAJC/////w+DIAkgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAogDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAsgC358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCLCIRfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiANfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAMfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CLCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgByARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyANfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDCAMfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CMCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCCARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCANfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CNCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCSARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAOfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDSANfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4COCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCiARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAOfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CPCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCyARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAPfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDiAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CQCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDCARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDiAPfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CRCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDSARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDiAQfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDyAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CSCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDiARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDyAQfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CTCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDyARfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgECAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CUCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgECARfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CVCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgESARfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CWCADIQQgBEIgiCEFIAEgBD4CXAsKACAAIAAgARAIC5ICAQF+IAA1AAAgAX4hAyACIAM+AAAgADUABCABfiADQiCIfCEDIAIgAz4ABCAANQAIIAF+IANCIIh8IQMgAiADPgAIIAA1AAwgAX4gA0IgiHwhAyACIAM+AAwgADUAECABfiADQiCIfCEDIAIgAz4AECAANQAUIAF+IANCIIh8IQMgAiADPgAUIAA1ABggAX4gA0IgiHwhAyACIAM+ABggADUAHCABfiADQiCIfCEDIAIgAz4AHCAANQAgIAF+IANCIIh8IQMgAiADPgAgIAA1ACQgAX4gA0IgiHwhAyACIAM+ACQgADUAKCABfiADQiCIfCEDIAIgAz4AKCAANQAsIAF+IANCIIh8IQMgAiADPgAsC04CAX4BfyAAIQMgAzUAACABfCECIAMgAj4AACACQiCIIQICQANAIAJQDQEgA0EEaiEDIAM1AAAgAnwhAiADIAI+AAAgAkIgiCECDAALCwurAgcBfwF/AX8BfwF+AX4BfyACBEAgAiEFBUHYACEFCyADBEAgAyEEBUGIASEECyAAIAQQACABQSgQACAFEAFBuAEQAUEvIQZBLyEHAkADQEEoIAdqLQAAIAdBA0ZyDQEgB0EBayEHDAALC0EoIAdqQQNrNQAAQgF8IQggCEIBUQRAQgBCAIAaCwJAA0ACQANAIAQgBmotAAAgBkEHRnINASAGQQFrIQYMAAsLIAQgBmpBB2spAAAhCSAJIAiAIQkgBiAHa0EEayEKAkADQCAJQoCAgIBwg1AgCkEATnENASAJQgiIIQkgCkEBaiEKDAALCyAJUARAIARBKBAFRQ0CQgEhCUEAIQoLQSggCUHoARALIARB6AEgCmsgBBAHGiAFIApqIAkQDAwACwsLtQILAX8BfwF/AX8BfwF/AX8BfwF/AX8Bf0GYAiEDQZgCEAFBACELQcgCIQUgAUHIAhAAQfgCIQRB+AIQA0EAIQxBqAMhCCAAQagDEABB2AMhBkGIBCEHQZgFIQoCQANAIAgQAg0BIAUgCCAGIAcQDSAGIARBuAQQCCALBEAgDARAQbgEIAMQBQRAQbgEIAMgChAHGkEAIQ0FIANBuAQgChAHGkEBIQ0LBUG4BCADIAoQBhpBASENCwUgDARAQbgEIAMgChAGGkEAIQ0FIANBuAQQBQRAIANBuAQgChAHGkEAIQ0FQbgEIAMgChAHGkEBIQ0LCwsgAyEJIAQhAyAKIQQgCSEKIAwhCyANIQwgBSEJIAghBSAHIQggCSEHDAALCyALBEAgASADIAIQBxoFIAMgAhAACwsKACAAQagGEAQPCywAIAAgASACEAYEQCACQcgFIAIQBxoFIAJByAUQBQRAIAJByAUgAhAHGgsLCxcAIAAgASACEAcEQCACQcgFIAIQBhoLCwsAQdgGIAAgARARC/wkAwF+AX4BfkL9//P/DyECQgAhAyAANQIAIAJ+Qv////8PgyEEIAA1AgAgA0IgiHxByAU1AgAgBH58IQMgACADPgIAIAA1AgQgA0IgiHxByAU1AgQgBH58IQMgACADPgIEIAA1AgggA0IgiHxByAU1AgggBH58IQMgACADPgIIIAA1AgwgA0IgiHxByAU1AgwgBH58IQMgACADPgIMIAA1AhAgA0IgiHxByAU1AhAgBH58IQMgACADPgIQIAA1AhQgA0IgiHxByAU1AhQgBH58IQMgACADPgIUIAA1AhggA0IgiHxByAU1AhggBH58IQMgACADPgIYIAA1AhwgA0IgiHxByAU1AhwgBH58IQMgACADPgIcIAA1AiAgA0IgiHxByAU1AiAgBH58IQMgACADPgIgIAA1AiQgA0IgiHxByAU1AiQgBH58IQMgACADPgIkIAA1AiggA0IgiHxByAU1AiggBH58IQMgACADPgIoIAA1AiwgA0IgiHxByAU1AiwgBH58IQMgACADPgIsQfgIIANCIIg+AgBCACEDIAA1AgQgAn5C/////w+DIQQgADUCBCADQiCIfEHIBTUCACAEfnwhAyAAIAM+AgQgADUCCCADQiCIfEHIBTUCBCAEfnwhAyAAIAM+AgggADUCDCADQiCIfEHIBTUCCCAEfnwhAyAAIAM+AgwgADUCECADQiCIfEHIBTUCDCAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHIBTUCECAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHIBTUCFCAEfnwhAyAA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DiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCBCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AgghAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIMIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCECEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AhQhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIYIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCHCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AiAhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIkIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCKCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AiwhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiACIBM+AgAgAiAUPgIEIAIgFT4CCCACIBY+AgwgAiAXPgIQIAIgGD4CFCACIBk+AhggAiAaPgIcIAIgGz4CICACIBw+AiQgAiAdPgIoIAIgHj4CLCACQcgFEAUEQCACQcgFIAIQBxoLC/dNHgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfiAANQIAIQYgADUCBCEHIAA1AgghCCAANQIMIQkgADUCECEKIAA1AhQhCyAANQIYIQwgADUCHCENIAA1AiAhDiAANQIkIQ8gADUCKCEQIAA1AiwhESASIAYgBn58IQQgBEL/////D4MhEiAEQiCIIQMgByAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBYgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBcgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBggBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAGfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAGfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAGfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAGfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBMgByAHfnwhBCAEQv////8PgyETIARCIIghAyAIIAd+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyAJIAd+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAKIAd+IQUgFiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEWIARCIIggBUIgiEIBhnwhAyALIAd+IQUgFyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEXIARCIIggBUIgiEIBhnwhAyAMIAd+IQUgGCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEYIARCIIggBUIgiEIBhnwhAyANIAd+IQUgGSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEZIARCIIggBUIgiEIBhnwhAyAOIAd+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIAd+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIAd+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIAd+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gFCAIIAh+fCEEIARC/////w+DIRQgBEIgiCEDIAkgCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSAWIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRYgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSAXIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRcgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAYIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRggBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAZIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRkgBEIgiCAFQiCIQgGGfCEDIA4gCH4hBSAaIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRogBEIgiCAFQiCIQgGGfCEDIA8gCH4hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgCH4hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgCH4hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAVIAkgCX58IQQgBEL/////D4MhFSAEQiCIIQMgCiAJfiEFIBYgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBcgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBggBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAJfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAJfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAJfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAJfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBYgCiAKfnwhBCAEQv////8PgyEWIARCIIghAyALIAp+IQUgFyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEXIARCIIggBUIgiEIBhnwhAyAMIAp+IQUgGCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEYIARCIIggBUIgiEIBhnwhAyANIAp+IQUgGSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEZIARCIIggBUIgiEIBhnwhAyAOIAp+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIAp+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIAp+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIAp+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gFyALIAt+fCEEIARC/////w+DIRcgBEIgiCEDIAwgC34hBSAYIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRggBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAZIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRkgBEIgiCAFQiCIQgGGfCEDIA4gC34hBSAaIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRogBEIgiCAFQiCIQgGGfCEDIA8gC34hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgC34hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgC34hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAYIAwgDH58IQQgBEL/////D4MhGCAEQiCIIQMgDSAMfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAMfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAMfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAMfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAMfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBkgDSANfnwhBCAEQv////8PgyEZIARCIIghAyAOIA1+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIA1+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIA1+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIA1+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gGiAOIA5+fCEEIARC/////w+DIRogBEIgiCEDIA8gDn4hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgDn4hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgDn4hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAbIA8gD358IQQgBEL/////D4MhGyAEQiCIIQMgECAPfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAPfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBwgECAQfnwhBCAEQv////8PgyEcIARCIIghAyARIBB+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gHSARIBF+fCEEIARC/////w+DIR0gBEIgiCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyABIBI+AgAgASATPgIEIAEgFD4CCCABIBU+AgwgASAWPgIQIAEgFz4CFCABIBg+AhggASAZPgIcIAEgGj4CICABIBs+AiQgASAcPgIoIAEgHT4CLCAepwRAIAFByAUgARAHGgUgAUHIBRAFBEAgAUHIBSABEAcaCwsLCgAgACAAIAEQFAsLACAAQfgFIAEQFAsVACAAQfgREABBqBIQAUH4ESABEBMLEQAgAEHYEhAYQdgSQbgHEAULJAAgABACBEBBAA8LIABBiBMQGEGIE0G4BxAFBEBBfw8LQQEPCxcAIAAgARAYIAFByAUgARAOIAEgARAXCwkAQagGIAAQAAvLAQQBfwF/AX8BfyACEAFBMCEFIAAhAwJAA0AgBSABSw0BIAVBMEYEQEG4ExAcBUG4E0H4BUG4ExAUCyADQbgTQegTEBQgAkHoEyAC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AgQgADUCCCABNQIIfCADQiCIfCEDIAIgAz4CCCAANQIMIAE1Agx8IANCIIh8IQMgAiADPgIMIAA1AhAgATUCEHwgA0IgiHwhAyACIAM+AhAgADUCFCABNQIUfCADQiCIfCEDIAIgAz4CFCAANQIYIAE1Ahh8IANCIIh8IQMgAiADPgIYIAA1AhwgATUCHHwgA0IgiHwhAyACIAM+AhwgA0IgiKcLjAIBAX4gADUCACABNQIAfSEDIAIgA0L/////D4M+AgAgADUCBCABNQIEfSADQiCHfCEDIAIgA0L/////D4M+AgQgADUCCCABNQIIfSADQiCHfCEDIAIgA0L/////D4M+AgggADUCDCABNQIMfSADQiCHfCEDIAIgA0L/////D4M+AgwgADUCECABNQIQfSADQiCHfCEDIAIgA0L/////D4M+AhAgADUCFCABNQIUfSADQiCHfCEDIAIgA0L/////D4M+AhQgADUCGCABNQIYfSADQiCHfCEDIAIgA0L/////D4M+AhggADUCHCABNQIcfSADQiCHfCEDIAIgA0L/////D4M+AhwgA0Igh6cLjxASAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IANC/////w+DIAA1AgAiBSABNQIAIgZ+fCEDIAQgA0IgiHwhBCACIAM+AgAgBEIgiCEDIARC/////w+DIAUgATUCBCIIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCBCIHIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgQgA0IgiCEEIANC/////w+DIAUgATUCCCIKfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCCCIJIAZ+fCEDIAQgA0IgiHwhBCACIAM+AgggBEIgiCEDIARC/////w+DIAUgATUCDCIMfnwhBCADIARCIIh8IQMgBEL/////D4MgByAKfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCDCILIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgwgA0IgiCEEIANC/////w+DIAUgATUCECIOfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCECINIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhAgBEIgiCEDIARC/////w+DIAUgATUCFCIQfnwhBCADIARCIIh8IQMgBEL/////D4MgByAOfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCFCIPIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhQgA0IgiCEEIANC/////w+DIAUgATUCGCISfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCGCIRIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhggBEIgiCEDIARC/////w+DIAUgATUCHCIUfnwhBCADIARCIIh8IQMgBEL/////D4MgByASfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgESAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCHCITIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhwgA0IgiCEEIANC/////w+DIAcgFH58IQMgBCADQiCIfCEEIANC/////w+DIAkgEn58IQMgBCADQiCIfCEEIANC/////w+DIAsgEH58IQMgBCADQiCIfCEEIANC/////w+DIA0gDn58IQMgBCADQiCIfCEEIANC/////w+DIA8gDH58IQMgBCADQiCIfCEEIANC/////w+DIBEgCn58IQMgBCADQiCIfCEEIANC/////w+DIBMgCH58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgCSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgCyASfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgESAMfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAKfnwhBCADIARCIIh8IQMgAiAEPgIkIANCIIghBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCACIAM+AiggBEIgiCEDIARC/////w+DIA0gFH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gEn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgEH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgDn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgAiAEPgI8C4wSDAF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAA1AgAiBiAGfnwhAiADIAJCIIh8IQMgASACPgIAIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AgQiB358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCCCIIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgByAHfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIMIgl+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAh+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIMIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhAiCn58IQIgAyACQiCIfCEDIAJC/////w+DIAcgCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAggCH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCFCILfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAJfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIYIgx+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAJIAl+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIYIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhwiDX58IQIgAyACQiCIfCEDIAJC/////w+DIAcgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAggC358IQIgAyACQiCIfCEDIAJC/////w+DIAkgCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAcgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAggDH58IQIgAyACQiCIfCEDIAJC/////w+DIAkgC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAogCn58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAggDX58IQIgAyACQiCIfCEDIAJC/////w+DIAkgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAogC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAkgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAogDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAsgC358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAogDX58IQIgAyACQiCIfCEDIAJC/////w+DIAsgDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAsgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAwgDH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAwgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIA0gDX58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjggAyEEIARCIIghBSABIAQ+AjwLCgAgACAAIAEQMQu2AQEBfiAANQAAIAF+IQMgAiADPgAAIAA1AAQgAX4gA0IgiHwhAyACIAM+AAQgADUACCABfiADQiCIfCEDIAIgAz4ACCAANQAMIAF+IANCIIh8IQMgAiADPgAMIAA1ABAgAX4gA0IgiHwhAyACIAM+ABAgADUAFCABfiADQiCIfCEDIAIgAz4AFCAANQAYIAF+IANCIIh8IQMgAiADPgAYIAA1ABwgAX4gA0IgiHwhAyACIAM+ABwLTgIBfgF/IAAhAyADNQAAIAF8IQIgAyACPgAAIAJCIIghAgJAA0AgAlANASADQQRqIQMgAzUAACACfCECIAMgAj4AACACQiCIIQIMAAsLC7ACBwF/AX8BfwF/AX4BfgF/IAIEQCACIQUFQegXIQULIAMEQCADIQQFQYgYIQQLIAAgBBApIAFByBcQKSAFECpBqBgQKkEfIQZBHyEHAkADQEHIFyAHai0AACAHQQNGcg0BIAdBAWshBwwACwtByBcgB2pBA2s1AABCAXwhCCAIQgFRBEBCAEIAgBoLAkADQAJAA0AgBCAGai0AACAGQQdGcg0BIAZBAWshBgwACwsgBCAGakEHaykAACEJIAkgCIAhCSAGIAdrQQRrIQoCQANAIAlCgICAgHCDUCAKQQBOcQ0BIAlCCIghCSAKQQFqIQoMAAsLIAlQBEAgBEHIFxAuRQ0CQgEhCUEAIQoLQcgXIAlByBgQNCAEQcgYIAprIAQQMBogBSAKaiAJEDUMAAsLC7UC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GCENIAA1AhwhDiABNQIAIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIEIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIIIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIMIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIQIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIUIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIYIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIcIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiACIA8+AgAgAiAQPgIEIAIgET4CCCACIBI+AgwgAiATPgIQIAIgFD4CFCACIBU+AhggAiAWPgIcIAJBiBsQLgRAIAJBiBsgAhAwGgsLqyQWAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gADUCACEGIAA1AgQhByAANQIIIQggADUCDCEJIAA1AhAhCiAANQIUIQsgADUCGCEMIAA1AhwhDSAOIAYgBn58IQQgBEL/////D4MhDiAEQiCIIQMgByAGfiEFIA8gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhDyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIA8gByAHfnwhBCAEQv////8PgyEPIARCIIghAyAIIAd+IQUgECAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEQIARCIIggBUIgiEIBhnwhAyAJIAd+IQUgESAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyERIARCIIggBUIgiEIBhnwhAyAKIAd+IQUgEiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyESIARCIIggBUIgiEIBhnwhAyALIAd+IQUgEyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyETIARCIIggBUIgiEIBhnwhAyAMIAd+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyANIAd+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgECAIIAh+fCEEIARC/////w+DIRAgBEIgiCEDIAkgCH4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQv////8PfkL/////D4MhAiAOIAJCAX58IQQgBEIgiCEDIA8gAkL/////D358IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQv63+f8PfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCgsj2nQV+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkKFsIfNAH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQoiw55kDfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCyPr1zAJ+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLTzrafB358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyARIAkgCX58IQQgBEL/////D4MhESAEQiCIIQMgCiAJfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIBIgCiAKfnwhBCAEQv////8PgyESIARCIIghAyALIAp+IQUgEyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyETIARCIIggBUIgiEIBhnwhAyAMIAp+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyANIAp+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEyALIAt+fCEEIARC/////w+DIRMgBEIgiCEDIAwgC34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQv////8PfkL/////D4MhAiAOIAJCAX58IQQgBEIgiCEDIA8gAkL/////D358IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQv63+f8PfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCgsj2nQV+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkKFsIfNAH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQoiw55kDfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCyPr1zAJ+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLTzrafB358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAUIAwgDH58IQQgBEL/////D4MhFCAEQiCIIQMgDSAMfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIBUgDSANfnwhBCAEQv////8PgyEVIARCIIghAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgASAOPgIAIAEgDz4CBCABIBA+AgggASARPgIMIAEgEj4CECABIBM+AhQgASAUPgIYIAEgFT4CHCAWpwRAIAFBiBsgARAwGgUgAUGIGxAuBEAgAUGIGyABEDAaCwsLCgAgACAAIAEQPQsLACAAQagbIAEQPQsVACAAQaghEClByCEQKkGoISABEDwLEQAgAEHoIRBBQeghQagcEC4LJAAgABArBEBBAA8LIABBiCIQQUGIIkGoHBAuBEBBfw8LQQEPCxcAIAAgARBBIAFBiBsgARA3IAEgARBACwkAQcgbIAAQKQvLAQQBfwF/AX8BfyACECpBICEFIAAhAwJAA0AgBSABSw0BIAVBIEYEQEGoIhBFBUGoIkGoG0GoIhA9CyADQagiQcgiED0gAkHIIiACEDkgA0EgaiEDIAVBIGohBQwACwsgAUEgcCEEIARFBEAPC0HIIhAqQQAhBgJAA0AgBiAERg0BIAYgAy0AADoAyCIgA0EBaiEDIAZBAWohBgwACwsgBUEgRgRAQagiEEUFQagiQagbQagiED0LQcgiQagiQcgiED0gAkHIIiACEDkLHAAgASACQegiEEZB6CJB6CIQQCAAQegiIAMQPQv4AQQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpBIGxqNgIAIAUQRSAAIQYgBUEgaiEFQQAhCAJAA0AgCCACRg0BIAYQKwRAIAVBIGsgBRApBSAGIAVBIGsgBRA9CyAGIAFqIQYgBUEgaiEFIAhBAWohCAwACwsgBiABayEGIAVBIGshBSADIAJBAWsgBGxqIQcgBSAFEEQCQANAIAhFDQEgBhArBEAgBSAFQSBrECkgBxAqBSAFQSBrQYgjECkgBSAGIAVBIGsQPSAFQYgjIAcQPQsgBiABayEGIAcgBGshByAFQSBrIQUgCEEBayEIDAALC0EAIAU2AgALPgMBfwF/AX8gACEEIAIhBUEAIQMCQANAIAMgAUYNASAEIAUQQCAEQSBqIQQgBUEgaiEFIANBAWohAwwACwsLPgMBfwF/AX8gACEEIAIhBUEAIQMCQANAIAMgAUYNASAEIAUQQSAEQSBqIQQgBUEgaiEFIANBAWohAwwACwsLPgMBfwF/AX8gACEEIAIhBUEAIQMCQANAIAMgAUYNASAEIAUQOyAEQSBqIQQgBUEgaiEFIANBAWohAwwACwsLTQQBfwF/AX8BfyAAIQUgASEGIAMhB0EAIQQCQANAIAQgAkYNASAFIAYgBxA5IAVBIGohBSAGQSBqIQYgB0EgaiEHIARBAWohBAwACwsLTQQBfwF/AX8BfyAAIQUgASEGIAMhB0EAIQQCQANAIAQgAkYNASAFIAYgBxA6IAVBIGohBSAGQSBqIQYgB0EgaiEHIARBAWohBAwACwsLTQQBfwF/AX8BfyAAIQUgASEGIAMhB0EAIQQCQANAIAQgAkYNASAFIAYgBxA9IAVBIGohBSAGQSBqIQYgB0EgaiEHIARBAWohBAwACwsLsgICAX8BfyACRQRAIAMQRQ8LIABBqCMQKSADEEUgAiEEAkADQCAEQQFrIQQgASAEai0AACEFIAMgAxA+IAVBgAFPBEAgBUGAAWshBSADQagjIAMQPQsgAyADED4gBUHAAE8EQCAFQcAAayEFIANBqCMgAxA9CyADIAMQPiAFQSBPBEAgBUEgayEFIANBqCMgAxA9CyADIAMQPiAFQRBPBEAgBUEQayEFIANBqCMgAxA9CyADIAMQPiAFQQhPBEAgBUEIayEFIANBqCMgAxA9CyADIAMQPiAFQQRPBEAgBUEEayEFIANBqCMgAxA9CyADIAMQPiAFQQJPBEAgBUECayEFIANBqCMgAxA9CyADIAMQPiAFQQFPBEAgBUEBayEFIANBqCMgAxA9CyAERQ0BDAALCwveAQMBfwF/AX8gABArBEAgARAqDwtBICECQegcQcgjECkgAEHIHEEgQegjEE8gAEGIHUEgQYgkEE8CQANAQegjQcgbEC0NAUHoI0GoJBA+QQEhAwJAA0BBqCRByBsQLQ0BQagkQagkED4gA0EBaiEDDAALC0HII0HIJBApIAIgA2tBAWshBAJAA0AgBEUNAUHIJEHIJBA+IARBAWshBAwACwsgAyECQcgkQcgjED5B6CNByCNB6CMQPUGIJEHIJEGIJBA9DAALC0GIJBBCBEBBiCQgARA7BUGIJCABECkLCyAAIAAQKwRAQQEPCyAAQYgcQSBB6CQQT0HoJEHIGxAtCxUAIAAgAUGIJRA9QYglQagbIAIQPQsKACAAIAAgARBSCwsAIABBiBsgARA3CwkAIABBqBwQLgsOACAAEAIgAEEwahACcQsKACAAQeAAahACCw0AIAAQASAAQTBqEAELFQAgABABIABBMGoQHCAAQeAAahABC3oAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYC7oBACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWCABIAApA2A3A2AgASAAKQNoNwNoIAEgACkDcDcDcCABIAApA3g3A3ggASAAKQOAATcDgAEgASAAKQOIATcDiAELKAAgABBWBEAgARBZBSABQeAAahAcIABBMGogAUEwahAAIAAgARAACwsYAQF/IAAgARAEIABBMGogAUEwahAEcQ8LdQEBfyAAQeAAaiECIAAQVwRAIAEQVg8LIAEQVgRAQQAPCyACEA8EQCAAIAEQXQ8LIAJB2CUQFSABQdglQYgmEBQgAkHYJUG4JhAUIAFBMGpBuCZB6CYQFCAAQYgmEAQEQCAAQTBqQegmEAQEQEEBDwsLQQAPC7QBAgF/AX8gAEHgAGohAiABQeAAaiEDIAAQVwRAIAEQVw8LIAEQVwRAQQAPCyACEA8EQCABIAAQXg8LIAMQDwRAIAAgARBeDwsgAkGYJxAVIANByCcQFSAAQcgnQfgnEBQgAUGYJ0GoKBAUIAJBmCdB2CgQFCADQcgnQYgpEBQgAEEwakGIKUG4KRAUIAFBMGpB2ChB6CkQFEH4J0GoKBAEBEBBuClB6CkQBARAQQEPCwtBAA8L6AEAIAAQVgRAIAAgARBcDwsgAEGYKhAVIABBMGpByCoQFUHIKkH4KhAVIABByCpBqCsQEEGoK0GoKxAVQagrQZgqQagrEBFBqCtB+CpBqCsQEUGoK0GoK0GoKxAQQZgqQZgqQdgrEBBB2CtBmCpB2CsQECAAQTBqIABBMGogAUHgAGoQEEHYKyABEBUgAUGoKyABEBEgAUGoKyABEBFB+CpB+CpBiCwQEEGILEGILEGILBAQQYgsQYgsQYgsEBBBqCsgASABQTBqEBEgAUEwakHYKyABQTBqEBQgAUEwakGILCABQTBqEBELiQIAIAAQVwRAIAAgARBbDwsgAEHgAGoQDwRAIAAgARBgDw8LIABBuCwQFSAAQTBqQegsEBVB6CxBmC0QFSAAQegsQcgtEBBByC1ByC0QFUHILUG4LEHILRARQcgtQZgtQcgtEBFByC1ByC1ByC0QEEG4LEG4LEH4LRAQQfgtQbgsQfgtEBBB+C1BqC4QFSAAQTBqIABB4ABqQdguEBRByC1ByC0gARAQQaguIAEgARARQZgtQZgtQYgvEBBBiC9BiC9BiC8QEEGIL0GIL0GILxAQQcgtIAEgAUEwahARIAFBMGpB+C0gAUEwahAUIAFBMGpBiC8gAUEwahARQdguQdguIAFB4ABqEBALowIBAX8gAEHgAGohAyAAEFYEQCABIAIQWiACQeAAahAcDwsgARBWBEAgACACEFogAkHgAGoQHA8LIAAgARAEBEAgAEEwaiABQTBqEAQEQCABIAIQYA8LCyABIABBuC8QESABQTBqIABBMGpBmDAQEUG4L0HoLxAVQegvQegvQcgwEBBByDBByDBByDAQEEG4L0HIMEH4MBAUQZgwQZgwQagxEBAgAEHIMEGIMhAUQagxQdgxEBVBiDJBiDJBuDIQEEHYMUH4MCACEBEgAkG4MiACEBEgAEEwakH4MEHoMhAUQegyQegyQegyEBBBiDIgAiACQTBqEBEgAkEwakGoMSACQTBqEBQgAkEwakHoMiACQTBqEBFBuC9BuC8gAkHgAGoQEAuAAwEBfyAAQeAAaiEDIAAQVwRAIAEgAhBaIAJB4ABqEBwPCyABEFYEQCAAIAIQWw8LIAMQDwRAIAAgASACEGIPCyADQZgzEBUgAUGYM0HIMxAUIANBmDNB+DMQFCABQTBqQfgzQag0EBQgAEHIMxAEBEAgAEEwakGoNBAEBEAgASACEGAPCwtByDMgAEHYNBARQag0IABBMGpBuDUQEUHYNEGINRAVQYg1QYg1Qeg1EBBB6DVB6DVB6DUQEEHYNEHoNUGYNhAUQbg1Qbg1Qcg2EBAgAEHoNUGoNxAUQcg2Qfg2EBVBqDdBqDdB2DcQEEH4NkGYNiACEBEgAkHYNyACEBEgAEEwakGYNkGIOBAUQYg4QYg4QYg4EBBBqDcgAiACQTBqEBEgAkEwakHINiACQTBqEBQgAkEwakGIOCACQTBqEBEgA0HYNCACQeAAahAQIAJB4ABqIAJB4ABqEBUgAkHgAGpBmDMgAkHgAGoQESACQeAAakGINSACQeAAahARC7wDAgF/AX8gAEHgAGohAyABQeAAaiEEIAAQVwRAIAEgAhBbDwsgARBXBEAgACACEFsPCyADEA8EQCABIAAgAhBjDwsgBBAPBEAgACABIAIQYw8LIANBuDgQFSAEQeg4EBUgAEHoOEGYORAUIAFBuDhByDkQFCADQbg4Qfg5EBQgBEHoOEGoOhAUIABBMGpBqDpB2DoQFCABQTBqQfg5QYg7EBRBmDlByDkQBARAQdg6QYg7EAQEQCAAIAIQYQ8LC0HIOUGYOUG4OxARQYg7Qdg6Qeg7EBFBuDtBuDtBmDwQEEGYPEGYPBAVQbg7QZg8Qcg8EBRB6DtB6DtB+DwQEEGYOUGYPEHYPRAUQfg8Qag9EBVB2D1B2D1BiD4QEEGoPUHIPCACEBEgAkGIPiACEBFB2DpByDxBuD4QFEG4PkG4PkG4PhAQQdg9IAIgAkEwahARIAJBMGpB+DwgAkEwahAUIAJBMGpBuD4gAkEwahARIAMgBCACQeAAahAQIAJB4ABqIAJB4ABqEBUgAkHgAGpBuDggAkHgAGoQESACQeAAakHoOCACQeAAahARIAJB4ABqQbg7IAJB4ABqEBQLFAAgACABEAAgAEEwaiABQTBqEBILIgAgACABEAAgAEEwaiABQTBqEBIgAEHgAGogAUHgAGoQAAsSACABQeg+EGUgAEHoPiACEGILEgAgAUH4PxBlIABB+D8gAhBjCxQAIAFBiMEAEGYgAEGIwQAgAhBkCxQAIAAgARAYIABBMGogAUEwahAYCyIAIAAgARAYIABBMGogAUEwahAYIABB4ABqIAFB4ABqEBgLFAAgACABEBcgAEEwaiABQTBqEBcLIgAgACABEBcgAEEwaiABQTBqEBcgAEHgAGogAUHgAGoQFwtTACAAEFcEQCABEAEgAUEwahABBSAAQeAAakGYwgAQG0GYwgBByMIAEBVBmMIAQcjCAEH4wgAQFCAAQcjCACABEBQgAEEwakH4wgAgAUEwahAUCws5ACAAQTBqQajDABAVIABB2MMAEBUgAEHYwwBB2MMAEBRB2MMAQaglQdjDABAQQajDAEHYwwAQBA8LEQAgAEGIxAAQbkGIxAAQbw8LsAEFAX8BfwF/AX8Bf0EAKAIAIQNBACADIAFBMGxqNgIAIABB4ABqQZABIAEgA0EwEB8gACEEIAMhBSACIQZBACEHAkADQCAHIAFGDQEgBRACBEAgBhABIAZBMGoQAQUgBSAEQTBqQejEABAUIAUgBRAVIAUgBCAGEBQgBUHoxAAgBkEwahAUCyAEQZABaiEEIAZB4ABqIQYgBUEwaiEFIAdBAWohBwwACwtBACADNgIAC1QAIAAQVwRAIAEQWQUgAEHgAGpBmMUAEBtBmMUAQcjFABAVQZjFAEHIxQBB+MUAEBQgAEHIxQAgARAUIABBMGpB+MUAIAFBMGoQFCABQeAAahAcCws7AgF/AX8gAiABakEBayEDIAAhBAJAA0AgAyACSA0BIAMgBC0AADoAACADQQFrIQMgBEEBaiEEDAALCwstACAAEFYEQCABEFgPCyAAQajGABBqQajGAEEwIAEQc0HYxgBBMCABQTBqEHMLQwAgABBWBEAgARABIAFBwAA6AAAPCyAAQYjHABAYQYjHAEEwIAEQcyAAQTBqEBpBf0YEQCABIAEtAABBgAFyOgAACwsyACAALQAAQcAAcQRAIAEQWA8LIABBMEG4xwAQcyAAQTBqQTBB6McAEHNBuMcAIAEQbAvFAQIBfwF/IAAtAAAhAiACQcAAcQRAIAEQWA8LIAJBgAFxIQMgAEHIyAAQAEHIyAAgAkE/cToAAEHIyABBMEGYyAAQc0GYyAAgARAXIAFByMgAEBUgAUHIyABByMgAEBRByMgAQaglQcjIABAQQcjIAEHIyAAQJ0HIyABBmMgAEBJByMgAEBpBf0YEQCADBEBByMgAIAFBMGoQAAVByMgAIAFBMGoQEgsFIAMEQEHIyAAgAUEwahASBUHIyAAgAUEwahAACwsLQAMBfwF/AX8gACEEIAIhBUEAIQMCQANAIAMgAUYNASAEIAUQdCAEQeAAaiEEIAVB4ABqIQUgA0EBaiEDDAALCws/AwF/AX8BfyAAIQQgAiEFQQAhAwJAA0AgAyABRg0BIAQgBRB1IARB4ABqIQQgBUEwaiEFIANBAWohAwwACwsLQAMBfwF/AX8gACEEIAIhBUEAIQMCQANAIAMgAUYNASAEIAUQdiAEQeAAaiEEIAVB4ABqIQUgA0EBaiEDDAALCwtSAwF/AX8BfyAAIAFBAWtBMGxqIQQgAiABQQFrQeAAbGohBUEAIQMCQANAIAMgAUYNASAEIAUQdyAEQTBrIQQgBUHgAGshBSADQQFqIQMMAAsLC1QDAX8BfwF/IAAgAUEBa0HgAGxqIQQgAiABQQFrQZABbGohBUEAIQMCQANAIAMgAUYNASAEIAUQXCAEQeAAayEEIAVBkAFrIQUgA0EBaiEDDAALCwtBAgF/AX8gAUEIbCACayEEIAMgBEoEQEEBIAR0QQFrIQUFQQEgA3RBAWshBQsgACACQQN2aigAACACQQdxdiAFcQuzAQkBfwF/AX8BfwF/AX8BfwF/AX9BASADQQFrdCEMIAFBA3QhDSAEQQFqIQggACEJQQAhBgJAA0AgBiACRg0BQQAhCkEAIQcCQANAIAcgCEYNASAFIAcgAmwgBmpqIAo6AAAgByADbCEOIA4gDUgEQCAJIAEgDiADEH0hCwVBACELCyALIApqIAxOBEBBASEKBUEAIQoLIAdBAWohBwwACwsgCSABaiEJIAZBAWohBgwACwsLiwMOAX8BfwF/AX8BfwF/AX8BfwF/AX8BfwF/AX8BfyAERQRAIAcQWQ8LQQEgBkEBa3QhDUEBIAZ0IQ4gAkEDdCEPIAUgBmwhEEEAKAIAIRFBACARIA1BkAFsajYCAEEAIQwCQANAIAwgDUYNASARIAxBkAFsahBZIAxBAWohDAwACwsgACEIIAEhCSADIAUgBGxqIQpBACELAkADQCALIARGDQEgECAPSARAIAkgAiAQIAYQfSESBUEAIRILIBIgCi0AAGohEyATIA1OBEAgEyAOayETCyATQQBKBEAgESATQQFrQZABbGohFCAUIAggFBBkBSATQQBIBEAgEUF/IBNrQZABbGohFCAUIAggFBBpCwsgCSACaiEJIApBAWohCiAIQZABaiEIIAtBAWohCwwACwsgESANQQFrQZABbGohFSAVIAcQWyAVQfjIABBbIBVBkAFrIRUCQANAIBUgEUkNAUH4yAAgFUH4yAAQZCAHQfjIACAHEGQgFUGQAWshFQwACwtBACARNgIAC9oBBwF/AX8BfwF/AX8BfwF/IAQQWSADRQRADwsgA2ctAJhLIQUgBUECSARAQQIhBQsgAkEDdEEBayAFbkEBaiEGIAZBAWohB0EAKAIAIQkgCSEIQQAgCSAHIANsakEDakF8cTYCACABIAIgAyAFIAYgCBB+IAYhCgJAA0AgCkEASA0BIAQQV0UEQEEAIQsCQANAIAsgBUYNASAEIAQQYSALQQFqIQsMAAsLCyAAIAEgAiAIIAMgCiAFQYjKABB/IARBiMoAIAQQZCAKQQFrIQoMAAsLQQAgCTYCAAtBAgF/AX8gAUEIbCACayEEIAMgBEoEQEEBIAR0QQFrIQUFQQEgA3RBAWshBQsgACACQQN2aigAACACQQdxdiAFcQu0AQkBfwF/AX8BfwF/AX8BfwF/AX9BASADQQFrdCEMIAFBA3QhDSAEQQFqIQggACEJQQAhBgJAA0AgBiACRg0BQQAhCkEAIQcCQANAIAcgCEYNASAFIAcgAmwgBmpqIAo6AAAgByADbCEOIA4gDUgEQCAJIAEgDiADEIEBIQsFQQAhCwsgCyAKaiAMTgRAQQEhCgVBACEKCyAHQQFqIQcMAAsLIAkgAWohCSAGQQFqIQYMAAsLC4wDDgF/AX8BfwF/AX8BfwF/AX8BfwF/AX8BfwF/AX8gBEUEQCAHEFkPC0EBIAZBAWt0IQ1BASAGdCEOIAJBA3QhDyAFIAZsIRBBACgCACERQQAgESANQZABbGo2AgBBACEMAkADQCAMIA1GDQEgESAMQZABbGoQWSAMQQFqIQwMAAsLIAAhCCABIQkgAyAFIARsaiEKQQAhCwJAA0AgCyAERg0BIBAgD0gEQCAJIAIgECAGEIEBIRIFQQAhEgsgEiAKLQAAaiETIBMgDU4EQCATIA5rIRMLIBNBAEoEQCARIBNBAWtBkAFsaiEUIBQgCCAUEGMFIBNBAEgEQCARQX8gE2tBkAFsaiEUIBQgCCAUEGgLCyAJIAJqIQkgCkEBaiEKIAhB4ABqIQggC0EBaiELDAALCyARIA1BAWtBkAFsaiEVIBUgBxBbIBVBuMsAEFsgFUGQAWshFQJAA0AgFSARSQ0BQbjLACAVQbjLABBkIAdBuMsAIAcQZCAVQZABayEVDAALC0EAIBE2AgAL3AEHAX8BfwF/AX8BfwF/AX8gBBBZIANFBEAPCyADZy0A2E0hBSAFQQJIBEBBAiEFCyACQQN0QQFrIAVuQQFqIQYgBkEBaiEHQQAoAgAhCSAJIQhBACAJIAcgA2xqQQNqQXxxNgIAIAEgAiADIAUgBiAIEIIBIAYhCgJAA0AgCkEASA0BIAQQV0UEQEEAIQsCQANAIAsgBUYNASAEIAQQYSALQQFqIQsMAAsLCyAAIAEgAiAIIAMgCiAFQcjMABCDASAEQcjMACAEEGQgCkEBayEKDAALC0EAIAk2AgALrgQHAX8BfwF/AX8BfwF/AX8gAkUEQCADEFkPCyACQQN0IQVBACgCACEEIAQhCkEAIARBIGogBWpBeHE2AgBBASEGIAFBAEEDdkF8cWooAgBBAEEfcXZBAXEhB0EAIQkCQANAIAYgBUYNASABIAZBA3ZBfHFqKAIAIAZBH3F2QQFxIQggBwRAIAgEQCAJBEBBACEHQQEhCSAKQQE6AAAgCkEBaiEKBUEAIQdBASEJIApB/wE6AAAgCkEBaiEKCwUgCQRAQQAhB0EBIQkgCkH/AToAACAKQQFqIQoFQQAhB0EAIQkgCkEBOgAAIApBAWohCgsLBSAIBEAgCQRAQQAhB0EBIQkgCkEAOgAAIApBAWohCgVBASEHQQAhCSAKQQA6AAAgCkEBaiEKCwUgCQRAQQEhB0EAIQkgCkEAOgAAIApBAWohCgVBACEHQQAhCSAKQQA6AAAgCkEBaiEKCwsLIAZBAWohBgwACwsgBwRAIAkEQCAKQf8BOgAAIApBAWohCiAKQQA6AAAgCkEBaiEKIApBAToAACAKQQFqIQoFIApBAToAACAKQQFqIQoLBSAJBEAgCkEAOgAAIApBAWohCiAKQQE6AAAgCkEBaiEKCwsgCkEBayEKIABB+M0AEFsgAxBZAkADQCADIAMQYSAKLQAAIQggCARAIAhBAUYEQCADQfjNACADEGQFIANB+M0AIAMQaQsLIAQgCkYNASAKQQFrIQoMAAsLQQAgBDYCAAuuBAcBfwF/AX8BfwF/AX8BfyACRQRAIAMQWQ8LIAJBA3QhBUEAKAIAIQQgBCEKQQAgBEEgaiAFakF4cTYCAEEBIQYgAUEAQQN2QXxxaigCAEEAQR9xdkEBcSEHQQAhCQJAA0AgBiAFRg0BIAEgBkEDdkF8cWooAgAgBkEfcXZBAXEhCCAHBEAgCARAIAkEQEEAIQdBASEJIApBAToAACAKQQFqIQoFQQAhB0EBIQkgCkH/AToAACAKQQFqIQoLBSAJBEBBACEHQQEhCSAKQf8BOgAAIApBAWohCgVBACEHQQAhCSAKQQE6AAAgCkEBaiEKCwsFIAgEQCAJBEBBACEHQQEhCSAKQQA6AAAgCkEBaiEKBUEBIQdBACEJIApBADoAACAKQQFqIQoLBSAJBEBBASEHQQAhCSAKQQA6AAAgCkEBaiEKBUEAIQdBACEJIApBADoAACAKQQFqIQoLCwsgBkEBaiEGDAALCyAHBEAgCQRAIApB/wE6AAAgCkEBaiEKIApBADoAACAKQQFqIQogCkEBOgAAIApBAWohCgUgCkEBOgAAIApBAWohCgsFIAkEQCAKQQA6AAAgCkEBaiEKIApBAToAACAKQQFqIQoLCyAKQQFrIQogAEGIzwAQWiADEFkCQANAIAMgAxBhIAotAAAhCCAIBEAgCEEBRgRAIANBiM8AIAMQYwUgA0GIzwAgAxBoCwsgBCAKRg0BIApBAWshCgwACwtBACAENgIAC0IAIABB/wFxLQDocEEYdCAAQQh2Qf8BcS0A6HBBEHRqIABBEHZB/wFxLQDocEEIdCAAQRh2Qf8BcS0A6HBqaiABdwtoBQF/AX8BfwF/AX9BASABdCECQQAhAwJAA0AgAyACRg0BIAAgA0EgbGohBSADIAEQhwEhBCAAIARBIGxqIQYgAyAESQRAIAVB6PIAECkgBiAFEClB6PIAIAYQKQsgA0EBaiEDDAALCwvaAQcBfwF/AX8BfwF/AX8BfyACRSADEDhxBEAPC0EBIAF0IQQgBEEBayEIQQEhByAEQQF2IQUCQANAIAcgBU8NASAAIAdBIGxqIQkgACAEIAdrQSBsaiEKIAIEQCADEDgEQCAJQYjzABApIAogCRApQYjzACAKECkFIAlBiPMAECkgCiADIAkQPUGI8wAgAyAKED0LBSADEDgEQAUgCSADIAkQPSAKIAMgChA9CwsgB0EBaiEHDAALCyADEDgEQAUgACADIAAQPSAAIAVBIGxqIQogCiADIAoQPQsL6gEJAX8BfwF/AX8BfwF/AX8BfwF/IAAgARCIAUEBIAF0IQlBASEEAkADQCAEIAFLDQFBASAEdCEHQejPACAEQSBsaiEKQQAhBQJAA0AgBSAJTw0BQajzABBFIAdBAXYhCEEAIQYCQANAIAYgCE8NASAAIAUgBmpBIGxqIQsgCyAIQSBsaiEMIAxBqPMAQcjzABA9IAtB6PMAEClB6PMAQcjzACALEDlB6PMAQcjzACAMEDpBqPMAIApBqPMAED0gBkEBaiEGDAALCyAFIAdqIQUMAAsLIARBAWohBAwACwsgACABIAIgAxCJAQtDAgF/AX8gAEEBdiECQQAhAQJAA0AgAkUNASACQQF2IQIgAUEBaiEBDAALCyAAQQEgAXRHBEAACyABQSBLBEAACyABCx4BAX8gARCLASECQYj0ABBFIAAgAkEAQYj0ABCKAQskAgF/AX8gARCLASECQYjYACACQSBsaiEDIAAgAkEBIAMQigELdgMBfwF/AX8gA0Go9AAQKUEAIQcCQANAIAcgAkYNASAAIAdBIGxqIQUgASAHQSBsaiEGIAZBqPQAQcj0ABA9IAVB6PQAEClB6PQAQcj0ACAFEDlB6PQAQcj0ACAGEDpBqPQAIARBqPQAED0gB0EBaiEHDAALCwuEAQQBfwF/AX8Bf0Go4AAgBUEgbGohCSADQYj1ABApQQAhCAJAA0AgCCACRg0BIAAgCEEgbGohBiABIAhBIGxqIQcgBiAHQaj1ABA5IAcgCSAHED0gBiAHIAcQOSAHQYj1ACAHED1BqPUAIAYQKUGI9QAgBEGI9QAQPSAIQQFqIQgMAAsLC54BBQF/AX8BfwF/AX9BqOAAIAVBIGxqIQlByOgAIAVBIGxqIQogA0HI9QAQKUEAIQgCQANAIAggAkYNASAAIAhBIGxqIQYgASAIQSBsaiEHIAdByPUAQej1ABA9IAZB6PUAIAcQOiAHIAogBxA9IAYgCSAGED1B6PUAIAYgBhA6IAYgCiAGED1ByPUAIARByPUAED0gCEEBaiEIDAALCwvFAQkBfwF/AX8BfwF/AX8BfwF/AX9BASACdCEEIARBAXYhBSABIAJ2IQMgBUEgbCEGQejPACACQSBsaiELQQAhCQJAA0AgCSADRg0BQYj2ABBFQQAhCgJAA0AgCiAFRg0BIAAgCSAEbCAKakEgbGohByAHIAZqIQggCEGI9gBBqPYAED0gB0HI9gAQKUHI9gBBqPYAIAcQOUHI9gBBqPYAIAgQOkGI9gAgC0GI9gAQPSAKQQFqIQoMAAsLIAlBAWohCQwACwsLewQBfwF/AX8BfyABQQF2IQYgAUEBcQRAIAAgBkEgbGogAiAAIAZBIGxqED0LQQAhBQJAA0AgBSAGTw0BIAAgBUEgbGohAyAAIAFBAWsgBWtBIGxqIQQgBCACQej2ABA9IAMgAiAEED1B6PYAIAMQKSAFQQFqIQUMAAsLC5gBBQF/AX8BfwF/AX9BqOAAIAVBIGxqIQlByOgAIAVBIGxqIQogA0GI9wAQKUEAIQgCQANAIAggAkYNASAAIAhBIGxqIQYgASAIQSBsaiEHIAYgCUGo9wAQPSAHQaj3AEGo9wAQOiAGIAcgBxA6Qaj3ACAKIAYQPSAHQYj3ACAHED1BiPcAIARBiPcAED0gCEEBaiEIDAALCwsuAgF/AX8gACEDIAAgAUEgbGohAgJAA0AgAyACRg0BIAMQKiADQSBqIQMMAAsLC44BBgF/AX8BfwF/AX8Bf0EAIQQgACEGIAEhBwJAA0AgBCACRg0BIAYoAgAhCSAGQQRqIQZBACEFAkADQCAFIAlGDQEgAyAGKAIAQSBsaiEIIAZBBGohBiAHIAZByPcAED1ByPcAIAggCBA5IAZBIGohBiAFQQFqIQUMAAsLIAdBIGohByAEQQFqIQQMAAsLC8gCCAF/AX8BfwF/AX8BfwF/AX8gAyELIAQhDCADIAdBIGxqIQ0CQANAIAsgDUYNASALECogDBAqIAtBIGohCyAMQSBqIQwMAAsLIAAhCiAAIAFBLGxqIQ0CQANAIAogDUYNASAKKAIIIRAgECAISSAQIAggCWpPcgRAIApBLGohCgwBCyAKKAIAIQ4gDkEARgRAIAMhEQUgDkEBRgRAIAQhEQUgCkEsaiEKDAELCyAKKAIEIQ8gDyAGSSAPIAYgB2pPcgRAIApBLGohCgwBCyARIA8gBmtBIGxqIREgAiAQIAhrQSBsaiAKQQxqQej3ABA9IBFB6PcAIBEQOSAKQSxqIQoMAAsLIAMhCyAEIQwgBSEKIAMgB0EgbGohDQJAA0AgCyANRg0BIAsgDCAKED0gC0EgaiELIAxBIGohDCAKQSBqIQoMAAsLC2UFAX8BfwF/AX8BfyAAIQUgASEGIAIhByAEIQggACADQSBsaiEJAkADQCAFIAlGDQEgBSAGQYj4ABA9QYj4ACAHIAgQOiAFQSBqIQUgBkEgaiEGIAdBIGohByAIQSBqIQgMAAsLC0wEAX8BfwF/AX8gACEEIAEhBSADIQYgACACQSBsaiEHAkADQCAEIAdGDQEgBCAFIAYQOSAEQSBqIQQgBUEgaiEFIAZBIGohBgwACwsLDgAgABACIABBMGoQAnELDwAgABAPIABBMGoQAnEPCw0AIAAQASAAQTBqEAELDQAgABAcIABBMGoQAQsUACAAIAEQACAAQTBqIAFBMGoQAAt1ACAAIAFBqPgAEBQgAEEwaiABQTBqQdj4ABAUIAAgAEEwakGI+QAQECABIAFBMGpBuPkAEBBBiPkAQbj5AEGI+QAQFEHY+AAgAhASQaj4ACACIAIQEEGo+ABB2PgAIAJBMGoQEEGI+QAgAkEwaiACQTBqEBELGAAgACABIAIQFCAAQTBqIAEgAkEwahAUC3AAIAAgAEEwakHo+QAQFCAAIABBMGpBmPoAEBAgAEEwakHI+gAQEiAAQcj6AEHI+gAQEEHo+QBB+PoAEBJB+PoAQej5AEH4+gAQEEGY+gBByPoAIAEQFCABQfj6ACABEBFB6PkAQej5ACABQTBqEBALGwAgACABIAIQECAAQTBqIAFBMGogAkEwahAQCxsAIAAgASACEBEgAEEwaiABQTBqIAJBMGoQEQsUACAAIAEQEiAAQTBqIAFBMGoQEgsUACAAIAEQACAAQTBqIAFBMGoQEgsUACAAIAEQFyAAQTBqIAFBMGoQFwsUACAAIAEQGCAAQTBqIAFBMGoQGAsVACAAIAEQBCAAQTBqIAFBMGoQBHELXQAgAEGo+wAQFSAAQTBqQdj7ABAVQdj7AEGI/AAQEkGo+wBBiPwAQYj8ABARQYj8AEG4/AAQGyAAQbj8ACABEBQgAEEwakG4/AAgAUEwahAUIAFBMGogAUEwahASCxwAIAAgASACIAMQHiAAQTBqIAEgAiADQTBqEB4LGgEBfyAAQTBqEBohASABBEAgAQ8LIAAQGg8LGQAgAEEwahACBEAgABAZDwsgAEEwahAZDwuPAgQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpB4ABsajYCACAFEJwBIAAhBiAFQeAAaiEFQQAhCAJAA0AgCCACRg0BIAYQmQEEQCAFQeAAayAFEJ0BBSAGIAVB4ABrIAUQngELIAYgAWohBiAFQeAAaiEFIAhBAWohCAwACwsgBiABayEGIAVB4ABrIQUgAyACQQFrIARsaiEHIAUgBRCoAQJAA0AgCEUNASAGEJkBBEAgBSAFQeAAaxCdASAHEJsBBSAFQeAAa0Ho/AAQnQEgBSAGIAVB4ABrEJ4BIAVB6PwAIAcQngELIAYgAWshBiAHIARrIQcgBUHgAGshBSAIQQFrIQgMAAsLQQAgBTYCAAvOAgIBfwF/IAJFBEAgAxCcAQ8LIABByP0AEJ0BIAMQnAEgAiEEAkADQCAEQQFrIQQgASAEai0AACEFIAMgAxCgASAFQYABTwRAIAVBgAFrIQUgA0HI/QAgAxCeAQsgAyADEKABIAVBwABPBEAgBUHAAGshBSADQcj9ACADEJ4BCyADIAMQoAEgBUEgTwRAIAVBIGshBSADQcj9ACADEJ4BCyADIAMQoAEgBUEQTwRAIAVBEGshBSADQcj9ACADEJ4BCyADIAMQoAEgBUEITwRAIAVBCGshBSADQcj9ACADEJ4BCyADIAMQoAEgBUEETwRAIAVBBGshBSADQcj9ACADEJ4BCyADIAMQoAEgBUECTwRAIAVBAmshBSADQcj9ACADEJ4BCyADIAMQoAEgBUEBTwRAIAVBAWshBSADQcj9ACADEJ4BCyAERQ0BDAALCwvNAQBBqIEBEJwBQaiBAUGogQEQowEgAEGo/gBBMEGI/wAQrQFBiP8AQej/ABCgASAAQej/AEHo/wAQngFB6P8AQciAARCkAUHIgAFB6P8AQciAARCeAUHIgAFBqIEBEKcBBEAAC0GI/wAgAEGIggEQngFB6P8AQaiBARCnAQRAQaiBARABQdiBARAcQaiBAUGIggEgARCeAQVB6IIBEJwBQeiCAUHo/wBB6IIBEKEBQeiCAUHY/gBBMEHoggEQrQFB6IIBQYiCASABEJ4BCwtpAEGYhgEQnAFBmIYBQZiGARCjASAAQciDAUEwQfiDARCtAUH4gwFB2IQBEKABIABB2IQBQdiEARCeAUHYhAFBuIUBEKQBQbiFAUHYhAFBuIUBEJ4BQbiFAUGYhgEQpwEEQEEADwtBAQ8LEQAgABCZASAAQeAAahCZAXELCwAgAEHAAWoQmQELEAAgABCbASAAQeAAahCbAQsZACAAEJsBIABB4ABqEJwBIABBwAFqEJsBC4ICACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWCABIAApA2A3A2AgASAAKQNoNwNoIAEgACkDcDcDcCABIAApA3g3A3ggASAAKQOAATcDgAEgASAAKQOIATcDiAEgASAAKQOQATcDkAEgASAAKQOYATcDmAEgASAAKQOgATcDoAEgASAAKQOoATcDqAEgASAAKQOwATcDsAEgASAAKQO4ATcDuAELkgMAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYIAEgACkDYDcDYCABIAApA2g3A2ggASAAKQNwNwNwIAEgACkDeDcDeCABIAApA4ABNwOAASABIAApA4gBNwOIASABIAApA5ABNwOQASABIAApA5gBNwOYASABIAApA6ABNwOgASABIAApA6gBNwOoASABIAApA7ABNwOwASABIAApA7gBNwO4ASABIAApA8ABNwPAASABIAApA8gBNwPIASABIAApA9ABNwPQASABIAApA9gBNwPYASABIAApA+ABNwPgASABIAApA+gBNwPoASABIAApA/ABNwPwASABIAApA/gBNwP4ASABIAApA4ACNwOAAiABIAApA4gCNwOIAiABIAApA5ACNwOQAiABIAApA5gCNwOYAgsvACAAELABBEAgARCzAQUgAUHAAWoQnAEgAEHgAGogAUHgAGoQnQEgACABEJ0BCwscAQF/IAAgARCnASAAQeAAaiABQeAAahCnAXEPC4sBAQF/IABBwAFqIQIgABCxAQRAIAEQsAEPCyABELABBEBBAA8LIAIQmgEEQCAAIAEQtwEPCyACQdiHARCgASABQdiHAUG4iAEQngEgAkHYhwFBmIkBEJ4BIAFB4ABqQZiJAUH4iQEQngEgAEG4iAEQpwEEQCAAQeAAakH4iQEQpwEEQEEBDwsLQQAPC9kBAgF/AX8gAEHAAWohAiABQcABaiEDIAAQsQEEQCABELEBDwsgARCxAQRAQQAPCyACEJoBBEAgASAAELgBDwsgAxCaAQRAIAAgARC4AQ8LIAJB2IoBEKABIANBuIsBEKABIABBuIsBQZiMARCeASABQdiKAUH4jAEQngEgAkHYigFB2I0BEJ4BIANBuIsBQbiOARCeASAAQeAAakG4jgFBmI8BEJ4BIAFB4ABqQdiNAUH4jwEQngFBmIwBQfiMARCnAQRA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IABB4ABqIABBwAFqQajhAhChASABQeAAaiABQcABakGI4gIQoQFBiNwCQejcAkHo4gIQoQFBiNwCQcjdAkHI4wIQoQFB6NwCQcjdAkGo5AIQoQFBqOECQYjiAiACEJ4BIAJBqOQCIAIQogEgAiACEIQCQYjcAiACIAIQoQFBqN4CQYjfAiACQeAAahCeASACQeAAakHo4gIgAkHgAGoQogFByN0CQYjlAhCEAiACQeAAakGI5QIgAkHgAGoQoQFB6N8CQcjgAiACQcABahCeASACQcABakHI4wIgAkHAAWoQogEgAkHAAWpB6NwCIAJBwAFqEKEBC4ECACAAQejlAhCgASAAIABB4ABqQcjmAhCeAUHI5gJByOYCQajnAhChASAAIABB4ABqQYjoAhCiAUGI6AIgAEHAAWpBiOgCEKEBQYjoAkGI6AIQoAEgAEHgAGogAEHAAWpB6OgCEJ4BQejoAkHo6AJByOkCEKEBIABBwAFqQajqAhCgAUHI6QIgARCEAkHo5QIgASABEKEBQajqAiABQeAAahCEAkGo5wIgAUHgAGogAUHgAGoQoQFB6OUCQajqAiABQcABahChAUHI6QIgAUHAAWogAUHAAWoQogFBiOgCIAFBwAFqIAFBwAFqEKEBQajnAiABQcABaiABQcABahChAQs1ACAAIAEgAhChASAAQeAAaiABQeAAaiACQeAAahChASAAQcABaiABQcABaiACQcABahChAQs1ACAAIAEgAhCiASAAQeAAaiABQeAAaiACQeAAahCiASAAQcABaiABQcABaiACQcABahCiAQsnACAAIAEQowEgAEHgAGogAUHgAGoQowEgAEHAAWogAUHAAWoQowELMAEBfyAAQcABahCqASEBIAEEQCABDwsgAEHgAGoQqgEhASABBEAgAQ8LIAAQqgEPCycAIAAgARClASAAQeAAaiABQeAAahClASAAQcABaiABQcABahClAQsnACAAIAEQpgEgAEHgAGogAUHgAGoQpgEgAEHAAWogAUHAAWoQpgELKQAgACABEKcBIABB4ABqIAFB4ABqEKcBcSAAQcABaiABQcABahCnAXELqwIAIABBiOsCEKABIABB4ABqQejrAhCgASAAQcABakHI7AIQoAEgACAAQeAAakGo7QIQngEgACAAQcABakGI7gIQngEgAEHgAGogAEHAAWpB6O4CEJ4BQejuAkHI7wIQhAJBiOsCQcjvAkHI7wIQogFByOwCQajwAhCEAkGo8AJBqO0CQajwAhCiAUHo6wJBiO4CQYjxAhCiASAAQcABakGo8AJB6PECEJ4BIABB4ABqQYjxAkHI8gIQngFB6PECQcjyAkHo8QIQoQFB6PECQejxAhCEAiAAQcjvAkHI8gIQngFByPICQejxAkHo8QIQoQFB6PECQejxAhCoAUHo8QJByO8CIAEQngFB6PECQajwAiABQeAAahCeAUHo8QJBiPECIAFBwAFqEJ4BCzMAIAAgASACIAMQqQEgAEHgAGogASACIANB4ABqEKkBIABBwAFqIAEgAiADQcABahCpAQs1ACAAQcABahCZAQRAIABB4ABqEJkBBEAgABCrAQ8FIABB4ABqEKsBDwsLIABBwAFqEKsBDwuPAgQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpBoAJsajYCACAFEIgCIAAhBiAFQaACaiEFQQAhCAJAA0AgCCACRg0BIAYQhQIEQCAFQaACayAFEIkCBSAGIAVBoAJrIAUQigILIAYgAWohBiAFQaACaiEFIAhBAWohCAwACwsgBiABayEGIAVBoAJrIQUgAyACQQFrIARsaiEHIAUgBRCTAgJAA0AgCEUNASAGEIUCBEAgBSAFQaACaxCJAiAHEIcCBSAFQaACa0Go8wIQiQIgBSAGIAVBoAJrEIoCIAVBqPMCIAcQigILIAYgAWshBiAHIARrIQcgBUGgAmshBSAIQQFrIQgMAAsLQQAgBTYCAAvOAgIBfwF/IAJFBEAgAxCIAg8LIABByPUCEIkCIAMQiAIgAiEEAkADQCAEQQFrIQQgASAEai0AACEFIAMgAxCLAiAFQYABTwRAIAVBgAFrIQUgA0HI9QIgAxCKAgsgAyADEIsCIAVBwABPBEAgBUHAAGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEgTwRAIAVBIGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEQTwRAIAVBEGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEITwRAIAVBCGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEETwRAIAVBBGshBSADQcj1AiADEIoCCyADIAMQiwIgBUECTwRAIAVBAmshBSADQcj1AiADEIoCCyADIAMQiwIgBUEBTwRAIAVBAWshBSADQcj1AiADEIoCCyAERQ0BDAALCwsyACAAQej3AhCdASAAQcABaiABEIQCIABB4ABqIAFBwAFqEJ0BQej3AiABQeAAahCdAQsRACAAEIUCIABBoAJqEIUCcQsSACAAEIYCIABBoAJqEIUCcQ8LEAAgABCHAiAAQaACahCHAgsQACAAEIgCIABBoAJqEIcCCxgAIAAgARCJAiAAQaACaiABQaACahCJAguFAQAgACABQcj4AhCKAiAAQaACaiABQaACakHo+gIQigIgACAAQaACakGI/QIQjAIgASABQaACakGo/wIQjAJBiP0CQaj/AkGI/QIQigJB6PoCIAIQmAJByPgCIAIgAhCMAkHI+AJB6PoCIAJBoAJqEIwCQYj9AiACQaACaiACQaACahCNAgscACAAIAEgAhCKAiAAQaACaiABIAJBoAJqEIoCC30AIAAgAEGgAmpByIEDEIoCIAAgAEGgAmpB6IMDEIwCIABBoAJqQYiGAxCYAiAAQYiGA0GIhgMQjAJByIEDQaiIAxCYAkGoiANByIEDQaiIAxCMAkHogwNBiIYDIAEQigIgAUGoiAMgARCNAkHIgQNByIEDIAFBoAJqEIwCCyAAIAAgASACEIwCIABBoAJqIAFBoAJqIAJBoAJqEIwCCyAAIAAgASACEI0CIABBoAJqIAFBoAJqIAJBoAJqEI0CCxgAIAAgARCOAiAAQaACaiABQaACahCOAgsYACAAIAEQiQIgAEGgAmogAUGgAmoQjgILGAAgACABEJACIABBoAJqIAFBoAJqEJACCxgAIAAgARCRAiAAQaACaiABQaACahCRAgsZACAAIAEQkgIgAEGgAmogAUGgAmoQkgJxC2oAIABByIoDEIsCIABBoAJqQeiMAxCLAkHojANBiI8DEJgCQciKA0GIjwNBiI8DEI0CQYiPA0GokQMQkwIgAEGokQMgARCKAiAAQaACakGokQMgAUGgAmoQigIgAUGgAmogAUGgAmoQjgILIAAgACABIAIgAxCUAiAAQaACaiABIAIgA0GgAmoQlAILHQEBfyAAQaACahCPAiEBIAEEQCABDwsgABCPAg8LHgAgAEGgAmoQhQIEQCAAEJUCDwsgAEGgAmoQlQIPC48CBAF/AX8BfwF/QQAoAgAhBUEAIAUgAkEBakHABGxqNgIAIAUQnAIgACEGIAVBwARqIQVBACEIAkADQCAIIAJGDQEgBhCZAgRAIAVBwARrIAUQnQIFIAYgBUHABGsgBRCeAgsgBiABaiEGIAVBwARqIQUgCEEBaiEIDAALCyAGIAFrIQYgBUHABGshBSADIAJBAWsgBGxqIQcgBSAFEKgCAkADQCAIRQ0BIAYQmQIEQCAFIAVBwARrEJ0CIAcQmwIFIAVBwARrQciTAxCdAiAFIAYgBUHABGsQngIgBUHIkwMgBxCeAgsgBiABayEGIAcgBGshByAFQcAEayEFIAhBAWshCAwACwtBACAFNgIAC84CAgF/AX8gAkUEQCADEJwCDwsgAEGImAMQnQIgAxCcAiACIQQCQANAIARBAWshBCABIARqLQAAIQUgAyADEKACIAVBgAFPBEAgBUGAAWshBSADQYiYAyADEJ4CCyADIAMQoAIgBUHAAE8EQCAFQcAAayEFIANBiJgDIAMQngILIAMgAxCgAiAFQSBPBEAgBUEgayEFIANBiJgDIAMQngILIAMgAxCgAiAFQRBPBEAgBUEQayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQhPBEAgBUEIayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQRPBEAgBUEEayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQJPBEAgBUECayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQFPBEAgBUEBayEFIANBiJgDIAMQngILIARFDQEMAAsLC9EBAEHIrgMQnAJByK4DQciuAxCjAiAAQcicA0GgAkGIoQMQrQJBiKEDQcilAxCgAiAAQcilA0HIpQMQngJByKUDQYiqAxCkAkGIqgNByKUDQYiqAxCeAkGIqgNByK4DEKcCBEAAC0GIoQMgAEGIswMQngJByKUDQciuAxCnAgRAQciuAxCHAkHosAMQiAJByK4DQYizAyABEJ4CBUHItwMQnAJByLcDQcilA0HItwMQoQJByLcDQeieA0GgAkHItwMQrQJByLcDQYizAyABEJ4CCwtqAEHoywMQnAJB6MsDQejLAxCjAiAAQYi8A0GgAkGovgMQrQJBqL4DQejCAxCgAiAAQejCA0HowgMQngJB6MIDQajHAxCkAkGoxwNB6MIDQajHAxCeAkGoxwNB6MsDEKcCBEBBAA8LQQEPC3gAIAAgAEHgAGpB6NADEKEBIABB4ABqIABBwAFqQcjRAxChASAAQeAAaiABIAJBwAFqEJ4BQcjRAyABIAIQngEgAiACQcABaiACEKIBIAIgAhCEAkHo0AMgASACQeAAahCeASACQeAAaiACQcABaiACQeAAahCiAQvsAQAgACABQajSAxCeASAAQeAAaiACQYjTAxCeASAAIABB4ABqQejTAxChASAAIABBwAFqQcjUAxChASAAQeAAaiAAQcABaiADEKEBIAMgAiADEJ4BIANBiNMDIAMQogEgAyADEIQCIANBqNIDIAMQoQEgASACIANB4ABqEKEBIANB4ABqQejTAyADQeAAahCeASADQeAAakGo0gMgA0HgAGoQogEgA0HgAGpBiNMDIANB4ABqEKIBQcjUAyABIANBwAFqEJ4BIANBwAFqQajSAyADQcABahCiASADQcABakGI0wMgA0HAAWoQoQELkAEAIAAgASACQajVAxCxAiAAQaACaiADQcjXAxCwAiACIANB6NkDEKEBIABBoAJqIAAgBEGgAmoQjAIgBEGgAmogAUHo2QMgBEGgAmoQsQIgBEGgAmpBqNUDIARBoAJqEI0CIARBoAJqQcjXAyAEQaACahCNAkHI1wMgBBCJAiAEIAQQmAIgBEGo1QMgBBCMAgtQACABIABBMGpByNoDEBQgAUEwaiAAQTBqQfjaAxAUIAFB4ABqIABBqNsDEBQgAUGQAWogAEHY2wMQFCACIAFBwAFqQajbA0HI2gMgAhCyAgtsACAAQYj+BCABEJ4BIABB4ABqQej+BCABQeAAahCeASAAQcABakHI/wQgAUHAAWoQngEgAEGgAmpBqIAFIAFBoAJqEJ4BIABBgANqQYiBBSABQYADahCeASAAQeADakHogQUgAUHgA2oQngELigIAIAAgARAAIABBMGogAUEwahASIAFByIIFIAEQngEgAEHgAGogAUHgAGoQACAAQZABaiABQZABahASIAFB4ABqQaiDBSABQeAAahCeASAAQcABaiABQcABahAAIABB8AFqIAFB8AFqEBIgAUHAAWpBiIQFIAFBwAFqEJ4BIABBoAJqIAFBoAJqEAAgAEHQAmogAUHQAmoQEiABQaACakHohAUgAUGgAmoQngEgAEGAA2ogAUGAA2oQACAAQbADaiABQbADahASIAFBgANqQciFBSABQYADahCeASAAQeADaiABQeADahAAIABBkARqIAFBkARqEBIgAUHgA2pBqIYFIAFB4ANqEJ4BC2wAIABBiIcFIAEQngEgAEHgAGpB6IcFIAFB4ABqEJ4BIABBwAFqQciIBSABQcABahCeASAAQaACakGoiQUgAUGgAmoQngEgAEGAA2pBiIoFIAFBgANqEJ4BIABB4ANqQeiKBSABQeADahCeAQuKAgAgACABEAAgAEEwaiABQTBqEBIgAUHIiwUgARCeASAAQeAAaiABQeAAahAAIABBkAFqIAFBkAFqEBIgAUHgAGpBqIwFIAFB4ABqEJ4BIABBwAFqIAFBwAFqEAAgAEHwAWogAUHwAWoQEiABQcABakGIjQUgAUHAAWoQngEgAEGgAmogAUGgAmoQACAAQdACaiABQdACahASIAFBoAJqQeiNBSABQaACahCeASAAQYADaiABQYADahAAIABBsANqIAFBsANqEBIgAUGAA2pByI4FIAFBgANqEJ4BIABB4ANqIAFB4ANqEAAgAEGQBGogAUGQBGoQEiABQeADakGojwUgAUHgA2oQngELbAAgAEGIkAUgARCeASAAQeAAakHokAUgAUHgAGoQngEgAEHAAWpByJEFIAFBwAFqEJ4BIABBoAJqQaiSBSABQaACahCeASAAQYADakGIkwUgAUGAA2oQngEgAEHgA2pB6JMFIAFB4ANqEJ4BC4oCACAAIAEQACAAQTBqIAFBMGoQEiABQciUBSABEJ4BIABB4ABqIAFB4ABqEAAgAEGQAWogAUGQAWoQEiABQeAAakGolQUgAUHgAGoQngEgAEHAAWogAUHAAWoQACAAQfABaiABQfABahASIAFBwAFqQYiWBSABQcABahCeASAAQaACaiABQaACahAAIABB0AJqIAFB0AJqEBIgAUGgAmpB6JYFIAFBoAJqEJ4BIABBgANqIAFBgANqEAAgAEGwA2ogAUGwA2oQEiABQYADakHIlwUgAUGAA2oQngEgAEHgA2ogAUHgA2oQACAAQZAEaiABQZAEahASIAFB4ANqQaiYBSABQeADahCeAQtsACAAQYiZBSABEJ4BIABB4ABqQeiZBSABQeAAahCeASAAQcABakHImgUgAUHAAWoQngEgAEGgAmpBqJsFIAFBoAJqEJ4BIABBgANqQYicBSABQYADahCeASAAQeADakHonAUgAUHgA2oQngELigIAIAAgARAAIABBMGogAUEwahASIAFByJ0FIAEQngEgAEHgAGogAUHgAGoQACAAQZABaiABQZABahASIAFB4ABqQaieBSABQeAAahCeASAAQcABaiABQcABahAAIABB8AFqIAFB8AFqEBIgAUHAAWpBiJ8FIAFBwAFqEJ4BIABBoAJqIAFBoAJqEAAgAEHQAmogAUHQAmoQEiABQaACakHonwUgAUGgAmoQngEgAEGAA2ogAUGAA2oQACAAQbADaiABQbADahASIAFBgANqQcigBSABQYADahCeASAAQeADaiABQeADahAAIABBkARqIAFBkARqEBIgAUHgA2pBqKEFIAFB4ANqEJ4BC2wAIABBiKIFIAEQngEgAEHgAGpB6KIFIAFB4ABqEJ4BIABBwAFqQcijBSABQcABahCeASAAQaACakGopAUgAUGgAmoQngEgAEGAA2pBiKUFIAFBgANqEJ4BIABB4ANqQeilBSABQeADahCeAQuKAgAgACABEAAgAEEwaiABQTBqEBIgAUHIpgUgARCeASAAQeAAaiABQeAAahAAIABBkAFqIAFBkAFqEBIgAUHgAGpBqKcFIAFB4ABqEJ4BIABBwAFqIAFBwAFqEAAgAEHwAWogAUHwAWoQEiABQcABakGIqAUgAUHAAWoQngEgAEGgAmogAUGgAmoQACAAQdACaiABQdACahASIAFBoAJqQeioBSABQaACahCeASAAQYADaiABQYADahAAIABBsANqIAFBsANqEBIgAUGAA2pByKkFIAFBgANqEJ4BIABB4ANqIAFB4ANqEAAgAEGQBGogAUGQBGoQEiABQeADakGoqgUgAUHgA2oQngELhQEAIAAQVgRAQQEPCyAAEG9FBEBBAA8LIABBiKsFQfirBRAUIABBMGpBqKwFEAAgAEG4qwVBiK0FEBQgAEEwakG4rQUQAEH4qwVB+KsFEGBB+KsFIABB+KsFEGhB+KsFQYitBUH4qwUQaEH4qwVB6KsFQRBB+KsFEIUBQfirBUGIrQUQXg8LEgAgAEHorQUQbkHorQUQvgIPC7QCACAAELABBEBBAQ8LIAAQyQFFBEBBAA8LIABByK4FQfCwBRCeASAAQeAAakHIrgVB0LEFEJ4BQfCwBUGorwVBsLIFEJ8BQdCxBUGQswUQowFB8LAFQfCzBRCjAUHQsQVB2K8FQdC0BRCeAUGwsgVB4LIFQcCwBRARQbCyBUHgsgVB4LIFEBBBwLAFQbCyBRAAQZCzBUHAswVBwLAFEBFBkLMFQcCzBUHAswUQEEHAsAVBkLMFEABB8LMFQaC0BUHAsAUQEEHwswVBoLQFQaC0BRARQcCwBUHwswUQAEGAtQVB0LQFQcCwBRARQdC0BUGAtQVBgLUFEBBBwLAFQdC0BRAAQbC1BRCcAUHwswVBuLAFQQhB8LMFEN8BQfCzBUGwsgVB8LMFEL0BQfCzBSAAELgBDwsTACAAQZC2BRDIAUGQtgUQwAIPC9gEACAAQcABakHQtwUQoAEgAUHgAGpBsLgFEKABQdC3BSABQfC5BRCeASABQeAAaiAAQcABaiACQeAAahChASACQeAAaiACQeAAahCgASACQeAAakGwuAUgAkHgAGoQogEgAkHgAGpB0LcFIAJB4ABqEKIBIAJB4ABqQdC3BSACQeAAahCeAUHwuQUgAEHQugUQogFB0LoFQbC7BRCgAUGwuwVBsLsFQZC8BRChAUGQvAVBkLwFQZC8BRChAUGQvAVB0LoFQfC8BRCeASACQeAAaiAAQeAAakHQvQUQogFB0L0FIABB4ABqQdC9BRCiAUHQvQUgASACQcABahCeAUGQvAUgAEGwvgUQngFB0L0FIAAQoAEgAEHwvAUgABCiASAAQbC+BSAAEKIBIABBsL4FIAAQogEgAEHAAWpB0LoFIABBwAFqEKEBIABBwAFqIABBwAFqEKABIABBwAFqQdC3BSAAQcABahCiASAAQcABakGwuwUgAEHAAWoQogEgAUHgAGogAEHAAWogAhChAUGwvgUgAEGQvwUQogFBkL8FQdC9BUGQvwUQngEgAEHgAGpB8LwFQfC5BRCeAUHwuQVB8LkFQfC5BRChAUGQvwVB8LkFIABB4ABqEKIBIAIgAhCgASACQbC4BSACEKIBIABBwAFqQZC5BRCgASACQZC5BSACEKIBIAJBwAFqIAJBwAFqIAJBwAFqEKEBIAJBwAFqIAIgAkHAAWoQogEgAEHAAWogAEHAAWogAhChAUHQvQVB0L0FEKMBQdC9BUHQvQUgAkHgAGoQoQELsgQAIAAgARCgASAAQeAAakHQwAUQoAFB0MAFQbDBBRCgAUHQwAUgACABQeAAahChASABQeAAaiABQeAAahCgASABQeAAaiABIAFB4ABqEKIBIAFB4ABqQbDBBSABQeAAahCiASABQeAAaiABQeAAaiABQeAAahChASABIAFBkMIFEKEBQZDCBSABQZDCBRChASAAQZDCBSABQcABahChAUGQwgVB8MIFEKABIABBwAFqQfC/BRCgAUHwwgUgAUHgAGogABCiASAAIAFB4ABqIAAQogEgAEHAAWogAEHgAGogAEHAAWoQoQEgAEHAAWogAEHAAWoQoAEgAEHAAWpB0MAFIABBwAFqEKIBIABBwAFqQfC/BSAAQcABahCiASABQeAAaiAAIABB4ABqEKIBIABB4ABqQZDCBSAAQeAAahCeAUGwwQVBsMEFQbDBBRChAUGwwQVBsMEFQbDBBRChAUGwwQVBsMEFQbDBBRChASAAQeAAakGwwQUgAEHgAGoQogFBkMIFQfC/BSABQeAAahCeASABQeAAaiABQeAAaiABQeAAahChASABQeAAaiABQeAAahCjASABQcABaiABQcABahCgASABQcABaiABIAFBwAFqEKIBIAFBwAFqQfDCBSABQcABahCiAUHQwAVB0MAFQdDABRChAUHQwAVB0MAFQdDABRChASABQcABakHQwAUgAUHAAWoQogEgAEHAAWpB8L8FIAEQngEgASABIAEQoQELCAAgACABEHILbQIBfwF/IAAgARDMASABELEBBEAPCyABQdDDBRC1ASABQaACaiECQT4hAwJAA0BB0MMFIAIQwwIgAkGgAmohAiADLACo0AMEQEHQwwUgASACEMICIAJBoAJqIQILIANFDQEgA0EBayEDDAALCwuAAQIBfwF/IAIQnAIgABBXBEAPCyABEFcEQA8LIAFBoAJqIQNBPiEEAkADQCAAIAMgAhCzAiADQaACaiEDIAQsAKjQAwRAIAAgAyACELMCIANBoAJqIQMLIAIgAhCgAiAEQQFGDQEgBEEBayEEDAALCyAAIAMgAhCzAiACIAIQpAILEAAgAEHwxQVBoAQgARCtAgvsBQAgACAAQYADakHQzgUQngEgAEGAA2pBkMoFEIQCIABBkMoFQZDKBRChASAAIABBgANqQbDPBRChAUGwzwVBkMoFQZDKBRCeAUHQzgVBsM8FEIQCQdDOBUGwzwVBsM8FEKEBQZDKBUGwzwVBkMoFEKIB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";
- exports.pq = 712;
- exports.pr = 3464;
- exports.pG1gen = 42968;
- exports.pG1zero = 43112;
- exports.pG1b = 4776;
- exports.pG2gen = 43256;
- exports.pG2zero = 43544;
- exports.pG2b = 17272;
- exports.pOneT = 43832;
- exports.prePSize = 288;
- exports.preQSize = 20448;
- exports.n8q = 48;
- exports.n8r = 32;
- exports.q = "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787";
- exports.r = "52435875175126190479447740508185965837690552500527637822603658699938581184513";
-
\ No newline at end of file
+export const code = "AGFzbQEAAAABlQESYAJ/fwBgAX8AYAF/AX9gAn9/AX9gA39/fwF/YAN/f38AYAN/fn8AYAJ/fgBgBH9/f38AYAV/f39/fwBgBH9/f38Bf2AGf39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38Bf2AHf39/f39/fwF/YAl/f39/f39/f38Bf2ALf39/f39/f39/f38BfwIPAQNlbnYGbWVtb3J5AgAZA9MC0QIAAQIBAwMEBAUAAAYHCAUCBQUAAAUAAAAAAgIAAQUICQUFBQgICAgAAgABAgEDAwQEBQAABgcIBQIFBQAABQAAAAACAgABBQgJBQUFCAgICAACBQAAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgDAAgIAgAACQsLBQULAAgNCQgCAgEBAAUFAAUFAAAAAAMACAICCQgAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgFAwAICAIAAAkLCwUFCwUDAAgIAgAACQsLBQULBQUJCQkJCQACAgEBAAUABQUAAgAAAwAIAgkIAAICAQEABQUABQUAAAAAAwAIAgIJCAACBQgJBQAAAAAAAAAAAAACAgICBQAAAAUAAAAABA4PEBEFB84nvQIJaW50cV9jb3B5AAAJaW50cV96ZXJvAAEIaW50cV9vbmUAAwtpbnRxX2lzWmVybwACB2ludHFfZXEABAhpbnRxX2d0ZQAFCGludHFfYWRkAAYIaW50cV9zdWIABwhpbnRxX211bAAIC2ludHFfc3F1YXJlAAkOaW50cV9zcXVhcmVPbGQACghpbnRxX2RpdgAND2ludHFfaW52ZXJzZU1vZAAOCGYxbV9jb3B5AAAIZjFtX3plcm8AAQpmMW1faXNaZXJvAAIGZjFtX2VxAAQHZjFtX2FkZAAQB2YxbV9zdWIAEQdmMW1fbmVnABIOZjFtX2lzTmVnYXRpdmUAGQlmMW1faXNPbmUADwhmMW1fc2lnbgAaC2YxbV9tUmVkdWN0ABMHZjFtX211bAAUCmYxbV9zcXVhcmUAFQ1mMW1fc3F1YXJlT2xkABYSZjFtX2Zyb21Nb250Z29tZXJ5ABgQZjFtX3RvTW9udGdvbWVyeQAXC2YxbV9pbnZlcnNlABsHZjFtX29uZQAcCGYxbV9sb2FkAB0PZjFtX3RpbWVzU2NhbGFyAB4HZjFtX2V4cAAmEGYxbV9iYXRjaEludmVyc2UAHwhmMW1fc3FydAAnDGYxbV9pc1NxdWFyZQAoFWYxbV9iYXRjaFRvTW9udGdvbWVyeQAgF2YxbV9iYXRjaEZyb21Nb250Z29tZXJ5ACEJaW50cl9jb3B5ACkJaW50cl96ZXJvACoIaW50cl9vbmUALAtpbnRyX2lzWmVybwArB2ludHJfZXEALQhpbnRyX2d0ZQAuCGludHJfYWRkAC8IaW50cl9zdWIAMAhpbnRyX211bAAxC2ludHJfc3F1YXJlADIOaW50cl9zcXVhcmVPbGQAMwhpbnRyX2RpdgA2D2ludHJfaW52ZXJzZU1vZAA3CGZybV9jb3B5ACkIZnJtX3plcm8AKgpmcm1faXNaZXJvACsGZnJtX2VxAC0HZnJtX2FkZAA5B2ZybV9zdWIAOgdmcm1fbmVnADsOZnJtX2lzTmVnYXRpdmUAQglmcm1faXNPbmUAOAhmcm1fc2lnbgBDC2ZybV9tUmVkdWN0ADwHZnJtX211bAA9CmZybV9zcXVhcmUAPg1mcm1fc3F1YXJlT2xkAD8SZnJtX2Zyb21Nb250Z29tZXJ5AEEQZnJtX3RvTW9udGdvbWVyeQBAC2ZybV9pbnZlcnNlAEQHZnJtX29uZQBFCGZybV9sb2FkAEYPZnJtX3RpbWVzU2NhbGFyAEcHZnJtX2V4cABPEGZybV9iYXRjaEludmVyc2UASAhmcm1fc3FydABQDGZybV9pc1NxdWFyZQBRFWZybV9iYXRjaFRvTW9udGdvbWVyeQBJF2ZybV9iYXRjaEZyb21Nb250Z29tZXJ5AEoGZnJfYWRkADkGZnJfc3ViADoGZnJfbmVnADsGZnJfbXVsAFIJZnJfc3F1YXJlAFMKZnJfaW52ZXJzZQBUDWZyX2lzTmVnYXRpdmUAVQdmcl9jb3B5ACkHZnJfemVybwAqBmZyX29uZQBFCWZyX2lzWmVybwArBWZyX2VxAC0MZzFtX211bHRpZXhwAIABEmcxbV9tdWx0aWV4cF9jaHVuawB/EmcxbV9tdWx0aWV4cEFmZmluZQCEARhnMW1fbXVsdGlleHBBZmZpbmVfY2h1bmsAgwEKZzFtX2lzWmVybwBXEGcxbV9pc1plcm9BZmZpbmUAVgZnMW1fZXEAXwtnMW1fZXFNaXhlZABeDGcxbV9lcUFmZmluZQBdCGcxbV9jb3B5AFsOZzFtX2NvcHlBZmZpbmUAWghnMW1femVybwBZDmcxbV96ZXJvQWZmaW5lAFgKZzFtX2RvdWJsZQBhEGcxbV9kb3VibGVBZmZpbmUAYAdnMW1fYWRkAGQMZzFtX2FkZE1peGVkAGMNZzFtX2FkZEFmZmluZQBiB2cxbV9uZWcAZg1nMW1fbmVnQWZmaW5lAGUHZzFtX3N1YgBpDGcxbV9zdWJNaXhlZABoDWcxbV9zdWJBZmZpbmUAZxJnMW1fZnJvbU1vbnRnb21lcnkAaxhnMW1fZnJvbU1vbnRnb21lcnlBZmZpbmUAahBnMW1fdG9Nb250Z29tZXJ5AG0WZzFtX3RvTW9udGdvbWVyeUFmZmluZQBsD2cxbV90aW1lc1NjYWxhcgCFARVnMW1fdGltZXNTY2FsYXJBZmZpbmUAhgENZzFtX25vcm1hbGl6ZQByCmcxbV9MRU10b1UAdApnMW1fTEVNdG9DAHUKZzFtX1V0b0xFTQB2CmcxbV9DdG9MRU0Adw9nMW1fYmF0Y2hMRU10b1UAeA9nMW1fYmF0Y2hMRU10b0MAeQ9nMW1fYmF0Y2hVdG9MRU0Aeg9nMW1fYmF0Y2hDdG9MRU0AewxnMW1fdG9BZmZpbmUAbg5nMW1fdG9KYWNvYmlhbgBcEWcxbV9iYXRjaFRvQWZmaW5lAHETZzFtX2JhdGNoVG9KYWNvYmlhbgB8C2cxbV9pbkN1cnZlAHARZzFtX2luQ3VydmVBZmZpbmUAbxdmcm1fX3JldmVyc2VQZXJtdXRhdGlvbgCIAQdmcm1fZmZ0AIwBCGZybV9pZmZ0AI0BCmZybV9yYXdmZnQAigELZnJtX2ZmdEpvaW4AjgEOZnJtX2ZmdEpvaW5FeHQAjwERZnJtX2ZmdEpvaW5FeHRJbnYAkAEKZnJtX2ZmdE1peACRAQxmcm1fZmZ0RmluYWwAkgEdZnJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24AkwEIcG9sX3plcm8AlAEPcG9sX2NvbnN0cnVjdExDAJUBDHFhcF9idWlsZEFCQwCWAQtxYXBfam9pbkFCQwCXAQxxYXBfYmF0Y2hBZGQAmAEKZjJtX2lzWmVybwCZAQlmMm1faXNPbmUAmgEIZjJtX3plcm8AmwEHZjJtX29uZQCcAQhmMm1fY29weQCdAQdmMm1fbXVsAJ4BCGYybV9tdWwxAJ8BCmYybV9zcXVhcmUAoAEHZjJtX2FkZAChAQdmMm1fc3ViAKIBB2YybV9uZWcAowEIZjJtX3NpZ24AqgENZjJtX2Nvbmp1Z2F0ZQCkARJmMm1fZnJvbU1vbnRnb21lcnkApgEQZjJtX3RvTW9udGdvbWVyeQClAQZmMm1fZXEApwELZjJtX2ludmVyc2UAqAEHZjJtX2V4cACtAQ9mMm1fdGltZXNTY2FsYXIAqQEQZjJtX2JhdGNoSW52ZXJzZQCsAQhmMm1fc3FydACuAQxmMm1faXNTcXVhcmUArwEOZjJtX2lzTmVnYXRpdmUAqwEMZzJtX211bHRpZXhwANoBEmcybV9tdWx0aWV4cF9jaHVuawDZARJnMm1fbXVsdGlleHBBZmZpbmUA3gEYZzJtX211bHRpZXhwQWZmaW5lX2NodW5rAN0BCmcybV9pc1plcm8AsQEQZzJtX2lzWmVyb0FmZmluZQCwAQZnMm1fZXEAuQELZzJtX2VxTWl4ZWQAuAEMZzJtX2VxQWZmaW5lALcBCGcybV9jb3B5ALUBDmcybV9jb3B5QWZmaW5lALQBCGcybV96ZXJvALMBDmcybV96ZXJvQWZmaW5lALIBCmcybV9kb3VibGUAuwEQZzJtX2RvdWJsZUFmZmluZQC6AQdnMm1fYWRkAL4BDGcybV9hZGRNaXhlZAC9AQ1nMm1fYWRkQWZmaW5lALwBB2cybV9uZWcAwAENZzJtX25lZ0FmZmluZQC/AQdnMm1fc3ViAMMBDGcybV9zdWJNaXhlZADCAQ1nMm1fc3ViQWZmaW5lAMEBEmcybV9mcm9tTW9udGdvbWVyeQDFARhnMm1fZnJvbU1vbnRnb21lcnlBZmZpbmUAxAEQZzJtX3RvTW9udGdvbWVyeQDHARZnMm1fdG9Nb250Z29tZXJ5QWZmaW5lAMYBD2cybV90aW1lc1NjYWxhcgDfARVnMm1fdGltZXNTY2FsYXJBZmZpbmUA4AENZzJtX25vcm1hbGl6ZQDMAQpnMm1fTEVNdG9VAM4BCmcybV9MRU10b0MAzwEKZzJtX1V0b0xFTQDQAQpnMm1fQ3RvTEVNANEBD2cybV9iYXRjaExFTXRvVQDSAQ9nMm1fYmF0Y2hMRU10b0MA0wEPZzJtX2JhdGNoVXRvTEVNANQBD2cybV9iYXRjaEN0b0xFTQDVAQxnMm1fdG9BZmZpbmUAyAEOZzJtX3RvSmFjb2JpYW4AtgERZzJtX2JhdGNoVG9BZmZpbmUAywETZzJtX2JhdGNoVG9KYWNvYmlhbgDWAQtnMm1faW5DdXJ2ZQDKARFnMm1faW5DdXJ2ZUFmZmluZQDJAQtnMW1fdGltZXNGcgDhARdnMW1fX3JldmVyc2VQZXJtdXRhdGlvbgDjAQdnMW1fZmZ0AOcBCGcxbV9pZmZ0AOgBCmcxbV9yYXdmZnQA5QELZzFtX2ZmdEpvaW4A6QEOZzFtX2ZmdEpvaW5FeHQA6gERZzFtX2ZmdEpvaW5FeHRJbnYA6wEKZzFtX2ZmdE1peADsAQxnMW1fZmZ0RmluYWwA7QEdZzFtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24A7gELZzJtX3RpbWVzRnIA7wEXZzJtX19yZXZlcnNlUGVybXV0YXRpb24A8QEHZzJtX2ZmdAD1AQhnMm1faWZmdAD2AQpnMm1fcmF3ZmZ0APMBC2cybV9mZnRKb2luAPcBDmcybV9mZnRKb2luRXh0APgBEWcybV9mZnRKb2luRXh0SW52APkBCmcybV9mZnRNaXgA+gEMZzJtX2ZmdEZpbmFsAPsBHWcybV9wcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uAPwBEWcxbV90aW1lc0ZyQWZmaW5lAP0BEWcybV90aW1lc0ZyQWZmaW5lAP4BEWZybV9iYXRjaEFwcGx5S2V5AP8BEWcxbV9iYXRjaEFwcGx5S2V5AIACFmcxbV9iYXRjaEFwcGx5S2V5TWl4ZWQAgQIRZzJtX2JhdGNoQXBwbHlLZXkAggIWZzJtX2JhdGNoQXBwbHlLZXlNaXhlZACDAgpmNm1faXNaZXJvAIUCCWY2bV9pc09uZQCGAghmNm1femVybwCHAgdmNm1fb25lAIgCCGY2bV9jb3B5AIkCB2Y2bV9tdWwAigIKZjZtX3NxdWFyZQCLAgdmNm1fYWRkAIwCB2Y2bV9zdWIAjQIHZjZtX25lZwCOAghmNm1fc2lnbgCPAhJmNm1fZnJvbU1vbnRnb21lcnkAkQIQZjZtX3RvTW9udGdvbWVyeQCQAgZmNm1fZXEAkgILZjZtX2ludmVyc2UAkwIHZjZtX2V4cACXAg9mNm1fdGltZXNTY2FsYXIAlAIQZjZtX2JhdGNoSW52ZXJzZQCWAg5mNm1faXNOZWdhdGl2ZQCVAgpmdG1faXNaZXJvAJkCCWZ0bV9pc09uZQCaAghmdG1femVybwCbAgdmdG1fb25lAJwCCGZ0bV9jb3B5AJ0CB2Z0bV9tdWwAngIIZnRtX211bDEAnwIKZnRtX3NxdWFyZQCgAgdmdG1fYWRkAKECB2Z0bV9zdWIAogIHZnRtX25lZwCjAghmdG1fc2lnbgCqAg1mdG1fY29uanVnYXRlAKQCEmZ0bV9mcm9tTW9udGdvbWVyeQCmAhBmdG1fdG9Nb250Z29tZXJ5AKUCBmZ0bV9lcQCnAgtmdG1faW52ZXJzZQCoAgdmdG1fZXhwAK0CD2Z0bV90aW1lc1NjYWxhcgCpAhBmdG1fYmF0Y2hJbnZlcnNlAKwCCGZ0bV9zcXJ0AK4CDGZ0bV9pc1NxdWFyZQCvAg5mdG1faXNOZWdhdGl2ZQCrAhFmdG1fZnJvYmVuaXVzTWFwMAC0AhFmdG1fZnJvYmVuaXVzTWFwMQC1AhFmdG1fZnJvYmVuaXVzTWFwMgC2AhFmdG1fZnJvYmVuaXVzTWFwMwC3AhFmdG1fZnJvYmVuaXVzTWFwNAC4AhFmdG1fZnJvYmVuaXVzTWFwNQC5AhFmdG1fZnJvYmVuaXVzTWFwNgC6AhFmdG1fZnJvYmVuaXVzTWFwNwC7AhFmdG1fZnJvYmVuaXVzTWFwOAC8AhFmdG1fZnJvYmVuaXVzTWFwOQC9AhNibHMxMjM4MV9wYWlyaW5nRXExAMsCE2JsczEyMzgxX3BhaXJpbmdFcTIAzAITYmxzMTIzODFfcGFpcmluZ0VxMwDNAhNibHMxMjM4MV9wYWlyaW5nRXE0AM4CE2JsczEyMzgxX3BhaXJpbmdFcTUAzwIQYmxzMTIzODFfcGFpcmluZwDQAhJibHMxMjM4MV9wcmVwYXJlRzEAxAISYmxzMTIzODFfcHJlcGFyZUcyAMUCE2JsczEyMzgxX21pbGxlckxvb3AAxgIcYmxzMTIzODFfZmluYWxFeHBvbmVudGlhdGlvbgDKAh9ibHMxMjM4MV9maW5hbEV4cG9uZW50aWF0aW9uT2xkAMcCGmJsczEyMzgxX19jeWNsb3RvbWljU3F1YXJlAMgCGmJsczEyMzgxX19jeWNsb3RvbWljRXhwX3cwAMkCCGY2bV9tdWwxALACCWY2bV9tdWwwMQCxAgpmdG1fbXVsMDE0ALICEWcxbV9pbkdyb3VwQWZmaW5lAL4CC2cxbV9pbkdyb3VwAL8CEWcybV9pbkdyb3VwQWZmaW5lAMACC2cybV9pbkdyb3VwAMECCvK7BdECPgAgASAAKQMANwMAIAEgACkDCDcDCCABIAApAxA3AxAgASAAKQMYNwMYIAEgACkDIDcDICABIAApAyg3AygLLAAgAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AygLTQAgACkDKFAEQCAAKQMgUARAIAApAxhQBEAgACkDEFAEQCAAKQMIUARAIAApAwBQDwVBAA8LBUEADwsFQQAPCwVBAA8LBUEADwtBAA8LLAAgAEIBNwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AygLawAgACkDKCABKQMoUQRAIAApAyAgASkDIFEEQCAAKQMYIAEpAxhRBEAgACkDECABKQMQUQRAIAApAwggASkDCFEEQCAAKQMAIAEpAwBRDwVBAA8LBUEADwsFQQAPCwVBAA8LBUEADwtBAA8LxQEAIAApAyggASkDKFQEQEEADwUgACkDKCABKQMoVgRAQQEPBSAAKQMgIAEpAyBUBEBBAA8FIAApAyAgASkDIFYEQEEBDwUgACkDGCABKQMYVARAQQAPBSAAKQMYIAEpAxhWBEBBAQ8FIAApAxAgASkDEFQEQEEADwUgACkDECABKQMQVgRAQQEPBSAAKQMIIAEpAwhUBEBBAA8FIAApAwggASkDCFYEQEEBDwUgACkDACABKQMAWg8LCwsLCwsLCwsLQQAPC7wCAQF+IAA1AgAgATUCAHwhAyACIAM+AgAgADUCBCABNQIEfCADQiCIfCEDIAIgAz4CBCAANQIIIAE1Agh8IANCIIh8IQMgAiADPgIIIAA1AgwgATUCDHwgA0IgiHwhAyACIAM+AgwgADUCECABNQIQfCADQiCIfCEDIAIgAz4CECAANQIUIAE1AhR8IANCIIh8IQMgAiADPgIUIAA1AhggATUCGHwgA0IgiHwhAyACIAM+AhggADUCHCABNQIcfCADQiCIfCEDIAIgAz4CHCAANQIgIAE1AiB8IANCIIh8IQMgAiADPgIgIAA1AiQgATUCJHwgA0IgiHwhAyACIAM+AiQgADUCKCABNQIofCADQiCIfCEDIAIgAz4CKCAANQIsIAE1Aix8IANCIIh8IQMgAiADPgIsIANCIIinC5ADAQF+IAA1AgAgATUCAH0hAyACIANC/////w+DPgIAIAA1AgQgATUCBH0gA0Igh3whAyACIANC/////w+DPgIEIAA1AgggATUCCH0gA0Igh3whAyACIANC/////w+DPgIIIAA1AgwgATUCDH0gA0Igh3whAyACIANC/////w+DPgIMIAA1AhAgATUCEH0gA0Igh3whAyACIANC/////w+DPgIQIAA1AhQgATUCFH0gA0Igh3whAyACIANC/////w+DPgIUIAA1AhggATUCGH0gA0Igh3whAyACIANC/////w+DPgIYIAA1AhwgATUCHH0gA0Igh3whAyACIANC/////w+DPgIcIAA1AiAgATUCIH0gA0Igh3whAyACIANC/////w+DPgIgIAA1AiQgATUCJH0gA0Igh3whAyACIANC/////w+DPgIkIAA1AiggATUCKH0gA0Igh3whAyACIANC/////w+DPgIoIAA1AiwgATUCLH0gA0Igh3whAyACIANC/////w+DPgIsIANCIIenC6ciGgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gA0L/////D4MgADUCACIFIAE1AgAiBn58IQMgBCADQiCIfCEEIAIgAz4CACAEQiCIIQMgBEL/////D4MgBSABNQIEIgh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIEIgcgBn58IQQgAyAEQiCIfCEDIAIgBD4CBCADQiCIIQQgA0L/////D4MgBSABNQIIIgp+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIIIgkgBn58IQMgBCADQiCIfCEEIAIgAz4CCCAEQiCIIQMgBEL/////D4MgBSABNQIMIgx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIMIgsgBn58IQQgAyAEQiCIfCEDIAIgBD4CDCADQiCIIQQgA0L/////D4MgBSABNQIQIg5+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyALIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIQIg0gBn58IQMgBCADQiCIfCEEIAIgAz4CECAEQiCIIQMgBEL/////D4MgBSABNQIUIhB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIUIg8gBn58IQQgAyAEQiCIfCEDIAIgBD4CFCADQiCIIQQgA0L/////D4MgBSABNQIYIhJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyALIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyANIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIYIhEgBn58IQMgBCADQiCIfCEEIAIgAz4CGCAEQiCIIQMgBEL/////D4MgBSABNQIcIhR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIcIhMgBn58IQQgAyAEQiCIfCEDIAIgBD4CHCADQiCIIQQgA0L/////D4MgBSABNQIgIhZ+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyANIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIgIhUgBn58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgBSABNQIkIhh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIkIhcgBn58IQQgAyAEQiCIfCEDIAIgBD4CJCADQiCIIQQgA0L/////D4MgBSABNQIoIhp+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBZ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyAXIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIoIhkgBn58IQMgBCADQiCIfCEEIAIgAz4CKCAEQiCIIQMgBEL/////D4MgBSABNQIsIhx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIsIhsgBn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgByAcfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAafnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAYfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAWfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgFyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgGSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgGyAIfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyAJIBx+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAbIAp+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIAsgHH58IQMgBCADQiCIfCEEIANC/////w+DIA0gGn58IQMgBCADQiCIfCEEIANC/////w+DIA8gGH58IQMgBCADQiCIfCEEIANC/////w+DIBEgFn58IQMgBCADQiCIfCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIANC/////w+DIBUgEn58IQMgBCADQiCIfCEEIANC/////w+DIBcgEH58IQMgBCADQiCIfCEEIANC/////w+DIBkgDn58IQMgBCADQiCIfCEEIANC/////w+DIBsgDH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgBEL/////D4MgDSAcfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAafnwhBCADIARCIIh8IQMgBEL/////D4MgESAYfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAWfnwhBCADIARCIIh8IQMgBEL/////D4MgFSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgFyASfnwhBCADIARCIIh8IQMgBEL/////D4MgGSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgGyAOfnwhBCADIARCIIh8IQMgAiAEPgI8IANCIIghBCADQv////8PgyAPIBx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIBp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIBZ+fCEDIAQgA0IgiHwhBCADQv////8PgyAXIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAZIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAbIBB+fCEDIAQgA0IgiHwhBCACIAM+AkAgBEIgiCEDIARC/////w+DIBEgHH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgGn58IQQgAyAEQiCIfCEDIARC/////w+DIBUgGH58IQQgAyAEQiCIfCEDIARC/////w+DIBcgFn58IQQgAyAEQiCIfCEDIARC/////w+DIBkgFH58IQQgAyAEQiCIfCEDIARC/////w+DIBsgEn58IQQgAyAEQiCIfCEDIAIgBD4CRCADQiCIIQQgA0L/////D4MgEyAcfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAafnwhAyAEIANCIIh8IQQgA0L/////D4MgFyAYfnwhAyAEIANCIIh8IQQgA0L/////D4MgGSAWfnwhAyAEIANCIIh8IQQgA0L/////D4MgGyAUfnwhAyAEIANCIIh8IQQgAiADPgJIIARCIIghAyAEQv////8PgyAVIBx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAbIBZ+fCEEIAMgBEIgiHwhAyACIAQ+AkwgA0IgiCEEIANC/////w+DIBcgHH58IQMgBCADQiCIfCEEIANC/////w+DIBkgGn58IQMgBCADQiCIfCEEIANC/////w+DIBsgGH58IQMgBCADQiCIfCEEIAIgAz4CUCAEQiCIIQMgBEL/////D4MgGSAcfnwhBCADIARCIIh8IQMgBEL/////D4MgGyAafnwhBCADIARCIIh8IQMgAiAEPgJUIANCIIghBCADQv////8PgyAbIBx+fCEDIAQgA0IgiHwhBCACIAM+AlggBEIgiCEDIAIgBD4CXAvOIBABfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAA1AgAiBiAGfnwhAiADIAJCIIh8IQMgASACPgIAIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AgQiB358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCCCIIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgByAHfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIMIgl+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAh+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIMIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhAiCn58IQIgAyACQiCIfCEDIAJC/////w+DIAcgCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAggCH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCFCILfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAJfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIYIgx+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAJIAl+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIYIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhwiDX58IQIgAyACQiCIfCEDIAJC/////w+DIAcgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAggC358IQIgAyACQiCIfCEDIAJC/////w+DIAkgCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCICIOfnwhAiADIAJCIIh8IQMgAkL/////D4MgByANfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAMfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSALfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgCiAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CICADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIkIg9+fCECIAMgAkIgiHwhAyACQv////8PgyAHIA5+fCECIAMgAkIgiHwhAyACQv////8PgyAIIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIkIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AigiEH58IQIgAyACQiCIfCEDIAJC/////w+DIAcgD358IQIgAyACQiCIfCEDIAJC/////w+DIAggDn58IQIgAyACQiCIfCEDIAJC/////w+DIAkgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAogDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAsgC358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCLCIRfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiANfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAMfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CLCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgByARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyANfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDCAMfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CMCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCCARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCANfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CNCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCSARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAOfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDSANfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4COCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCiARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAOfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CPCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCyARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAPfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDiAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CQCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDCARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDiAPfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CRCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDSARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDiAQfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDyAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CSCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDiARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDyAQfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CTCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDyARfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgECAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CUCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgECARfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CVCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgESARfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CWCADIQQgBEIgiCEFIAEgBD4CXAsKACAAIAAgARAIC5ICAQF+IAA1AAAgAX4hAyACIAM+AAAgADUABCABfiADQiCIfCEDIAIgAz4ABCAANQAIIAF+IANCIIh8IQMgAiADPgAIIAA1AAwgAX4gA0IgiHwhAyACIAM+AAwgADUAECABfiADQiCIfCEDIAIgAz4AECAANQAUIAF+IANCIIh8IQMgAiADPgAUIAA1ABggAX4gA0IgiHwhAyACIAM+ABggADUAHCABfiADQiCIfCEDIAIgAz4AHCAANQAgIAF+IANCIIh8IQMgAiADPgAgIAA1ACQgAX4gA0IgiHwhAyACIAM+ACQgADUAKCABfiADQiCIfCEDIAIgAz4AKCAANQAsIAF+IANCIIh8IQMgAiADPgAsC04CAX4BfyAAIQMgAzUAACABfCECIAMgAj4AACACQiCIIQICQANAIAJQDQEgA0EEaiEDIAM1AAAgAnwhAiADIAI+AAAgAkIgiCECDAALCwurAgcBfwF/AX8BfwF+AX4BfyACBEAgAiEFBUHYACEFCyADBEAgAyEEBUGIASEECyAAIAQQACABQSgQACAFEAFBuAEQAUEvIQZBLyEHAkADQEEoIAdqLQAAIAdBA0ZyDQEgB0EBayEHDAALC0EoIAdqQQNrNQAAQgF8IQggCEIBUQRAQgBCAIAaCwJAA0ACQANAIAQgBmotAAAgBkEHRnINASAGQQFrIQYMAAsLIAQgBmpBB2spAAAhCSAJIAiAIQkgBiAHa0EEayEKAkADQCAJQoCAgIBwg1AgCkEATnENASAJQgiIIQkgCkEBaiEKDAALCyAJUARAIARBKBAFRQ0CQgEhCUEAIQoLQSggCUHoARALIARB6AEgCmsgBBAHGiAFIApqIAkQDAwACwsLtQILAX8BfwF/AX8BfwF/AX8BfwF/AX8Bf0GYAiEDQZgCEAFBACELQcgCIQUgAUHIAhAAQfgCIQRB+AIQA0EAIQxBqAMhCCAAQagDEABB2AMhBkGIBCEHQZgFIQoCQANAIAgQAg0BIAUgCCAGIAcQDSAGIARBuAQQCCALBEAgDARAQbgEIAMQBQRAQbgEIAMgChAHGkEAIQ0FIANBuAQgChAHGkEBIQ0LBUG4BCADIAoQBhpBASENCwUgDARAQbgEIAMgChAGGkEAIQ0FIANBuAQQBQRAIANBuAQgChAHGkEAIQ0FQbgEIAMgChAHGkEBIQ0LCwsgAyEJIAQhAyAKIQQgCSEKIAwhCyANIQwgBSEJIAghBSAHIQggCSEHDAALCyALBEAgASADIAIQBxoFIAMgAhAACwsKACAAQagGEAQPCywAIAAgASACEAYEQCACQcgFIAIQBxoFIAJByAUQBQRAIAJByAUgAhAHGgsLCxcAIAAgASACEAcEQCACQcgFIAIQBhoLCwsAQdgGIAAgARARC/wkAwF+AX4BfkL9//P/DyECQgAhAyAANQIAIAJ+Qv////8PgyEEIAA1AgAgA0IgiHxByAU1AgAgBH58IQMgACADPgIAIAA1AgQgA0IgiHxByAU1AgQgBH58IQMgACADPgIEIAA1AgggA0IgiHxByAU1AgggBH58IQMgACADPgIIIAA1AgwgA0IgiHxByAU1AgwgBH58IQMgACADPgIMIAA1AhAgA0IgiHxByAU1AhAgBH58IQMgACADPgIQIAA1AhQgA0IgiHxByAU1AhQgBH58IQMgACADPgIUIAA1AhggA0IgiHxByAU1AhggBH58IQMgACADPgIYIAA1AhwgA0IgiHxByAU1AhwgBH58IQMgACADPgIcIAA1AiAgA0IgiHxByAU1AiAgBH58IQMgACADPgIgIAA1AiQgA0IgiHxByAU1AiQgBH58IQMgACADPgIkIAA1AiggA0IgiHxByAU1AiggBH58IQMgACADPgIoIAA1AiwgA0IgiHxByAU1AiwgBH58IQMgACADPgIsQfgIIANCIIg+AgBCACEDIAA1AgQgAn5C/////w+DIQQgADUCBCADQiCIfEHIBTUCACAEfnwhAyAAIAM+AgQgADUCCCADQiCIfEHIBTUCBCAEfnwhAyAAIAM+AgggADUCDCADQiCIfEHIBTUCCCAEfnwhAyAAIAM+AgwgADUCECADQiCIfEHIBTUCDCAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHIBTUCECAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHIBTUCFCAEfnwhAyAA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DiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCBCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AgghAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIMIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCECEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AhQhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIYIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCHCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AiAhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIkIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCKCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AiwhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiACIBM+AgAgAiAUPgIEIAIgFT4CCCACIBY+AgwgAiAXPgIQIAIgGD4CFCACIBk+AhggAiAaPgIcIAIgGz4CICACIBw+AiQgAiAdPgIoIAIgHj4CLCACQcgFEAUEQCACQcgFIAIQBxoLC/dNHgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfiAANQIAIQYgADUCBCEHIAA1AgghCCAANQIMIQkgADUCECEKIAA1AhQhCyAANQIYIQwgADUCHCENIAA1AiAhDiAANQIkIQ8gADUCKCEQIAA1AiwhESASIAYgBn58IQQgBEL/////D4MhEiAEQiCIIQMgByAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBYgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBcgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBggBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAGfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAGfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAGfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAGfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBMgByAHfnwhBCAEQv////8PgyETIARCIIghAyAIIAd+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyAJIAd+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAKIAd+IQUgFiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEWIARCIIggBUIgiEIBhnwhAyALIAd+IQUgFyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEXIARCIIggBUIgiEIBhnwhAyAMIAd+IQUgGCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEYIARCIIggBUIgiEIBhnwhAyANIAd+IQUgGSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEZIARCIIggBUIgiEIBhnwhAyAOIAd+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIAd+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIAd+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIAd+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gFCAIIAh+fCEEIARC/////w+DIRQgBEIgiCEDIAkgCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSAWIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRYgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSAXIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRcgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAYIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRggBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAZIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRkgBEIgiCAFQiCIQgGGfCEDIA4gCH4hBSAaIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRogBEIgiCAFQiCIQgGGfCEDIA8gCH4hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgCH4hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgCH4hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAVIAkgCX58IQQgBEL/////D4MhFSAEQiCIIQMgCiAJfiEFIBYgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBcgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBggBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAJfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAJfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAJfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAJfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBYgCiAKfnwhBCAEQv////8PgyEWIARCIIghAyALIAp+IQUgFyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEXIARCIIggBUIgiEIBhnwhAyAMIAp+IQUgGCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEYIARCIIggBUIgiEIBhnwhAyANIAp+IQUgGSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEZIARCIIggBUIgiEIBhnwhAyAOIAp+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIAp+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIAp+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIAp+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gFyALIAt+fCEEIARC/////w+DIRcgBEIgiCEDIAwgC34hBSAYIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRggBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAZIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRkgBEIgiCAFQiCIQgGGfCEDIA4gC34hBSAaIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRogBEIgiCAFQiCIQgGGfCEDIA8gC34hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgC34hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgC34hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAYIAwgDH58IQQgBEL/////D4MhGCAEQiCIIQMgDSAMfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAMfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAMfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAMfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAMfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBkgDSANfnwhBCAEQv////8PgyEZIARCIIghAyAOIA1+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIA1+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIA1+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIA1+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gGiAOIA5+fCEEIARC/////w+DIRogBEIgiCEDIA8gDn4hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgDn4hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgDn4hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAbIA8gD358IQQgBEL/////D4MhGyAEQiCIIQMgECAPfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAPfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBwgECAQfnwhBCAEQv////8PgyEcIARCIIghAyARIBB+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gHSARIBF+fCEEIARC/////w+DIR0gBEIgiCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyABIBI+AgAgASATPgIEIAEgFD4CCCABIBU+AgwgASAWPgIQIAEgFz4CFCABIBg+AhggASAZPgIcIAEgGj4CICABIBs+AiQgASAcPgIoIAEgHT4CLCAepwRAIAFByAUgARAHGgUgAUHIBRAFBEAgAUHIBSABEAcaCwsLCgAgACAAIAEQFAsLACAAQfgFIAEQFAsVACAAQfgREABBqBIQAUH4ESABEBMLEQAgAEHYEhAYQdgSQbgHEAULJAAgABACBEBBAA8LIABBiBMQGEGIE0G4BxAFBEBBfw8LQQEPCxcAIAAgARAYIAFByAUgARAOIAEgARAXCwkAQagGIAAQAAvLAQQBfwF/AX8BfyACEAFBMCEFIAAhAwJAA0AgBSABSw0BIAVBMEYEQEG4ExAcBUG4E0H4BUG4ExAUCyADQbgTQegTEBQgAkHoEyAC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AgQgADUCCCABNQIIfCADQiCIfCEDIAIgAz4CCCAANQIMIAE1Agx8IANCIIh8IQMgAiADPgIMIAA1AhAgATUCEHwgA0IgiHwhAyACIAM+AhAgADUCFCABNQIUfCADQiCIfCEDIAIgAz4CFCAANQIYIAE1Ahh8IANCIIh8IQMgAiADPgIYIAA1AhwgATUCHHwgA0IgiHwhAyACIAM+AhwgA0IgiKcLjAIBAX4gADUCACABNQIAfSEDIAIgA0L/////D4M+AgAgADUCBCABNQIEfSADQiCHfCEDIAIgA0L/////D4M+AgQgADUCCCABNQIIfSADQiCHfCEDIAIgA0L/////D4M+AgggADUCDCABNQIMfSADQiCHfCEDIAIgA0L/////D4M+AgwgADUCECABNQIQfSADQiCHfCEDIAIgA0L/////D4M+AhAgADUCFCABNQIUfSADQiCHfCEDIAIgA0L/////D4M+AhQgADUCGCABNQIYfSADQiCHfCEDIAIgA0L/////D4M+AhggADUCHCABNQIcfSADQiCHfCEDIAIgA0L/////D4M+AhwgA0Igh6cLjxASAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IANC/////w+DIAA1AgAiBSABNQIAIgZ+fCEDIAQgA0IgiHwhBCACIAM+AgAgBEIgiCEDIARC/////w+DIAUgATUCBCIIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCBCIHIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgQgA0IgiCEEIANC/////w+DIAUgATUCCCIKfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCCCIJIAZ+fCEDIAQgA0IgiHwhBCACIAM+AgggBEIgiCEDIARC/////w+DIAUgATUCDCIMfnwhBCADIARCIIh8IQMgBEL/////D4MgByAKfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCDCILIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgwgA0IgiCEEIANC/////w+DIAUgATUCECIOfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCECINIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhAgBEIgiCEDIARC/////w+DIAUgATUCFCIQfnwhBCADIARCIIh8IQMgBEL/////D4MgByAOfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCFCIPIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhQgA0IgiCEEIANC/////w+DIAUgATUCGCISfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCGCIRIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhggBEIgiCEDIARC/////w+DIAUgATUCHCIUfnwhBCADIARCIIh8IQMgBEL/////D4MgByASfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgESAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCHCITIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhwgA0IgiCEEIANC/////w+DIAcgFH58IQMgBCADQiCIfCEEIANC/////w+DIAkgEn58IQMgBCADQiCIfCEEIANC/////w+DIAsgEH58IQMgBCADQiCIfCEEIANC/////w+DIA0gDn58IQMgBCADQiCIfCEEIANC/////w+DIA8gDH58IQMgBCADQiCIfCEEIANC/////w+DIBEgCn58IQMgBCADQiCIfCEEIANC/////w+DIBMgCH58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgCSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgCyASfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgESAMfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAKfnwhBCADIARCIIh8IQMgAiAEPgIkIANCIIghBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCACIAM+AiggBEIgiCEDIARC/////w+DIA0gFH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gEn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgEH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgDn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgAiAEPgI8C4wSDAF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAA1AgAiBiAGfnwhAiADIAJCIIh8IQMgASACPgIAIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AgQiB358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCCCIIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgByAHfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIMIgl+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAh+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIMIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhAiCn58IQIgAyACQiCIfCEDIAJC/////w+DIAcgCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAggCH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCFCILfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAJfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIYIgx+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAJIAl+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIYIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhwiDX58IQIgAyACQiCIfCEDIAJC/////w+DIAcgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAggC358IQIgAyACQiCIfCEDIAJC/////w+DIAkgCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAcgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAggDH58IQIgAyACQiCIfCEDIAJC/////w+DIAkgC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAogCn58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAggDX58IQIgAyACQiCIfCEDIAJC/////w+DIAkgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAogC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAkgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAogDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAsgC358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAogDX58IQIgAyACQiCIfCEDIAJC/////w+DIAsgDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAsgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAwgDH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAwgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIA0gDX58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjggAyEEIARCIIghBSABIAQ+AjwLCgAgACAAIAEQMQu2AQEBfiAANQAAIAF+IQMgAiADPgAAIAA1AAQgAX4gA0IgiHwhAyACIAM+AAQgADUACCABfiADQiCIfCEDIAIgAz4ACCAANQAMIAF+IANCIIh8IQMgAiADPgAMIAA1ABAgAX4gA0IgiHwhAyACIAM+ABAgADUAFCABfiADQiCIfCEDIAIgAz4AFCAANQAYIAF+IANCIIh8IQMgAiADPgAYIAA1ABwgAX4gA0IgiHwhAyACIAM+ABwLTgIBfgF/IAAhAyADNQAAIAF8IQIgAyACPgAAIAJCIIghAgJAA0AgAlANASADQQRqIQMgAzUAACACfCECIAMgAj4AACACQiCIIQIMAAsLC7ACBwF/AX8BfwF/AX4BfgF/IAIEQCACIQUFQegXIQULIAMEQCADIQQFQYgYIQQLIAAgBBApIAFByBcQKSAFECpBqBgQKkEfIQZBHyEHAkADQEHIFyAHai0AACAHQQNGcg0BIAdBAWshBwwACwtByBcgB2pBA2s1AABCAXwhCCAIQgFRBEBCAEIAgBoLAkADQAJAA0AgBCAGai0AACAGQQdGcg0BIAZBAWshBgwACwsgBCAGakEHaykAACEJIAkgCIAhCSAGIAdrQQRrIQoCQANAIAlCgICAgHCDUCAKQQBOcQ0BIAlCCIghCSAKQQFqIQoMAAsLIAlQBEAgBEHIFxAuRQ0CQgEhCUEAIQoLQcgXIAlByBgQNCAEQcgYIAprIAQQMBogBSAKaiAJEDUMAAsLC7UC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GCENIAA1AhwhDiABNQIAIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIEIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIIIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIMIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIQIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIUIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIYIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIcIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiACIA8+AgAgAiAQPgIEIAIgET4CCCACIBI+AgwgAiATPgIQIAIgFD4CFCACIBU+AhggAiAWPgIcIAJBiBsQLgRAIAJBiBsgAhAwGgsLqyQWAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gADUCACEGIAA1AgQhByAANQIIIQggADUCDCEJIAA1AhAhCiAANQIUIQsgADUCGCEMIAA1AhwhDSAOIAYgBn58IQQgBEL/////D4MhDiAEQiCIIQMgByAGfiEFIA8gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhDyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIA8gByAHfnwhBCAEQv////8PgyEPIARCIIghAyAIIAd+IQUgECAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEQIARCIIggBUIgiEIBhnwhAyAJIAd+IQUgESAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyERIARCIIggBUIgiEIBhnwhAyAKIAd+IQUgEiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyESIARCIIggBUIgiEIBhnwhAyALIAd+IQUgEyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyETIARCIIggBUIgiEIBhnwhAyAMIAd+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyANIAd+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgECAIIAh+fCEEIARC/////w+DIRAgBEIgiCEDIAkgCH4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQv////8PfkL/////D4MhAiAOIAJCAX58IQQgBEIgiCEDIA8gAkL/////D358IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQv63+f8PfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCgsj2nQV+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkKFsIfNAH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQoiw55kDfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCyPr1zAJ+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLTzrafB358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyARIAkgCX58IQQgBEL/////D4MhESAEQiCIIQMgCiAJfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIBIgCiAKfnwhBCAEQv////8PgyESIARCIIghAyALIAp+IQUgEyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyETIARCIIggBUIgiEIBhnwhAyAMIAp+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyANIAp+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEyALIAt+fCEEIARC/////w+DIRMgBEIgiCEDIAwgC34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQv////8PfkL/////D4MhAiAOIAJCAX58IQQgBEIgiCEDIA8gAkL/////D358IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQv63+f8PfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCgsj2nQV+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkKFsIfNAH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQoiw55kDfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCyPr1zAJ+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLTzrafB358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAUIAwgDH58IQQgBEL/////D4MhFCAEQiCIIQMgDSAMfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIBUgDSANfnwhBCAEQv////8PgyEVIARCIIghAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgASAOPgIAIAEg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KQOIATcDiAEgASAAKQOQATcDkAEgASAAKQOYATcDmAEgASAAKQOgATcDoAEgASAAKQOoATcDqAEgASAAKQOwATcDsAEgASAAKQO4ATcDuAELkgMAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYIAEgACkDYDcDYCABIAApA2g3A2ggASAAKQNwNwNwIAEgACkDeDcDeCABIAApA4ABNwOAASABIAApA4gBNwOIASABIAApA5ABNwOQASABIAApA5gBNwOYASABIAApA6ABNwOgASABIAApA6gBNwOoASABIAApA7ABNwOwASABIAApA7gBNwO4ASABIAApA8ABNwPAASABIAApA8gBNwPIASABIAApA9ABNwPQASABIAApA9gBNwPYASABIAApA+ABNwPgASABIAApA+gBNwPoASABIAApA/ABNwPwASABIAApA/gBNwP4ASABIAApA4ACNwOAAiABIAApA4gCNwOIAiABIAApA5ACNwOQAiABIAApA5gCNwOYAgsvACAAELABBEAgARCzAQUgAUHAAWoQnAEgAEHgAGogAUHgAGoQnQEgACABEJ0BCwscAQF/IAAgARCnASAAQeAAaiABQeAAahCnAXEPC4sBAQF/IABBwAFqIQIgABCxAQRAIAEQsAEPCyABELABBEBBAA8LIAIQmgEEQCAAIAEQtwEPCyACQdiHARCgASABQdiHAUG4iAEQngEgAkHYhwFBmIkBEJ4BIAFB4ABqQZiJAUH4iQEQngEgAEG4iAEQpwEEQCAAQeAAakH4iQEQpwEEQEEBDwsLQQAPC9kBAgF/AX8gAEHAAWohAiABQcABaiEDIAAQsQEEQCABELEBDwsgARCxAQRAQQAPCyACEJoBBEAgASAAELgBDwsgAxCaAQRAIAAgARC4AQ8LIAJB2IoBEKABIANBuIsBEKABIABBuIsBQZiMARCeASABQdiKAUH4jAEQngEgAkHYigFB2I0BEJ4BIANBuIsBQbiOARCeASAAQeAAakG4jgFBmI8BEJ4BIAFB4ABqQdiNAUH4jwEQngFBmIwBQfiMARCnAQRA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IABB4ABqIABBwAFqQajhAhChASABQeAAaiABQcABakGI4gIQoQFBiNwCQejcAkHo4gIQoQFBiNwCQcjdAkHI4wIQoQFB6NwCQcjdAkGo5AIQoQFBqOECQYjiAiACEJ4BIAJBqOQCIAIQogEgAiACEIQCQYjcAiACIAIQoQFBqN4CQYjfAiACQeAAahCeASACQeAAakHo4gIgAkHgAGoQogFByN0CQYjlAhCEAiACQeAAakGI5QIgAkHgAGoQoQFB6N8CQcjgAiACQcABahCeASACQcABakHI4wIgAkHAAWoQogEgAkHAAWpB6NwCIAJBwAFqEKEBC4ECACAAQejlAhCgASAAIABB4ABqQcjmAhCeAUHI5gJByOYCQajnAhChASAAIABB4ABqQYjoAhCiAUGI6AIgAEHAAWpBiOgCEKEBQYjoAkGI6AIQoAEgAEHgAGogAEHAAWpB6OgCEJ4BQejoAkHo6AJByOkCEKEBIABBwAFqQajqAhCgAUHI6QIgARCEAkHo5QIgASABEKEBQajqAiABQeAAahCEAkGo5wIgAUHgAGogAUHgAGoQoQFB6OUCQajqAiABQcABahChAUHI6QIgAUHAAWogAUHAAWoQogFBiOgCIAFBwAFqIAFBwAFqEKEBQajnAiABQcABaiABQcABahChAQs1ACAAIAEgAhChASAAQeAAaiABQeAAaiACQeAAahChASAAQcABaiABQcABaiACQcABahChAQs1ACAAIAEgAhCiASAAQeAAaiABQeAAaiACQeAAahCiASAAQcABaiABQcABaiACQcABahCiAQsnACAAIAEQowEgAEHgAGogAUHgAGoQowEgAEHAAWogAUHAAWoQowELMAEBfyAAQcABahCqASEBIAEEQCABDwsgAEHgAGoQqgEhASABBEAgAQ8LIAAQqgEPCycAIAAgARClASAAQeAAaiABQeAAahClASAAQcABaiABQcABahClAQsnACAAIAEQpgEgAEHgAGogAUHgAGoQpgEgAEHAAWogAUHAAWoQpgELKQAgACABEKcBIABB4ABqIAFB4ABqEKcBcSAAQcABaiABQcABahCnAXELqwIAIABBiOsCEKABIABB4ABqQejrAhCgASAAQcABakHI7AIQoAEgACAAQeAAakGo7QIQngEgACAAQcABakGI7gIQngEgAEHgAGogAEHAAWpB6O4CEJ4BQejuAkHI7wIQhAJBiOsCQcjvAkHI7wIQogFByOwCQajwAhCEAkGo8AJBqO0CQajwAhCiAUHo6wJBiO4CQYjxAhCiASAAQcABakGo8AJB6PECEJ4BIABB4ABqQYjxAkHI8gIQngFB6PECQcjyAkHo8QIQoQFB6PECQejxAhCEAiAAQcjvAkHI8gIQngFByPICQejxAkHo8QIQoQFB6PECQejxAhCoAUHo8QJByO8CIAEQngFB6PECQajwAiABQeAAahCeAUHo8QJBiPECIAFBwAFqEJ4BCzMAIAAgASACIAMQqQEgAEHgAGogASACIANB4ABqEKkBIABBwAFqIAEgAiADQcABahCpAQs1ACAAQcABahCZAQRAIABB4ABqEJkBBEAgABCrAQ8FIABB4ABqEKsBDwsLIABBwAFqEKsBDwuPAgQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpBoAJsajYCACAFEIgCIAAhBiAFQaACaiEFQQAhCAJAA0AgCCACRg0BIAYQhQIEQCAFQaACayAFEIkCBSAGIAVBoAJrIAUQigILIAYgAWohBiAFQaACaiEFIAhBAWohCAwACwsgBiABayEGIAVBoAJrIQUgAyACQQFrIARsaiEHIAUgBRCTAgJAA0AgCEUNASAGEIUCBEAgBSAFQaACaxCJAiAHEIcCBSAFQaACa0Go8wIQiQIgBSAGIAVBoAJrEIoCIAVBqPMCIAcQigILIAYgAWshBiAHIARrIQcgBUGgAmshBSAIQQFrIQgMAAsLQQAgBTYCAAvOAgIBfwF/IAJFBEAgAxCIAg8LIABByPUCEIkCIAMQiAIgAiEEAkADQCAEQQFrIQQgASAEai0AACEFIAMgAxCLAiAFQYABTwRAIAVBgAFrIQUgA0HI9QIgAxCKAgsgAyADEIsCIAVBwABPBEAgBUHAAGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEgTwRAIAVBIGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEQTwRAIAVBEGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEITwRAIAVBCGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEETwRAIAVBBGshBSADQcj1AiADEIoCCyADIAMQiwIgBUECTwRAIAVBAmshBSADQcj1AiADEIoCCyADIAMQiwIgBUEBTwRAIAVBAWshBSADQcj1AiADEIoCCyAERQ0BDAALCwsyACAAQej3AhCdASAAQcABaiABEIQCIABB4ABqIAFBwAFqEJ0BQej3AiABQeAAahCdAQsRACAAEIUCIABBoAJqEIUCcQsSACAAEIYCIABBoAJqEIUCcQ8LEAAgABCHAiAAQaACahCHAgsQACAAEIgCIABBoAJqEIcCCxgAIAAgARCJAiAAQaACaiABQaACahCJAguFAQAgACABQcj4AhCKAiAAQaACaiABQaACakHo+gIQigIgACAAQaACakGI/QIQjAIgASABQaACakGo/wIQjAJBiP0CQaj/AkGI/QIQigJB6PoCIAIQmAJByPgCIAIgAhCMAkHI+AJB6PoCIAJBoAJqEIwCQYj9AiACQaACaiACQaACahCNAgscACAAIAEgAhCKAiAAQaACaiABIAJBoAJqEIoCC30AIAAgAEGgAmpByIEDEIoCIAAgAEGgAmpB6IMDEIwCIABBoAJqQYiGAxCYAiAAQYiGA0GIhgMQjAJByIEDQaiIAxCYAkGoiANByIEDQaiIAxCMAkHogwNBiIYDIAEQigIgAUGoiAMgARCNAkHIgQNByIEDIAFBoAJqEIwCCyAAIAAgASACEIwCIABBoAJqIAFBoAJqIAJBoAJqEIwCCyAAIAAgASACEI0CIABBoAJqIAFBoAJqIAJBoAJqEI0CCxgAIAAgARCOAiAAQaACaiABQaACahCOAgsYACAAIAEQiQIgAEGgAmogAUGgAmoQjgILGAAgACABEJACIABBoAJqIAFBoAJqEJACCxgAIAAgARCRAiAAQaACaiABQaACahCRAgsZACAAIAEQkgIgAEGgAmogAUGgAmoQkgJxC2oAIABByIoDEIsCIABBoAJqQeiMAxCLAkHojANBiI8DEJgCQciKA0GIjwNBiI8DEI0CQYiPA0GokQMQkwIgAEGokQMgARCKAiAAQaACakGokQMgAUGgAmoQigIgAUGgAmogAUGgAmoQjgILIAAgACABIAIgAxCUAiAAQaACaiABIAIgA0GgAmoQlAILHQEBfyAAQaACahCPAiEBIAEEQCABDwsgABCPAg8LHgAgAEGgAmoQhQIEQCAAEJUCDwsgAEGgAmoQlQIPC48CBAF/AX8BfwF/QQAoAgAhBUEAIAUgAkEBakHABGxqNgIAIAUQnAIgACEGIAVBwARqIQVBACEIAkADQCAIIAJGDQEgBhCZAgRAIAVBwARrIAUQnQIFIAYgBUHABGsgBRCeAgsgBiABaiEGIAVBwARqIQUgCEEBaiEIDAALCyAGIAFrIQYgBUHABGshBSADIAJBAWsgBGxqIQcgBSAFEKgCAkADQCAIRQ0BIAYQmQIEQCAFIAVBwARrEJ0CIAcQmwIFIAVBwARrQciTAxCdAiAFIAYgBUHABGsQngIgBUHIkwMgBxCeAgsgBiABayEGIAcgBGshByAFQcAEayEFIAhBAWshCAwACwtBACAFNgIAC84CAgF/AX8gAkUEQCADEJwCDwsgAEGImAMQnQIgAxCcAiACIQQCQANAIARBAWshBCABIARqLQAAIQUgAyADEKACIAVBgAFPBEAgBUGAAWshBSADQYiYAyADEJ4CCyADIAMQoAIgBUHAAE8EQCAFQcAAayEFIANBiJgDIAMQngILIAMgAxCgAiAFQSBPBEAgBUEgayEFIANBiJgDIAMQngILIAMgAxCgAiAFQRBPBEAgBUEQayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQhPBEAgBUEIayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQRPBEAgBUEEayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQJPBEAgBUECayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQFPBEAgBUEBayEFIANBiJgDIAMQngILIARFDQEMAAsLC9EBAEHIrgMQnAJByK4DQciuAxCjAiAAQcicA0GgAkGIoQMQrQJBiKEDQcilAxCgAiAAQcilA0HIpQMQngJByKUDQYiqAxCkAkGIqgNByKUDQYiqAxCeAkGIqgNByK4DEKcCBEAAC0GIoQMgAEGIswMQngJByKUDQciuAxCnAgRAQciuAxCHAkHosAMQiAJByK4DQYizAyABEJ4CBUHItwMQnAJByLcDQcilA0HItwMQoQJByLcDQeieA0GgAkHItwMQrQJByLcDQYizAyABEJ4CCwtqAEHoywMQnAJB6MsDQejLAxCjAiAAQYi8A0GgAkGovgMQrQJBqL4DQejCAxCgAiAAQejCA0HowgMQngJB6MIDQajHAxCkAkGoxwNB6MIDQajHAxCeAkGoxwNB6MsDEKcCBEBBAA8LQQEPC3gAIAAgAEHgAGpB6NADEKEBIABB4ABqIABBwAFqQcjRAxChASAAQeAAaiABIAJBwAFqEJ4BQcjRAyABIAIQngEgAiACQcABaiACEKIBIAIgAhCEAkHo0AMgASACQeAAahCeASACQeAAaiACQcABaiACQeAAahCiAQvsAQAgACABQajSAxCeASAAQeAAaiACQYjTAxCeASAAIABB4ABqQejTAxChASAAIABBwAFqQcjUAxChASAAQeAAaiAAQcABaiADEKEBIAMgAiADEJ4BIANBiNMDIAMQogEgAyADEIQCIANBqNIDIAMQoQEgASACIANB4ABqEKEBIANB4ABqQejTAyADQeAAahCeASADQeAAakGo0gMgA0HgAGoQogEgA0HgAGpBiNMDIANB4ABqEKIBQcjUAyABIANBwAFqEJ4BIANBwAFqQajSAyADQcABahCiASADQcABakGI0wMgA0HAAWoQoQELkAEAIAAgASACQajVAxCxAiAAQaACaiADQcjXAxCwAiACIANB6NkDEKEBIABBoAJqIAAgBEGgAmoQjAIgBEGgAmogAUHo2QMgBEGgAmoQsQIgBEGgAmpBqNUDIARBoAJqEI0CIARBoAJqQcjXAyAEQaACahCNAkHI1wMgBBCJAiAEIAQQmAIgBEGo1QMgBBCMAgtQACABIABBMGpByNoDEBQgAUEwaiAAQTBqQfjaAxAUIAFB4ABqIABBqNsDEBQgAUGQAWogAEHY2wMQFCACIAFBwAFqQajbA0HI2gMgAhCyAgtsACAAQYj+BCABEJ4BIABB4ABqQej+BCABQeAAahCeASAAQcABakHI/wQgAUHAAWoQngEgAEGgAmpBqIAFIAFBoAJqEJ4BIABBgANqQYiBBSABQYADahCeASAAQeADakHogQUgAUHgA2oQngELigIAIAAgARAAIABBMGogAUEwahASIAFByIIFIAEQngEgAEHgAGogAUHgAGoQACAAQZABaiABQZABahASIAFB4ABqQaiDBSABQeAAahCeASAAQcABaiABQcABahAAIABB8AFqIAFB8AFqEBIgAUHAAWpBiIQFIAFBwAFqEJ4BIABBoAJqIAFBoAJqEAAgAEHQAmogAUHQAmoQEiABQaACakHohAUgAUGgAmoQngEgAEGAA2ogAUGAA2oQACAAQbADaiABQbADahASIAFBgANqQciFBSABQYADahCeASAAQeADaiABQeADahAAIABBkARqIAFBkARqEBIgAUHgA2pBqIYFIAFB4ANqEJ4BC2wAIABBiIcFIAEQngEgAEHgAGpB6IcFIAFB4ABqEJ4BIABBwAFqQciIBSABQcABahCeASAAQaACakGoiQUgAUGgAmoQngEgAEGAA2pBiIoFIAFBgANqEJ4BIABB4ANqQeiKBSABQeADahCeAQuKAgAgACABEAAgAEEwaiABQTBqEBIgAUHIiwUgARCeASAAQeAAaiABQeAAahAAIABBkAFqIAFBkAFqEBIgAUHgAGpBqIwFIAFB4ABqEJ4BIABBwAFqIAFBwAFqEAAgAEHwAWogAUHwAWoQEiABQcABakGIjQUgAUHAAWoQngEgAEGgAmogAUGgAmoQACAAQdACaiABQdACahASIAFBoAJqQeiNBSABQaACahCeASAAQYADaiABQYADahAAIABBsANqIAFBsANqEBIgAUGAA2pByI4FIAFBgANqEJ4BIABB4ANqIAFB4ANqEAAgAEGQBGogAUGQBGoQEiABQeADakGojwUgAUHgA2oQngELbAAgAEGIkAUgARCeASAAQeAAakHokAUgAUHgAGoQngEgAEHAAWpByJEFIAFBwAFqEJ4BIABBoAJqQaiSBSABQaACahCeASAAQYADakGIkwUgAUGAA2oQngEgAEHgA2pB6JMFIAFB4ANqEJ4BC4oCACAAIAEQACAAQTBqIAFBMGoQEiABQciUBSABEJ4BIABB4ABqIAFB4ABqEAAgAEGQAWogAUGQAWoQEiABQeAAakGolQUgAUHgAGoQngEgAEHAAWogAUHAAWoQACAAQfABaiABQfABahASIAFBwAFqQYiWBSABQcABahCeASAAQaACaiABQaACahAAIABB0AJqIAFB0AJqEBIgAUGgAmpB6JYFIAFBoAJqEJ4BIABBgANqIAFBgANqEAAgAEGwA2ogAUGwA2oQEiABQYADakHIlwUgAUGAA2oQngEgAEHgA2ogAUHgA2oQACAAQZAEaiABQZAEahASIAFB4ANqQaiYBSABQeADahCeAQtsACAAQYiZBSABEJ4BIABB4ABqQeiZBSABQeAAahCeASAAQcABakHImgUgAUHAAWoQngEgAEGgAmpBqJsFIAFBoAJqEJ4BIABBgANqQYicBSABQYADahCeASAAQeADakHonAUgAUHgA2oQngELigIAIAAgARAAIABBMGogAUEwahASIAFByJ0FIAEQngEgAEHgAGogAUHgAGoQACAAQZABaiABQZABahASIAFB4ABqQaieBSABQeAAahCeASAAQcABaiABQcABahAAIABB8AFqIAFB8AFqEBIgAUHAAWpBiJ8FIAFBwAFqEJ4BIABBoAJqIAFBoAJqEAAgAEHQAmogAUHQAmoQEiABQaACakHonwUgAUGgAmoQngEgAEGAA2ogAUGAA2oQACAAQbADaiABQbADahASIAFBgANqQcigBSABQYADahCeASAAQeADaiABQeADahAAIABBkARqIAFBkARqEBIgAUHgA2pBqKEFIAFB4ANqEJ4BC2wAIABBiKIFIAEQngEgAEHgAGpB6KIFIAFB4ABqEJ4BIABBwAFqQcijBSABQcABahCeASAAQaACakGopAUgAUGgAmoQngEgAEGAA2pBiKUFIAFBgANqEJ4BIABB4ANqQeilBSABQeADahCeAQuKAgAgACABEAAgAEEwaiABQTBqEBIgAUHIpgUgARCeASAAQeAAaiABQeAAahAAIABBkAFqIAFBkAFqEBIgAUHgAGpBqKcFIAFB4ABqEJ4BIABBwAFqIAFBwAFqEAAgAEHwAWogAUHwAWoQEiABQcABakGIqAUgAUHAAWoQngEgAEGgAmogAUGgAmoQACAAQdACaiABQdACahASIAFBoAJqQeioBSABQaACahCeASAAQYADaiABQYADahAAIABBsANqIAFBsANqEBIgAUGAA2pByKkFIAFBgANqEJ4BIABB4ANqIAFB4ANqEAAgAEGQBGogAUGQBGoQEiABQeADakGoqgUgAUHgA2oQngELhQEAIAAQVgRAQQEPCyAAEG9FBEBBAA8LIABBiKsFQfirBRAUIABBMGpBqKwFEAAgAEG4qwVBiK0FEBQgAEEwakG4rQUQAEH4qwVB+KsFEGBB+KsFIABB+KsFEGhB+KsFQYitBUH4qwUQaEH4qwVB6KsFQRBB+KsFEIUBQfirBUGIrQUQXg8LEgAgAEHorQUQbkHorQUQvgIPC7QCACAAELABBEBBAQ8LIAAQyQFFBEBBAA8LIABByK4FQfCwBRCeASAAQeAAakHIrgVB0LEFEJ4BQfCwBUGorwVBsLIFEJ8BQdCxBUGQswUQowFB8LAFQfCzBRCjAUHQsQVB2K8FQdC0BRCeAUGwsgVB4LIFQcCwBRARQbCyBUHgsgVB4LIFEBBBwLAFQbCyBRAAQZCzBUHAswVBwLAFEBFBkLMFQcCzBUHAswUQEEHAsAVBkLMFEABB8LMFQaC0BUHAsAUQEEHwswVBoLQFQaC0BRARQcCwBUHwswUQAEGAtQVB0LQFQcCwBRARQdC0BUGAtQVBgLUFEBBBwLAFQdC0BRAAQbC1BRCcAUHwswVBuLAFQQhB8LMFEN8BQfCzBUGwsgVB8LMFEL0BQfCzBSAAELgBDwsTACAAQZC2BRDIAUGQtgUQwAIPC9gEACAAQcABakHQtwUQoAEgAUHgAGpBsLgFEKABQdC3BSABQfC5BRCeASABQeAAaiAAQcABaiACQeAAahChASACQeAAaiACQeAAahCgASACQeAAakGwuAUgAkHgAGoQogEgAkHgAGpB0LcFIAJB4ABqEKIBIAJB4ABqQdC3BSACQeAAahCeAUHwuQUgAEHQugUQogFB0LoFQbC7BRCgAUGwuwVBsLsFQZC8BRChAUGQvAVBkLwFQZC8BRChAUGQvAVB0LoFQfC8BRCeASACQeAAaiAAQeAAakHQvQUQogFB0L0FIABB4ABqQdC9BRCiAUHQvQUgASACQcABahCeAUGQvAUgAEGwvgUQngFB0L0FIAAQoAEgAEHwvAUgABCiASAAQbC+BSAAEKIBIABBsL4FIAAQogEgAEHAAWpB0LoFIABBwAFqEKEBIABBwAFqIABBwAFqEKABIABBwAFqQdC3BSAAQcABahCiASAAQcABakGwuwUgAEHAAWoQogEgAUHgAGogAEHAAWogAhChAUGwvgUgAEGQvwUQogFBkL8FQdC9BUGQvwUQngEgAEHgAGpB8LwFQfC5BRCeAUHwuQVB8LkFQfC5BRChAUGQvwVB8LkFIABB4ABqEKIBIAIgAhCgASACQbC4BSACEKIBIABBwAFqQZC5BRCgASACQZC5BSACEKIBIAJBwAFqIAJBwAFqIAJBwAFqEKEBIAJBwAFqIAIgAkHAAWoQogEgAEHAAWogAEHAAWogAhChAUHQvQVB0L0FEKMBQdC9BUHQvQUgAkHgAGoQoQELsgQAIAAgARCgASAAQeAAakHQwAUQoAFB0MAFQbDBBRCgAUHQwAUgACABQeAAahChASABQeAAaiABQeAAahCgASABQeAAaiABIAFB4ABqEKIBIAFB4ABqQbDBBSABQeAAahCiASABQeAAaiABQeAAaiABQeAAahChASABIAFBkMIFEKEBQZDCBSABQZDCBRChASAAQZDCBSABQcABahChAUGQwgVB8MIFEKABIABBwAFqQfC/BRCgAUHwwgUgAUHgAGogABCiASAAIAFB4ABqIAAQogEgAEHAAWogAEHgAGogAEHAAWoQoQEgAEHAAWogAEHAAWoQoAEgAEHAAWpB0MAFIABBwAFqEKIBIABBwAFqQfC/BSAAQcABahCiASABQeAAaiAAIABB4ABqEKIBIABB4ABqQZDCBSAAQeAAahCeAUGwwQVBsMEFQbDBBRChAUGwwQVBsMEFQbDBBRChAUGwwQVBsMEFQbDBBRChASAAQeAAakGwwQUgAEHgAGoQogFBkMIFQfC/BSABQeAAahCeASABQeAAaiABQeAAaiABQeAAahChASABQeAAaiABQeAAahCjASABQcABaiABQcABahCgASABQcABaiABIAFBwAFqEKIBIAFBwAFqQfDCBSABQcABahCiAUHQwAVB0MAFQdDABRChAUHQwAVB0MAFQdDABRChASABQcABakHQwAUgAUHAAWoQogEgAEHAAWpB8L8FIAEQngEgASABIAEQoQELCAAgACABEHILbQIBfwF/IAAgARDMASABELEBBEAPCyABQdDDBRC1ASABQaACaiECQT4hAwJAA0BB0MMFIAIQwwIgAkGgAmohAiADLACo0AMEQEHQwwUgASACEMICIAJBoAJqIQILIANFDQEgA0EBayEDDAALCwuAAQIBfwF/IAIQnAIgABBXBEAPCyABEFcEQA8LIAFBoAJqIQNBPiEEAkADQCAAIAMgAhCzAiADQaACaiEDIAQsAKjQAwRAIAAgAyACELMCIANBoAJqIQMLIAIgAhCgAiAEQQFGDQEgBEEBayEEDAALCyAAIAMgAhCzAiACIAIQpAILEAAgAEHwxQVBoAQgARCtAgvsBQAgACAAQYADakHQzgUQngEgAEGAA2pBkMoFEIQCIABBkMoFQZDKBRChASAAIABBgANqQbDPBRChAUGwzwVBkMoFQZDKBRCeAUHQzgVBsM8FEIQCQdDOBUGwzwVBsM8FEKEBQZDKBUGwzwVBkMoFEKIBQdDOBUHQzgVB8MoFEKEBIABBoAJqIABBwAFqQdDOBRCeASAAQcABakHQywUQhAIgAEGgAmpB0MsFQdDLBRChASAAQaACaiAAQcABakGwzwUQoQFBsM8FQdDLBUHQywUQngFB0M4FQbDPBRCEAkHQzgVBsM8FQbDPBRChAUHQywVBsM8FQdDLBRCiAUHQzgVB0M4FQbDMBRChASAAQeAAaiAAQeADakHQzgUQngEgAEHgA2pBkM0FEIQCIABB4ABqQZDNBUGQzQUQoQEgAEHgAGogAEHgA2pBsM8FEKEBQbDPBUGQzQVBkM0FEJ4BQdDOBUGwzwUQhAJB0M4FQbDPBUGwzwUQoQFBkM0FQbDPBUGQzQUQogFB0M4FQdDOBUHwzQUQoQFBkMoFIAAgARCiASABIAEgARChAUGQygUgASABEKEBQfDKBSAAQYADaiABQYADahChASABQYADaiABQYADaiABQYADahChAUHwygUgAUGAA2ogAUGAA2oQoQFB8M0FQfjaAkGwzwUQngFBsM8FIABBoAJqIAFBoAJqEKEBIAFBoAJqIAFBoAJqIAFBoAJqEKEBQbDPBSABQaACaiABQaACahChAUGQzQUgAEHAAWogAUHAAWoQogEgAUHAAWogAUHAAWogAUHAAWoQoQFBkM0FIAFBwAFqIAFBwAFqEKEBQdDLBSAAQeAAaiABQeAAahCiASABQeAAaiABQeAAaiABQeAAahChAUHQywUgAUHgAGogAUHgAGoQoQFBsMwFIABB4ANqIAFB4ANqEKEBIAFB4ANqIAFB4ANqIAFB4ANqEKEBQbDMBSABQeADaiABQeADahChAQuNAQIBfwF/IABB2NAFEKQCIAEQnAJBwAAsAJDQBSICBEAgAkEBRgRAIAEgACABEJ4CBSABQdjQBSABEJ4CCwtBPyEDAkADQCABIAEQyAIgAywAkNAFIgIEQCACQQFGBEAgASAAIAEQngIFIAFB2NAFIAEQngILCyADRQ0BIANBAWshAwwACwsgASABEKQCC+sCACAAQZjVBRC6AiAAQdjZBRCoAkGY1QVB2NkFQZjeBRCeAkGY3gVB2NkFEJ0CQZjeBUGY3gUQtgJBmN4FQdjZBUGY3gUQngJBmN4FQdjZBRDIAkHY2QVB2NkFEKQCQZjeBUHY4gUQyQJB2OIFQZjnBRDIAkHY2QVB2OIFQdjrBRCeAkHY6wVB2NkFEMkCQdjZBUGY1QUQyQJBmNUFQZjwBRDJAkGY8AVBmOcFQZjwBRCeAkGY8AVBmOcFEMkCQdjrBUHY6wUQpAJBmOcFQdjrBUGY5wUQngJBmOcFQZjeBUGY5wUQngJBmN4FQdjrBRCkAkHY2QVBmN4FQdjZBRCeAkHY2QVB2NkFELcCQZjwBUHY6wVBmPAFEJ4CQZjwBUGY8AUQtQJB2OIFQZjVBUHY4gUQngJB2OIFQdjiBRC2AkHY4gVB2NkFQdjiBRCeAkHY4gVBmPAFQdjiBRCeAkHY4gVBmOcFIAEQngILaQBB2PQFEJwCIABBiNwDEMQCIAFBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZj5BRDGAkHY9AVBmPkFQdj0BRCeAkHY9AVB2PQFEMoCQdj0BSACEKcCC7UBAEHY/QUQnAIgAEGI3AMQxAIgAUGo3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmIIGEMYCQdj9BUGYggZB2P0FEJ4CIAJBiNwDEMQCIANBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZiCBhDGAkHY/QVBmIIGQdj9BRCeAkHY/QVB2P0FEMoCQdj9BSAEEKcCC4ECAEHYhgYQnAIgAEGI3AMQxAIgAUGo3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmIsGEMYCQdiGBkGYiwZB2IYGEJ4CIAJBiNwDEMQCIANBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZiLBhDGAkHYhgZBmIsGQdiGBhCeAiAEQYjcAxDEAiAFQajeAxDFAkGI3AMQvgJFBEBBAA8LQajeAxDAAkUEQEEADwtBiNwDQajeA0GYiwYQxgJB2IYGQZiLBkHYhgYQngJB2IYGQdiGBhDKAkHYhgYgBhCnAgvNAgBB2I8GEJwCIABBiNwDEMQCIAFBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZiUBhDGAkHYjwZBmJQGQdiPBhCeAiACQYjcAxDEAiADQajeAxDFAkGI3AMQvgJFBEBBAA8LQajeAxDAAkUEQEEADwtBiNwDQajeA0GYlAYQxgJB2I8GQZiUBkHYjwYQngIgBEGI3AMQxAIgBUGo3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmJQGEMYCQdiPBkGYlAZB2I8GEJ4CIAZBiNwDEMQCIAdBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZiUBhDGAkHYjwZBmJQGQdiPBhCeAkHYjwZB2I8GEMoCQdiPBiAIEKcCC5kDAEHYmAYQnAIgAEGI3AMQxAIgAUGo3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmJ0GEMYCQdiYBkGYnQZB2JgGEJ4CIAJBiNwDEMQCIANBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZidBhDGAkHYmAZBmJ0GQdiYBhCeAiAEQYjcAxDEAiAFQajeAxDFAkGI3AMQvgJFBEBBAA8LQajeAxDAAkUEQEEADwtBiNwDQajeA0GYnQYQxgJB2JgGQZidBkHYmAYQngIgBkGI3AMQxAIgB0Go3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmJ0GEMYCQdiYBkGYnQZB2JgGEJ4CIAhBiNwDEMQCIAlBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZidBhDGAkHYmAZBmJ0GQdiYBhCeAkHYmAZB2JgGEMoCQdiYBiAKEKcCCywAIABBiNwDEMQCIAFBqN4DEMUCQYjcA0Go3gNB2KEGEMYCQdihBiACEMoCCwvcwAF7AEEACwQYkwEAAEEICyABAAAA//////5b/v8CpL1TBdihCQjYOTNIfZ0pU6ftcwBByAULMKuq//////65//9Tsf7/qx4k9rD2oNIwZ78ShfOES3dk16xLQ7anG0ua5n856hEBGgBB+AULMEYXNBw0H9/08QTRCabmdgrVtpVMbEfljcCDnZOpiOtnLZUZtYU+eZqq48qS5Y+YEQBBqAYLMP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQBB2AYLMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiAcLMFXV////f//c//+pWP//VQ8Se1h7UGmYs1+JwnnCpTuya9alIdvTjSVN878c9YgADQBBuAcLMFbV////f//c//+pWP//VQ8Se1h7UGmYs1+JwnnCpTuya9alIdvTjSVN878c9YgADQBB6AcLMFXV////f//c//+pWP//VQ8Se1h7UGmYs1+JwnnCpTuya9alIdvTjSVN878c9YgADQBBmAgLMK6q/P////VD/f9H7fL/tzJpnemiSTroB3q7MoMx86jsacD0oB6NFO8GAv8+JrMKBABByAgLMKvq////v3/u//9UrP//qgeJPaw9qDTM2a9E4Tzh0h3ZNevSkO3pxpKm+V+OekSABgBBiBsLIAEAAAD//////lv+/wKkvVMF2KEJCNg5M0h9nSlTp+1zAEGoGwsgbZzy85DpmckjXJKHy+1sK485VHKWFNMFEf9Zn9nZSAcAQcgbCyD+////AQAAAAJIAwD6t4RY9U+87O9PjJlvBcWsWbEkGABB6BsLIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGIHAsgAAAAgP///3//Lf9/AdLeqQLs0AQE7JwZpL7OlKnT9jkAQagcCyABAACA////f/8t/38B0t6pAuzQBATsnBmkvs6UqdP2OQBByBwLIP/////+W/7/AqS9UwXYoQkI2DkzSH2dKVOn7XMAAAAAAEHoHAsgfPQXDFxtq5zlcUv9PenhHAXVHUcwsm0Najs6dJDpDj8AQYgdCyAAAACA/y3/fwHS3qkC7NAEBOycGaS+zpSp0/Y5AAAAAABBqCULMPP/DAAAACeqCgA0/DIAzFN/gApreumPR9ckuua+ftOxL6t4vztzyY5+3oM9UUXWCQBBmMsACyAREREREREREREREBAPDg0NDAsKCQgHBwYFBAMCAQEBAQBB2M0ACyAREREREREREREREBAPDg0NDAsKCQgHBwYFBAMCAQEBAQBB6M8AC6AI/v///wEAAAACSAMA+reEWPVPvOzvT4yZbwXFrFmxJBgDAAAA/f////wT+/8I7Dj7D4jlHBiIrZnYd9h8+fXIW7HPiap0VrDz/rkGYEABLwcmemYlvw2aznSDWS0F5CxNCRC902m2MJGnYaCyf6n75KgmS7PPCETzLHr/BuykNR+JEgoLAqDCJYghCH1/cRyX2MUa2MrcOUfBQePuqXtgTzTRHCOjYGTF7l/yT6kUxJVum1SAUDYdnd0GRZ8JdFIczEAndbCVmx18y+hSJlqwyF0DmUNc4gEPEBc9Z1+bxmNTrSbzvGFjw16agdzwz5mXYxzZq/AEvpUQIvLmySD2SaxCUxFNyMHKciVxFs6FYvzchkdX7NVkeRWWF0iawEJXNPhTdzM1upR3UK4WUMz4STwaJRe28tsF4TjQ3zYb82vnNj3dgLhU/BtJytqIcvL2xVs14prdBLscOJnJCabSJGUWzZySLfXjP0YEq7Fz+r0OeP32FybmMjt3nFAOSG9Xx+H3l+uxvBBf6XHaK2czqidgLC7uToFSRPMXEm+v5TksMx+an9yYZfKo0E7Sx7LDcBZmgRIRBh7iIrqH8N08AjgGTKUv/JdfQ2urlNNbnQiHlnsBrhSF9O+wAJ1gWjg5lKkQ5QiuKtLz8DXDsLiabntgy/msZC221gap4gr11WN0CW5P51QVkF8rQNcKhVH7gc8vrfrgLNn32VWPz1mcDdVgdQG9Y7f2ZDOr557BLxq/5VR2q8PckS8kWXR97c4nKHnkHA983Ap4vnrkJNeSDUwBO8ZnlC7BYuQaQ2/WcUVdX1H6/elgU873DeTMFWGO0w2eBfrCgHNj27niYS1aDRDa3famT6exdoMs1GtbwztaERSK3Af2xpyteMkMCKxWf7LHPsODJ46P8/ldAoSqYF3J07Uhpm8ECQ9Puy6nnA3mgWzlpPziA/jHC0QsAHv1Bkz5abhIr0RCWKZggqULIUFoyL8P6MHmy09PhjRO6mQfj1Etv5KPqaEWZOmqIodJ3ETbqBEG0IFH+X91CAG7gX0gkcqzniQ3fFFVrFcxB0NS9RouHFTeK+zDA2DReZam1ATo8DalVULovAw13pNvcVp5nlty6LsxNkWoK0JuoLuMZlPg9ldIKA+cec2XA0QL/FZ5pt4nMq8Yr0k2+/GyTNHzrHK6pqYJTWf9o7N54h5L8m0pTLUT3KYn2NKVRHlFENY0aoSWtaO4QF9nPIi6LtbQc+B/mV1+IoqN/xnow7xB4E+SrIssGSEaG+r0J0U7jrpkOAAtT57ZGOT0vwZx3+k4lZ77R28jRO3p/d9OLwW8USbQqjZ9wINzsNTwh2cfT28IiSx0YPUXY79oKadYY3z0Fwxcbauc5XFL/T3p4RwF1R1HMLJtDWo7OnSQ6Q4/AEGI2AALoAj+////AQAAAAJIAwD6t4RY9U+87O9PjJlvBcWsWbEkGP////8AAAAAAaQBAP1bQqz6J1729yfGzLeCYtasWBIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQajgAAugCMn///82AAAANzxaAFvDQQLbljruRZaS/nwVKg8iDfEXnPr//2MFAABkFdgI1N+3lUiDjxOsdC/cy6YIq7MD5hJ31vL/iCkNAIntMZh6vxd8G0qF9O+cCVo4yvwk1QXMZo0Y/Isk5wN0wZO820tUSPuWRJUsS29Pr1PwhWd6xXAnjMbBxGSerwOgGQ+JyKbGmBJWwsYgELyMmQXJpsmEdWI6MthzObmpoYFO06hdId0mtXSe28ZKh4DriiZAv5pKNfIa1pTr2RHGezJ0gOGXkOoGH4HCA9m6kJaa7Qi0qNcCRt7ECnpsFU2srBw5Lo9hm969qrF9/i1p/meSI3XiiCO29ns85ZNZ4rZXl8GMDABdzyxXPklC+/wF+zNc619gD+FvhsNEniIWcNak8WivzI4DTfatckhXs7+Gn59XXEQCh6wInKRdaYSNlp5xppukwbfs2bQEKlpM88a35Ek/P1KKWvm//2gr2XqjDoWm8q8QbUnkO4Gs5WQ03XgcsM8nGruzyBLKhH5Jn9yufgAio8WzhbGXz7lXsObB5kBzDxYNPTJB9lZazV9E8xhKDa9HH5FYjGy9veiH3k0rzj3N+2HL4IglqwuyTN+sB1ROTvldtt2PFXpkjWzU2MWDEt0bbRDQwqwx9OCP1kp18mh5QAMVc7CIrQ7It1De89L9zrUxpsQOa64pE33TAjg1CMw7n0Sev2hnuEIqOT1XfVR0ED73bok681X041/w/8Qxv6ykqvcFWKcjxVcBr8w3ENe+c76gP5b3cTXC0IGbi2ZPPCiR4/mSXRnQiwiv8wwuosJXN81s4HEaXTi7G+Iz6wfcRacOqfjYfh/j4+saWO8v3wvZc3Q25pvZJleDY8yJr/74mc3ef6WA/TpT372cOV4ZJb4LbRk/r1PRtbuTPTvKbRkuP4BF95yaNQM/xWBv+WdUxTQQSHPs3lwHSR0EynGaHJLC6h4ZDvMaDk18a+DreGSfG6ThtMoorfQR1VT/YeotltL/26UyaRZM7h2/8GkzWXZxnZhPaA6c3PfFWXpmohM8wRNEA/GQwgkPD5UAOU9OaJ5u9mumrMX5TloUcfSexJzaSpyZsQh0Tf9DyVfrthVxdPDmvh0pD1ZNihAEO4Cjuwvmw3jWGLCSqYQd04e2D3Dqoll/lpxxS+ryt4Ng6yWyHfNjwUra2fUFskytVv1mOTCUH78UqEL4KR8Pl73oocmGGGXrkbQ5KN5Qp3Wj2WCScYvRSYm9GnEULXnT0G7brawSRr54Baq1R43TCncNEQjZjm0+lozn2+OzvP7CYBOkm+Zw7rDHlQT+RYYEEQQ5IvCFwEwVaWV0HYVRPCMOO3RCd7jgJaHspCHov1EpEwY4FgdVKV++CaHB81vOUVAakJi0JrDOY2p1uIKLYTPCXABByOgAC6AIVlVVVf////+pkqmqrMLTN646wVsFkCYiMP5oxoxvnkKENEiDsBM7sY92QBowbwsB41KBdhmbZP2p1r8Q+gHSUuI/BgqcGmVF+/9xgIMqUNiiqKhx7F1dyrSDtHvSCOBkJwOgdavC90ApyAe13Ym/oSjDtRchoFqD8U4oBztbB0szRdczz6/njCJFaMdD0UlbWXc7Ogyyis11tiyRLjD0DcA+KOf8SSzKFKwkPiiyABLDnqrkpodD1lKjIhDnzq4M/U3nxwjGRGViOVgSagRJLN6ujVewx7ShbN1fcmwiWFQXSRdPypXa5qmEiVwNhE3HlJSfW9qK2vuqMSWduH+YO4srRiMpWVSC7jYXzJwJBtmstdpux3n4ATegVN7ZKOoE5kyjybS56EymQTac0jgeNGlHQLLoAafOuXbLNpL+Tjk25VVBxpdlYFikQhe1Le9dKCgmXd7QDInQ4oeqJdzZMJ3t1WvE0xeq/JAWMIVVGGAM2qo3WDr7Yw4D26r1OrVJUAJ5aaVCYEu3fzsB98gDs5nidfSSXc/wYGOvzdYiZQQcuQCQ2+WfK7nyegR8CNXUUdXuJDMb30nVvSY5aL3nBKeEpu38bnlfX8bveFKJ84qg7EO4gJfOiw33n8YqhLQ2gOWxT7oUGw+Hg5RZJdaSUqghHgcfRmKaaxm8AlKi4h5Z3Gnh/DU5Lo4mfU0+JJHadclUhkmLHnAf7+haykT3XK/Q8f0//6kCjyijiZlAccEaLuUavXHSjXvsPsOuc5IshbyWMESTLI8utYZD5Y2QdEPxI363P1E81/pR0ss3/UDpw5CvbfkzlCUuXMwgwUT0/UvzPj4/hXG1Defw0VShFBQRQLOQ0ASASIBwnpXLbNkhqdZuBHs/29byNDLFfwceVzNGAlCUQJVZFhs+Ub8BtE53wpI5gLgMUZcF03zfKGLnkVxztR+vr2fzj/37iuSxbb4QxY2OB6GZqXmRE3A+RMmIfh52UUWBIokLx4106SPSg5E0e+G4N40gNAyMKBIzWJIOw+Ul1T7lF8nKG2j/SKfmyIdIFn9zRBW7wL2Onmo/sH/kdGiBVl6Pgn2472MgId8zTKYcBR4yTzDDhq9dNCCsC2Nd55WR5jtf8fluKgHFdFOowxn9TDub/3xV/n8d8Re0vOhfo3K1XBi5WqS4ef3+++1LBk/7SX7WPI+2sk+EDcfAYcTDbZt1uxSMKjzDqejk7UHVosK+rOeNw7G8brWtAnvgSTjSjNXQWD0teoJe3V9QZKTNcIVCRP9yAfgal+Bt3Tj8LlxJuSvwi5RjHXLkFkbcoJkGA7jXmrgDUjnU/O3JLi8GZlwoB6u67ValZ6LQS1hlHHAyJHNQTLSkAP+d54WFB+/tmO+dxEd3gzjCJ2w2FrMURDNSVNNHQyFeAEHo8AALgAIAgEDAIKBg4BCQUNAwsHDwCIhIyCioaOgYmFjYOLh4+ASERMQkpGTkFJRU1DS0dPQMjEzMLKxs7BycXNw8vHz8AoJCwiKiYuISklLSMrJy8gqKSsoqqmrqGppa2jq6evoGhkbGJqZm5haWVtY2tnb2Do5Ozi6ubu4enl7ePr5+/gGBQcEhoWHhEZFR0TGxcfEJiUnJKalp6RmZWdk5uXn5BYVFxSWlZeUVlVXVNbV19Q2NTc0trW3tHZ1d3T29ff0Dg0PDI6Nj4xOTU9Mzs3PzC4tLyyura+sbm1vbO7t7+weHR8cnp2fnF5dX1ze3d/cPj0/PL69v7x+fX98/v3//AEGo/gALMKrq////v3/u//9UrP//qgeJPaw9qDTM2a9E4Tzh0h3ZNevSkO3pxpKm+V+OekSABgBB2P4ACzBV1f///3//3P//qVj//1UPEntYe1BpmLNficJ5wqU7smvWpSHb040lTfO/HPWIAA0AQciDAQswqur///+/f+7//1Ss//+qB4k9rD2oNMzZr0ThPOHSHdk169KQ7enGkqb5X456RIAGAEH4hgELYPP/DAAAACeqCgA0/DIAzFN/gApreumPR9ckuua+ftOxL6t4vztzyY5+3oM9UUXWCfP/DAAAACeqCgA0/DIAzFN/gApreumPR9ckuua+ftOxL6t4vztzyY5+3oM9UUXWCQBB2NIBCyAREREREREREREREBAPDg0NDAsKCQgHBwYFBAMCAQEBAQBBuNcBCyAREREREREREREREBAPDg0NDAsKCQgHBwYFBAMCAQEBAQBB2NsBC6AI/v///wEAAAACSAMA+reEWPVPvOzvT4yZbwXFrFmxJBgDAAAA/f////wT+/8I7Dj7D4jlHBiIrZnYd9h8+fXIW7HPiap0VrDz/rkGYEABLwcmemYlvw2aznSDWS0F5CxNCRC902m2MJGnYaCyf6n75KgmS7PPCETzLHr/BuykNR+JEgoLAqDCJYghCH1/cRyX2MUa2MrcOUfBQePuqXtgTzTRHCOjYGTF7l/yT6kUxJVum1SAUDYdnd0GRZ8JdFIczEAndbCVmx18y+hSJlqwyF0DmUNc4gEPEBc9Z1+bxmNTrSbzvGFjw16agdzwz5mXYxzZq/AEvpUQIvLmySD2SaxCUxFNyMHKciVxFs6FYvzchkdX7NVkeRWWF0iawEJXNPhTdzM1upR3UK4WUMz4STwaJRe28tsF4TjQ3zYb82vnNj3dgLhU/BtJytqIcvL2xVs14prdBLscOJnJCabSJGUWzZySLfXjP0YEq7Fz+r0OeP32FybmMjt3nFAOSG9Xx+H3l+uxvBBf6XHaK2czqidgLC7uToFSRPMXEm+v5TksMx+an9yYZfKo0E7Sx7LDcBZmgRIRBh7iIrqH8N08AjgGTKUv/JdfQ2urlNNbnQiHlnsBrhSF9O+wAJ1gWjg5lKkQ5QiuKtLz8DXDsLiabntgy/msZC221gap4gr11WN0CW5P51QVkF8rQNcKhVH7gc8vrfrgLNn32VWPz1mcDdVgdQG9Y7f2ZDOr557BLxq/5VR2q8PckS8kWXR97c4nKHnkHA983Ap4vnrkJNeSDUwBO8ZnlC7BYuQaQ2/WcUVdX1H6/elgU873DeTMFWGO0w2eBfrCgHNj27niYS1aDRDa3famT6exdoMs1GtbwztaERSK3Af2xpyteMkMCKxWf7LHPsODJ46P8/ldAoSqYF3J07Uhpm8ECQ9Puy6nnA3mgWzlpPziA/jHC0QsAHv1Bkz5abhIr0RCWKZggqULIUFoyL8P6MHmy09PhjRO6mQfj1Etv5KPqaEWZOmqIodJ3ETbqBEG0IFH+X91CAG7gX0gkcqzniQ3fFFVrFcxB0NS9RouHFTeK+zDA2DReZam1ATo8DalVULovAw13pNvcVp5nlty6LsxNkWoK0JuoLuMZlPg9ldIKA+cec2XA0QL/FZ5pt4nMq8Yr0k2+/GyTNHzrHK6pqYJTWf9o7N54h5L8m0pTLUT3KYn2NKVRHlFENY0aoSWtaO4QF9nPIi6LtbQc+B/mV1+IoqN/xnow7xB4E+SrIssGSEaG+r0J0U7jrpkOAAtT57ZGOT0vwZx3+k4lZ77R28jRO3p/d9OLwW8USbQqjZ9wINzsNTwh2cfT28IiSx0YPUXY79oKadYY3z0Fwxcbauc5XFL/T3p4RwF1R1HMLJtDWo7OnSQ6Q4/AEH44wELoAj+////AQAAAAJIAwD6t4RY9U+87O9PjJlvBcWsWbEkGP////8AAAAAAaQBAP1bQqz6J1729yfGzLeCYtasWBIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQZjsAQugCMn///82AAAANzxaAFvDQQLbljruRZaS/nwVKg8iDfEXnPr//2MFAABkFdgI1N+3lUiDjxOsdC/cy6YIq7MD5hJ31vL/iCkNAIntMZh6vxd8G0qF9O+cCVo4yvwk1QXMZo0Y/Isk5wN0wZO820tUSPuWRJUsS29Pr1PwhWd6xXAnjMbBxGSerwOgGQ+JyKbGmBJWwsYgELyMmQXJpsmEdWI6MthzObmpoYFO06hdId0mtXSe28ZKh4DriiZAv5pKNfIa1pTr2RHGezJ0gOGXkOoGH4HCA9m6kJaa7Qi0qNcCRt7ECnpsFU2srBw5Lo9hm969qrF9/i1p/meSI3XiiCO29ns85ZNZ4rZXl8GMDABdzyxXPklC+/wF+zNc619gD+FvhsNEniIWcNak8WivzI4DTfatckhXs7+Gn59XXEQCh6wInKRdaYSNlp5xppukwbfs2bQEKlpM88a35Ek/P1KKWvm//2gr2XqjDoWm8q8QbUnkO4Gs5WQ03XgcsM8nGruzyBLKhH5Jn9yufgAio8WzhbGXz7lXsObB5kBzDxYNPTJB9lZazV9E8xhKDa9HH5FYjGy9veiH3k0rzj3N+2HL4IglqwuyTN+sB1ROTvldtt2PFXpkjWzU2MWDEt0bbRDQwqwx9OCP1kp18mh5QAMVc7CIrQ7It1De89L9zrUxpsQOa64pE33TAjg1CMw7n0Sev2hnuEIqOT1XfVR0ED73bok681X041/w/8Qxv6ykqvcFWKcjxVcBr8w3ENe+c76gP5b3cTXC0IGbi2ZPPCiR4/mSXRnQiwiv8wwuosJXN81s4HEaXTi7G+Iz6wfcRacOqfjYfh/j4+saWO8v3wvZc3Q25pvZJleDY8yJr/74mc3ef6WA/TpT372cOV4ZJb4LbRk/r1PRtbuTPTvKbRkuP4BF95yaNQM/xWBv+WdUxTQQSHPs3lwHSR0EynGaHJLC6h4ZDvMaDk18a+DreGSfG6ThtMoorfQR1VT/YeotltL/26UyaRZM7h2/8GkzWXZxnZhPaA6c3PfFWXpmohM8wRNEA/GQwgkPD5UAOU9OaJ5u9mumrMX5TloUcfSexJzaSpyZsQh0Tf9DyVfrthVxdPDmvh0pD1ZNihAEO4Cjuwvmw3jWGLCSqYQd04e2D3Dqoll/lpxxS+ryt4Ng6yWyHfNjwUra2fUFskytVv1mOTCUH78UqEL4KR8Pl73oocmGGGXrkbQ5KN5Qp3Wj2WCScYvRSYm9GnEULXnT0G7brawSRr54Baq1R43TCncNEQjZjm0+lozn2+OzvP7CYBOkm+Zw7rDHlQT+RYYEEQQ5IvCFwEwVaWV0HYVRPCMOO3RCd7jgJaHspCHov1EpEwY4FgdVKV++CaHB81vOUVAakJi0JrDOY2p1uIKLYTPCXABBuPQBC6AIVlVVVf////+pkqmqrMLTN646wVsFkCYiMP5oxoxvnkKENEiDsBM7sY92QBowbwsB41KBdhmbZP2p1r8Q+gHSUuI/BgqcGmVF+/9xgIMqUNiiqKhx7F1dyrSDtHvSCOBkJwOgdavC90ApyAe13Ym/oSjDtRchoFqD8U4oBztbB0szRdczz6/njCJFaMdD0UlbWXc7Ogyyis11tiyRLjD0DcA+KOf8SSzKFKwkPiiyABLDnqrkpodD1lKjIhDnzq4M/U3nxwjGRGViOVgSagRJLN6ujVewx7ShbN1fcmwiWFQXSRdPypXa5qmEiVwNhE3HlJSfW9qK2vuqMSWduH+YO4srRiMpWVSC7jYXzJwJBtmstdpux3n4ATegVN7ZKOoE5kyjybS56EymQTac0jgeNGlHQLLoAafOuXbLNpL+Tjk25VVBxpdlYFikQhe1Le9dKCgmXd7QDInQ4oeqJdzZMJ3t1WvE0xeq/JAWMIVVGGAM2qo3WDr7Yw4D26r1OrVJUAJ5aaVCYEu3fzsB98gDs5nidfSSXc/wYGOvzdYiZQQcuQCQ2+WfK7nyegR8CNXUUdXuJDMb30nVvSY5aL3nBKeEpu38bnlfX8bveFKJ84qg7EO4gJfOiw33n8YqhLQ2gOWxT7oUGw+Hg5RZJdaSUqghHgcfRmKaaxm8AlKi4h5Z3Gnh/DU5Lo4mfU0+JJHadclUhkmLHnAf7+haykT3XK/Q8f0//6kCjyijiZlAccEaLuUavXHSjXvsPsOuc5IshbyWMESTLI8utYZD5Y2QdEPxI363P1E81/pR0ss3/UDpw5CvbfkzlCUuXMwgwUT0/UvzPj4/hXG1Defw0VShFBQRQLOQ0ASASIBwnpXLbNkhqdZuBHs/29byNDLFfwceVzNGAlCUQJVZFhs+Ub8BtE53wpI5gLgMUZcF03zfKGLnkVxztR+vr2fzj/37iuSxbb4QxY2OB6GZqXmRE3A+RMmIfh52UUWBIokLx4106SPSg5E0e+G4N40gNAyMKBIzWJIOw+Ul1T7lF8nKG2j/SKfmyIdIFn9zRBW7wL2Onmo/sH/kdGiBVl6Pgn2472MgId8zTKYcBR4yTzDDhq9dNCCsC2Nd55WR5jtf8fluKgHFdFOowxn9TDub/3xV/n8d8Re0vOhfo3K1XBi5WqS4ef3+++1LBk/7SX7WPI+2sk+EDcfAYcTDbZt1uxSMKjzDqejk7UHVosK+rOeNw7G8brWtAnvgSTjSjNXQWD0teoJe3V9QZKTNcIVCRP9yAfgal+Bt3Tj8LlxJuSvwi5RjHXLkFkbcoJkGA7jXmrgDUjnU/O3JLi8GZlwoB6u67ValZ6LQS1hlHHAyJHNQTLSkAP+d54WFB+/tmO+dxEd3gzjCJ2w2FrMURDNSVNNHQyFeAEHY/AELgAIAgEDAIKBg4BCQUNAwsHDwCIhIyCioaOgYmFjYOLh4+ASERMQkpGTkFJRU1DS0dPQMjEzMLKxs7BycXNw8vHz8AoJCwiKiYuISklLSMrJy8gqKSsoqqmrqGppa2jq6evoGhkbGJqZm5haWVtY2tnb2Do5Ozi6ubu4enl7ePr5+/gGBQcEhoWHhEZFR0TGxcfEJiUnJKalp6RmZWdk5uXn5BYVFxSWlZeUVlVXVNbV19Q2NTc0trW3tHZ1d3T29ff0Dg0PDI6Nj4xOTU9Mzs3PzC4tLyyura+sbm1vbO7t7+weHR8cnp2fnF5dX1ze3d/cPj0/PL69v7x+fX98/v3//AEGYjgILoAj+////AQAAAAJIAwD6t4RY9U+87O9PjJlvBcWsWbEkGAMAAAD9/////BP7/wjsOPsPiOUcGIitmdh32Hz59chbsc+JqnRWsPP+uQZgQAEvByZ6ZiW/DZrOdINZLQXkLE0JEL3TabYwkadhoLJ/qfvkqCZLs88IRPMsev8G7KQ1H4kSCgsCoMIliCEIfX9xHJfYxRrYytw5R8FB4+6pe2BPNNEcI6NgZMXuX/JPqRTElW6bVIBQNh2d3QZFnwl0UhzMQCd1sJWbHXzL6FImWrDIXQOZQ1ziAQ8QFz1nX5vGY1OtJvO8YWPDXpqB3PDPmZdjHNmr8AS+lRAi8ubJIPZJrEJTEU3IwcpyJXEWzoVi/NyGR1fs1WR5FZYXSJrAQlc0+FN3MzW6lHdQrhZQzPhJPBolF7by2wXhONDfNhvza+c2Pd2AuFT8G0nK2ohy8vbFWzXimt0Euxw4mckJptIkZRbNnJIt9eM/RgSrsXP6vQ54/fYXJuYyO3ecUA5Ib1fH4feX67G8EF/pcdorZzOqJ2AsLu5OgVJE8xcSb6/lOSwzH5qf3Jhl8qjQTtLHssNwFmaBEhEGHuIiuofw3TwCOAZMpS/8l19Da6uU01udCIeWewGuFIX077AAnWBaODmUqRDlCK4q0vPwNcOwuJpue2DL+axkLbbWBqniCvXVY3QJbk/nVBWQXytA1wqFUfuBzy+t+uAs2ffZVY/PWZwN1WB1Ab1jt/ZkM6vnnsEvGr/lVHarw9yRLyRZdH3tzicoeeQcD3zcCni+euQk15INTAE7xmeULsFi5BpDb9ZxRV1fUfr96WBTzvcN5MwVYY7TDZ4F+sKAc2PbueJhLVoNENrd9qZPp7F2gyzUa1vDO1oRFIrcB/bGnK14yQwIrFZ/ssc+w4Mnjo/z+V0ChKpgXcnTtSGmbwQJD0+7LqecDeaBbOWk/OID+McLRCwAe/UGTPlpuEivREJYpmCCpQshQWjIvw/owebLT0+GNE7qZB+PUS2/ko+poRZk6aoih0ncRNuoEQbQgUf5f3UIAbuBfSCRyrOeJDd8UVWsVzEHQ1L1Gi4cVN4r7MMDYNF5lqbUBOjwNqVVQui8DDXek29xWnmeW3LouzE2RagrQm6gu4xmU+D2V0goD5x5zZcDRAv8Vnmm3icyrxivSTb78bJM0fOscrqmpglNZ/2js3niHkvybSlMtRPcpifY0pVEeUUQ1jRqhJa1o7hAX2c8iLou1tBz4H+ZXX4iio3/GejDvEHgT5KsiywZIRob6vQnRTuOumQ4AC1PntkY5PS/BnHf6TiVnvtHbyNE7en9304vBbxRJtCqNn3Ag3Ow1PCHZx9PbwiJLHRg9Rdjv2gpp1hjfPQXDFxtq5zlcUv9PenhHAXVHUcwsm0Najs6dJDpDj8AQbiWAgugCP7///8BAAAAAkgDAPq3hFj1T7zs70+MmW8FxaxZsSQY/////wAAAAABpAEA/VtCrPonXvb3J8bMt4Ji1qxYEgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAABB2J4CC6AIyf///zYAAAA3PFoAW8NBAtuWOu5FlpL+fBUqDyIN8Rec+v//YwUAAGQV2AjU37eVSIOPE6x0L9zLpgirswPmEnfW8v+IKQ0Aie0xmHq/F3wbSoX075wJWjjK/CTVBcxmjRj8iyTnA3TBk7zbS1RI+5ZElSxLb0+vU/CFZ3rFcCeMxsHEZJ6vA6AZD4nIpsaYElbCxiAQvIyZBcmmyYR1Yjoy2HM5uamhgU7TqF0h3Sa1dJ7bxkqHgOuKJkC/mko18hrWlOvZEcZ7MnSA4ZeQ6gYfgcID2bqQlprtCLSo1wJG3sQKemwVTaysHDkuj2Gb3r2qsX3+LWn+Z5IjdeKII7b2ezzlk1nitleXwYwMAF3PLFc+SUL7/AX7M1zrX2AP4W+Gw0SeIhZw1qTxaK/MjgNN9q1ySFezv4afn1dcRAKHrAicpF1phI2WnnGmm6TBt+zZtAQqWkzzxrfkST8/Uopa+b//aCvZeqMOhabyrxBtSeQ7gazlZDTdeBywzycau7PIEsqEfkmf3K5+ACKjxbOFsZfPuVew5sHmQHMPFg09MkH2VlrNX0TzGEoNr0cfkViMbL296IfeTSvOPc37YcvgiCWrC7JM36wHVE5O+V223Y8VemSNbNTYxYMS3RttENDCrDH04I/WSnXyaHlAAxVzsIitDsi3UN7z0v3OtTGmxA5rrikTfdMCODUIzDufRJ6/aGe4Qio5PVd9VHQQPvduiTrzVfTjX/D/xDG/rKSq9wVYpyPFVwGvzDcQ175zvqA/lvdxNcLQgZuLZk88KJHj+ZJdGdCLCK/zDC6iwlc3zWzgcRpdOLsb4jPrB9xFpw6p+Nh+H+Pj6xpY7y/fC9lzdDbmm9kmV4NjzImv/viZzd5/pYD9OlPfvZw5XhklvgttGT+vU9G1u5M9O8ptGS4/gEX3nJo1Az/FYG/5Z1TFNBBIc+zeXAdJHQTKcZocksLqHhkO8xoOTXxr4Ot4ZJ8bpOG0yiit9BHVVP9h6i2W0v/bpTJpFkzuHb/waTNZdnGdmE9oDpzc98VZemaiEzzBE0QD8ZDCCQ8PlQA5T05onm72a6asxflOWhRx9J7EnNpKnJmxCHRN/0PJV+u2FXF08Oa+HSkPVk2KEAQ7gKO7C+bDeNYYsJKphB3Th7YPcOqiWX+WnHFL6vK3g2DrJbId82PBStrZ9QWyTK1W/WY5MJQfvxSoQvgpHw+XveihyYYYZeuRtDko3lCndaPZYJJxi9FJib0acRQtedPQbtutrBJGvngFqrVHjdMKdw0RCNmObT6WjOfb47O8/sJgE6Sb5nDusMeVBP5FhgQRBDki8IXATBVpZXQdhVE8Iw47dEJ3uOAloeykIei/USkTBjgWB1UpX74JocHzW85RUBqQmLQmsM5janW4gothM8JcAEH4pgILoAhWVVVV/////6mSqaqswtM3rjrBWwWQJiIw/mjGjG+eQoQ0SIOwEzuxj3ZAGjBvCwHjUoF2GZtk/anWvxD6AdJS4j8GCpwaZUX7/3GAgypQ2KKoqHHsXV3KtIO0e9II4GQnA6B1q8L3QCnIB7Xdib+hKMO1FyGgWoPxTigHO1sHSzNF1zPPr+eMIkVox0PRSVtZdzs6DLKKzXW2LJEuMPQNwD4o5/xJLMoUrCQ+KLIAEsOequSmh0PWUqMiEOfOrgz9TefHCMZEZWI5WBJqBEks3q6NV7DHtKFs3V9ybCJYVBdJF0/KldrmqYSJXA2ETceUlJ9b2ora+6oxJZ24f5g7iytGIylZVILuNhfMnAkG2ay12m7HefgBN6BU3tko6gTmTKPJtLnoTKZBNpzSOB40aUdAsugBp865dss2kv5OOTblVUHGl2VgWKRCF7Ut710oKCZd3tAMidDih6ol3Nkwne3Va8TTF6r8kBYwhVUYYAzaqjdYOvtjDgPbqvU6tUlQAnlppUJgS7d/OwH3yAOzmeJ19JJdz/BgY6/N1iJlBBy5AJDb5Z8rufJ6BHwI1dRR1e4kMxvfSdW9JjlovecEp4Sm7fxueV9fxu94UonziqDsQ7iAl86LDfefxiqEtDaA5bFPuhQbD4eDlFkl1pJSqCEeBx9GYpprGbwCUqLiHlncaeH8NTkujiZ9TT4kkdp1yVSGSYsecB/v6FrKRPdcr9Dx/T//qQKPKKOJmUBxwRou5Rq9cdKNe+w+w65zkiyFvJYwRJMsjy61hkPljZB0Q/Ejfrc/UTzX+lHSyzf9QOnDkK9t+TOUJS5czCDBRPT9S/M+Pj+FcbUN5/DRVKEUFBFAs5DQBIBIgHCelcts2SGp1m4Eez/b1vI0MsV/Bx5XM0YCUJRAlVkWGz5RvwG0TnfCkjmAuAxRlwXTfN8oYueRXHO1H6+vZ/OP/fuK5LFtvhDFjY4HoZmpeZETcD5EyYh+HnZRRYEiiQvHjXTpI9KDkTR74bg3jSA0DIwoEjNYkg7D5SXVPuUXycobaP9Ip+bIh0gWf3NEFbvAvY6eaj+wf+R0aIFWXo+CfbjvYyAh3zNMphwFHjJPMMOGr100IKwLY13nlZHmO1/x+W4qAcV0U6jDGf1MO5v/fFX+fx3xF7S86F+jcrVcGLlapLh5/f777UsGT/tJftY8j7ayT4QNx8BhxMNtm3W7FIwqPMOp6OTtQdWiwr6s543Dsbxuta0Ce+BJONKM1dBYPS16gl7dX1BkpM1whUJE/3IB+BqX4G3dOPwuXEm5K/CLlGMdcuQWRtygmQYDuNeauANSOdT87ckuLwZmXCgHq7rtVqVnotBLWGUccDIkc1BMtKQA/53nhYUH7+2Y753ER3eDOMInbDYWsxREM1JU00dDIV4AQZivAguAAgCAQMAgoGDgEJBQ0DCwcPAIiEjIKKho6BiYWNg4uHj4BIRExCSkZOQUlFTUNLR09AyMTMwsrGzsHJxc3Dy8fPwCgkLCIqJi4hKSUtIysnLyCopKyiqqauoamlraOrp6+gaGRsYmpmbmFpZW1ja2dvYOjk7OLq5u7h6eXt4+vn7+AYFBwSGhYeERkVHRMbFx8QmJSckpqWnpGZlZ2Tm5efkFhUXFJaVl5RWVVdU1tXX1DY1NzS2tbe0dnV3dPb19/QODQ8Mjo2PjE5NT0zOzc/MLi0vLK6tr6xubW9s7u3v7B4dHxyenZ+cXl1fXN7d39w+PT88vr2/vH59f3z+/f/8AQdjPAguQARYMU/2Qh7Nc9f92mWf8F3jBoTsUx5VPFUfn0PPNaq7wQPTbIcxuzu11+wueQXcBEnEi5wzVk6y6jv0YeRpjIozOJQdXE19Z3ZRRQFApWKxRwFkArT+MHA5qoghQ/D68C/3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQBB6NACC5ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEH40QILoAIQCpQCoo/y9RqWtIcm+/WzgOUqPrWTqKHprjwanZmUmGs2Yxhjt2dv17xQQ5KRgQUG9iOedcCppcNgzbydxaCqBniG4hh+sTtns0GFzLYaG0eFFfIO7bbC8+1gcwkqkhFKTElg+ApzTFqcNl4f+nxZWmMKqmyF5udfSQ1u6bXvu6Il7/B1qdMH5dqAfo79gwBdsGTfkvzArdxhFCsKJ6oYoOvkO2qsrYY6oz3JTlxJee3KPKRQWBfn8hveY6HCKwv9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZjUAgugAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBuNYCC8AE/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEH42gILYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172Ff3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQBByJwDC6ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHongMLoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQYi8AwugAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqNADC0AAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAABAAABAAEBAEGI/gQLYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6P4EC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcj/BAtg/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGogAULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiIEFC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeiBBQtg/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHIggULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqIMFC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABx8HGG5MkDzdKlzR9GIqtdlRuF069CcFiey7oBvg62jtJQ0INuffkDQYdjVGUg8BgAQYiEBQtgw0V1huTJDYnVpYUyUyLzKix+mzBmCIhQJBCIfowbDaJokNviT/DkFDqFZBU/beUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHohAULYGXUGbNSlQgHE4MKtZJfacaPIhfRzDzol+4p3LLKrlujTc6qXeqT4xzrZvuwDyLyCEbW5Uytavay7HxJ/GugQliU05kl1JVIz9DoqEC6nBvBid6g5csTOC6vf4SI2u8OEQBByIUFC2DaD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw7aD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw4AQaiGBQtgP+S8DfU82IKPAZ3fUz6BooHhZTylyvDGlf5QjVLPJXVrinn0UO2FSr3u+Gz9oB0XbMZC8grDJjdw/rbRqsEqfKIUS7r7B0CgKRQ0ZjJ8Ue9rItJOZbqVAN33hszscOMCAEGIhwULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6IcFC2DoZIp5GzbxMCpazn6r3bjz93cVxjrKqBabAv10+C9qwm4ccGBmtzY2YGEbJKukGwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQciIBQtgcfBxhuTJA83Spc0fRiKrXZUbhdOvQnBYnsu6Ab4Oto7SUNCDbn35A0GHY1RlIPAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGoiQULYDq6jXkbNvvsLFqGkbjdAMGO2isj8Y/ADiFHyvHGPMHVBFx7v0cqIkdZXxzlhPEQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiIoFC2Cuqvz////1Q/3/R+3y/7cyaZ3pokk66Ad6uzKDMfOo7GnA9KAejRTvBgL/PiazCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeiKBQtgw0V1huTJDYnVpYUyUyLzKix+mzBmCIhQJBCIfowbDaJokNviT/DkFDqFZBU/beUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHIiwULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqIwFC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAQYiNBQtgrqr8////9UP9/0ft8v+3Mmmd6aJJOugHersygzHzqOxpwPSgHo0U7wYC/z4mswoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHojQULYNGaXKVdWC8+g4HBhj0hlEIyN2KLyEQoOBg+EBn9Kq2SufB8rE9OeR3IXoJ9/JLVC9oPo1qip897fH6SKsHeF9zxvk5r2I0IL6fUdNqHIMrRHbzOlmZZoi3Sh/277X4rDgBByI4FC2DRmlylXVgvPoOBwYY9IZRCMjdii8hEKDgYPhAZ/SqtkrnwfKxPTnkdyF6CffyS1QvRmlylXVgvPoOBwYY9IZRCMjdii8hEKDgYPhAZ/SqtkrnwfKxPTnkdyF6CffyS1QsAQaiPBQtg2g+jWqKnz3t8fpIqwd4X3PG+TmvYjQgvp9R02ocgytEdvM6WZlmiLdKH/bvtfisO0ZpcpV1YLz6DgcGGPSGUQjI3YovIRCg4GD4QGf0qrZK58HysT055Hchegn38ktULAEGIkAULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6JAFC2Bx8HGG5MkDzdKlzR9GIqtdlRuF069CcFiey7oBvg62jtJQ0INuffkDQYdjVGUg8BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQciRBQtg6GSKeRs28TAqWs5+q9248/d3FcY6yqgWmwL9dPgvasJuHHBgZrc2NmBhGySrpBsFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGokgULYOhkinkbNvEwKlrOfqvduPP3dxXGOsqoFpsC/XT4L2rCbhxwYGa3NjZgYRskq6QbBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiJMFC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeiTBQtgcfBxhuTJA83Spc0fRiKrXZUbhdOvQnBYnsu6Ab4Oto7SUNCDbn35A0GHY1RlIPAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHIlAULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqJUFC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoZIp5GzbxMCpazn6r3bjz93cVxjrKqBabAv10+C9qwm4ccGBmtzY2YGEbJKukGwUAQYiWBQtgOrqNeRs2++wsWoaRuN0AwY7aKyPxj8AOIUfK8cY8wdUEXHu/RyoiR1lfHOWE8RABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHolgULYGzGQvIKwyY3cP620arBKnyiFEu6+wdAoCkUNGYyfFHvayLSTmW6lQDd94bM7HDjAj/kvA31PNiCjwGd31M+gaKB4WU8pcrwxpX+UI1SzyV1a4p59FDthUq97vhs/aAdFwBByJcFC2DaD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw7aD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw4AQaiYBQtgRtblTK1q9rLsfEn8a6BCWJTTmSXUlUjP0OioQLqcG8GJ3qDlyxM4Lq9/hIja7w4RZdQZs1KVCAcTgwq1kl9pxo8iF9HMPOiX7incssquW6NNzqpd6pPjHOtm+7APIvIIAEGImQULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6JkFC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQciaBQtg/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGomwULYK6q/P////VD/f9H7fL/tzJpnemiSTroB3q7MoMx86jsacD0oB6NFO8GAv8+JrMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiJwFC2Cuqvz////1Q/3/R+3y/7cyaZ3pokk66Ad6uzKDMfOo7GnA9KAejRTvBgL/PiazCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeicBQtgrqr8////9UP9/0ft8v+3Mmmd6aJJOugHersygzHzqOxpwPSgHo0U7wYC/z4mswoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHInQULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqJ4FC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABx8HGG5MkDzdKlzR9GIqtdlRuF069CcFiey7oBvg62jtJQ0INuffkDQYdjVGUg8BgAQYifBQtgw0V1huTJDYnVpYUyUyLzKix+mzBmCIhQJBCIfowbDaJokNviT/DkFDqFZBU/beUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHonwULYEbW5Uytavay7HxJ/GugQliU05kl1JVIz9DoqEC6nBvBid6g5csTOC6vf4SI2u8OEWXUGbNSlQgHE4MKtZJfacaPIhfRzDzol+4p3LLKrlujTc6qXeqT4xzrZvuwDyLyCABByKAFC2DRmlylXVgvPoOBwYY9IZRCMjdii8hEKDgYPhAZ/SqtkrnwfKxPTnkdyF6CffyS1QvRmlylXVgvPoOBwYY9IZRCMjdii8hEKDgYPhAZ/SqtkrnwfKxPTnkdyF6CffyS1QsAQaihBQtgbMZC8grDJjdw/rbRqsEqfKIUS7r7B0CgKRQ0ZjJ8Ue9rItJOZbqVAN33hszscOMCP+S8DfU82IKPAZ3fUz6BooHhZTylyvDGlf5QjVLPJXVrinn0UO2FSr3u+Gz9oB0XAEGIogULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KIFC2DoZIp5GzbxMCpazn6r3bjz93cVxjrKqBabAv10+C9qwm4ccGBmtzY2YGEbJKukGwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcijBQtgcfBxhuTJA83Spc0fRiKrXZUbhdOvQnBYnsu6Ab4Oto7SUNCDbn35A0GHY1RlIPAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGopAULYHHwcYbkyQPN0qXNH0Yiq12VG4XTr0JwWJ7LugG+DraO0lDQg259+QNBh2NUZSDwGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiKUFC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeilBQtg6GSKeRs28TAqWs5+q9248/d3FcY6yqgWmwL9dPgvasJuHHBgZrc2NmBhGySrpBsFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHIpgULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqKcFC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAQYioBQtgrqr8////9UP9/0ft8v+3Mmmd6aJJOugHersygzHzqOxpwPSgHo0U7wYC/z4mswoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHoqAULYNoPo1qip897fH6SKsHeF9zxvk5r2I0IL6fUdNqHIMrRHbzOlmZZoi3Sh/277X4rDtGaXKVdWC8+g4HBhj0hlEIyN2KLyEQoOBg+EBn9Kq2SufB8rE9OeR3IXoJ9/JLVCwBByKkFC2DaD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw7aD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw4AQaiqBQtg0ZpcpV1YLz6DgcGGPSGUQjI3YovIRCg4GD4QGf0qrZK58HysT055Hchegn38ktUL2g+jWqKnz3t8fpIqwd4X3PG+TmvYjQgvp9R02ocgytEdvM6WZlmiLdKH/bvtfisOAEGIqwULMHHwcYbkyQPN0qXNH0Yiq12VG4XTr0JwWJ7LugG+DraO0lDQg259+QNBh2NUZSDwGABBuKsFCzDoZIp5GzbxMCpazn6r3bjz93cVxjrKqBabAv10+C9qwm4ccGBmtzY2YGEbJKukGwUAQeirBQsQVVVVVQAAAABW4VVVAIxsOQBByK4FC2BUVQEAAAAEGAEAsDoFAFCFbyc8JXy1PGMCtesx7NEibqJM0fImYZHTlmUAGle4+xdXVf7////6of7/o3b5/1uZtM500SQd9AO9XZnBmHlU9jRgelCPRop3A4F/H5NZBQIAQaivBQswcfBxhuTJA83Spc0fRiKrXZUbhdOvQnBYnsu6Ab4Oto7SUNCDbn35A0GHY1RlIPAYAEHYrwULYNGaXKVdWC8+g4HBhj0hlEIyN2KLyEQoOBg+EBn9Kq2SufB8rE9OeR3IXoJ9/JLVC9GaXKVdWC8+g4HBhj0hlEIyN2KLyEQoOBg+EBn9Kq2SufB8rE9OeR3IXoJ9/JLVCwBBuLAFCwgAAAEAAAAB0gBB8MUFC6AEEHX1XbW5vMAk+4vmMIb5JYn01fvI+wZEoJEh0ZGEL45pgG8KZXGdPoCrTB0BL2wiGZFIF0d89mfXkoXYG4g/rx0W0u6e5GcaGLKuaXiMt+W8ez8EFJNT9q4acPI3JfZzKi1i6RDJ8a/UqcqSNDGDYhk9qL7CPi8uc6ovsJ/nx6ThG5bXf2NJbEV3gejciugIF5k5Nno/3jU2nHUxfJ8dnLAgqE7CE576fVcDpEdpxT+3zlz83LbBpKa8ZnA2gb0bdSfGC++jGAQQ4PmpcZu/SRcLtn0JkRJRHI8w5cZFg0nC162dsSOIbSyVVtXtTACSlfE+wD7sa0yt5kwEIK0fCo2UFc0JMV3F0As/LMBGTzM5V8A062JaO6V2Fh1BOEVyNDRG0FobehIpAVvIxXSkYV6W74YojvyNQxKfRe8vU5YSBMHNaXHuQCqyS7eOpkCcC01o9JCHESUfwNTIk8JrWRISYSd/g2QQ5N0kvxD7fwfzASvNC1efxJNGN0zyWwwatjrHmzWlDTXdrNfkkw1n0la2Gm64mZDTDSuOl0iBMhmIDms4FPQTsaSaDWPi3KAHGDN1k7vnJ6lvRkmtaKpH4/TqbxDW0AocDw86/4Pucshcg2CmuUNOB5ruz+n136rAqa3ex4yOaTAsPzWrdjcH0UM63LoXhYQXqRSNP6G6Y3PQB0V9P3uX1JMB7okKHGpJwKm94bclyNy1He4CAAAAAABBkNAFC0EAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAABAAABAP8AAQ==";
+export const pq = 712;
+export const pr = 3464;
+export const pG1gen = 42968;
+export const pG1zero = 43112;
+export const pG1b = 4776;
+export const pG2gen = 43256;
+export const pG2zero = 43544;
+export const pG2b = 17272;
+export const pOneT = 43832;
+export const prePSize = 288;
+export const preQSize = 20448;
+export const n8q = 48;
+export const n8r = 32;
+export const q = "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787";
+export const r = "52435875175126190479447740508185965837690552500527637822603658699938581184513";
diff --git a/build/bn128_wasm.js b/build/bn128_wasm.js
index 9dcb102..e08686b 100644
--- a/build/bn128_wasm.js
+++ b/build/bn128_wasm.js
@@ -1,18 +1,16 @@
-
- exports.code = "AGFzbQEAAAABlQESYAJ/fwBgAX8AYAF/AX9gAn9/AX9gA39/fwF/YAN/f38AYAN/fn8AYAJ/fgBgBH9/f38AYAV/f39/fwBgBH9/f38Bf2AGf39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38Bf2AHf39/f39/fwF/YAl/f39/f39/f38Bf2ALf39/f39/f39/f38BfwIPAQNlbnYGbWVtb3J5AgAZA8ECvwIAAQIBAwMEBAUAAAYHCAUCBQUAAAUAAAAAAgIAAQUICQUFBQgICAgAAgIFBQAABQAAAAACAgABBQgJBQUFCAgICAACBQAAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgDAAgIAgAACQsLBQULAAgNCQgCAgEBAAUFAAUFAAAAAAMACAICCQgAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgFAwAICAIAAAkLCwUFCwUDAAgIAgAACQsLBQULBQUJCQkJCQACAgEBAAUABQUAAgAAAwAIAgkIAAICAQEABQUABQUAAAAAAwAIAgIJCAACBQAAAAAICAUAAAAAAAAAAAAAAAAAAAAABA4PEBEFB8UlqwIIaW50X2NvcHkAAAhpbnRfemVybwABB2ludF9vbmUAAwppbnRfaXNaZXJvAAIGaW50X2VxAAQHaW50X2d0ZQAFB2ludF9hZGQABgdpbnRfc3ViAAcHaW50X211bAAICmludF9zcXVhcmUACQ1pbnRfc3F1YXJlT2xkAAoHaW50X2RpdgANDmludF9pbnZlcnNlTW9kAA4IZjFtX2NvcHkAAAhmMW1femVybwABCmYxbV9pc1plcm8AAgZmMW1fZXEABAdmMW1fYWRkABAHZjFtX3N1YgARB2YxbV9uZWcAEg5mMW1faXNOZWdhdGl2ZQAZCWYxbV9pc09uZQAPCGYxbV9zaWduABoLZjFtX21SZWR1Y3QAEwdmMW1fbXVsABQKZjFtX3NxdWFyZQAVDWYxbV9zcXVhcmVPbGQAFhJmMW1fZnJvbU1vbnRnb21lcnkAGBBmMW1fdG9Nb250Z29tZXJ5ABcLZjFtX2ludmVyc2UAGwdmMW1fb25lABwIZjFtX2xvYWQAHQ9mMW1fdGltZXNTY2FsYXIAHgdmMW1fZXhwACYQZjFtX2JhdGNoSW52ZXJzZQAfCGYxbV9zcXJ0ACcMZjFtX2lzU3F1YXJlACgVZjFtX2JhdGNoVG9Nb250Z29tZXJ5ACAXZjFtX2JhdGNoRnJvbU1vbnRnb21lcnkAIQhmcm1fY29weQAACGZybV96ZXJvAAEKZnJtX2lzWmVybwACBmZybV9lcQAEB2ZybV9hZGQAKgdmcm1fc3ViACsHZnJtX25lZwAsDmZybV9pc05lZ2F0aXZlADMJZnJtX2lzT25lACkIZnJtX3NpZ24ANAtmcm1fbVJlZHVjdAAtB2ZybV9tdWwALgpmcm1fc3F1YXJlAC8NZnJtX3NxdWFyZU9sZAAwEmZybV9mcm9tTW9udGdvbWVyeQAyEGZybV90b01vbnRnb21lcnkAMQtmcm1faW52ZXJzZQA1B2ZybV9vbmUANghmcm1fbG9hZAA3D2ZybV90aW1lc1NjYWxhcgA4B2ZybV9leHAAQBBmcm1fYmF0Y2hJbnZlcnNlADkIZnJtX3NxcnQAQQxmcm1faXNTcXVhcmUAQhVmcm1fYmF0Y2hUb01vbnRnb21lcnkAOhdmcm1fYmF0Y2hGcm9tTW9udGdvbWVyeQA7BmZyX2FkZAAqBmZyX3N1YgArBmZyX25lZwAsBmZyX211bABDCWZyX3NxdWFyZQBECmZyX2ludmVyc2UARQ1mcl9pc05lZ2F0aXZlAEYHZnJfY29weQAAB2ZyX3plcm8AAQZmcl9vbmUANglmcl9pc1plcm8AAgVmcl9lcQAEDGcxbV9tdWx0aWV4cABxEmcxbV9tdWx0aWV4cF9jaHVuawBwEmcxbV9tdWx0aWV4cEFmZmluZQB1GGcxbV9tdWx0aWV4cEFmZmluZV9jaHVuawB0CmcxbV9pc1plcm8ASBBnMW1faXNaZXJvQWZmaW5lAEcGZzFtX2VxAFALZzFtX2VxTWl4ZWQATwxnMW1fZXFBZmZpbmUATghnMW1fY29weQBMDmcxbV9jb3B5QWZmaW5lAEsIZzFtX3plcm8ASg5nMW1femVyb0FmZmluZQBJCmcxbV9kb3VibGUAUhBnMW1fZG91YmxlQWZmaW5lAFEHZzFtX2FkZABVDGcxbV9hZGRNaXhlZABUDWcxbV9hZGRBZmZpbmUAUwdnMW1fbmVnAFcNZzFtX25lZ0FmZmluZQBWB2cxbV9zdWIAWgxnMW1fc3ViTWl4ZWQAWQ1nMW1fc3ViQWZmaW5lAFgSZzFtX2Zyb21Nb250Z29tZXJ5AFwYZzFtX2Zyb21Nb250Z29tZXJ5QWZmaW5lAFsQZzFtX3RvTW9udGdvbWVyeQBeFmcxbV90b01vbnRnb21lcnlBZmZpbmUAXQ9nMW1fdGltZXNTY2FsYXIAdhVnMW1fdGltZXNTY2FsYXJBZmZpbmUAdw1nMW1fbm9ybWFsaXplAGMKZzFtX0xFTXRvVQBlCmcxbV9MRU10b0MAZgpnMW1fVXRvTEVNAGcKZzFtX0N0b0xFTQBoD2cxbV9iYXRjaExFTXRvVQBpD2cxbV9iYXRjaExFTXRvQwBqD2cxbV9iYXRjaFV0b0xFTQBrD2cxbV9iYXRjaEN0b0xFTQBsDGcxbV90b0FmZmluZQBfDmcxbV90b0phY29iaWFuAE0RZzFtX2JhdGNoVG9BZmZpbmUAYhNnMW1fYmF0Y2hUb0phY29iaWFuAG0LZzFtX2luQ3VydmUAYRFnMW1faW5DdXJ2ZUFmZmluZQBgF2ZybV9fcmV2ZXJzZVBlcm11dGF0aW9uAHkHZnJtX2ZmdAB9CGZybV9pZmZ0AH4KZnJtX3Jhd2ZmdAB7C2ZybV9mZnRKb2luAH8OZnJtX2ZmdEpvaW5FeHQAgAERZnJtX2ZmdEpvaW5FeHRJbnYAgQEKZnJtX2ZmdE1peACCAQxmcm1fZmZ0RmluYWwAgwEdZnJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24AhAEIcG9sX3plcm8AhQEPcG9sX2NvbnN0cnVjdExDAIYBDHFhcF9idWlsZEFCQwCHAQtxYXBfam9pbkFCQwCIAQxxYXBfYmF0Y2hBZGQAiQEKZjJtX2lzWmVybwCKAQlmMm1faXNPbmUAiwEIZjJtX3plcm8AjAEHZjJtX29uZQCNAQhmMm1fY29weQCOAQdmMm1fbXVsAI8BCGYybV9tdWwxAJABCmYybV9zcXVhcmUAkQEHZjJtX2FkZACSAQdmMm1fc3ViAJMBB2YybV9uZWcAlAEIZjJtX3NpZ24AmwENZjJtX2Nvbmp1Z2F0ZQCVARJmMm1fZnJvbU1vbnRnb21lcnkAlwEQZjJtX3RvTW9udGdvbWVyeQCWAQZmMm1fZXEAmAELZjJtX2ludmVyc2UAmQEHZjJtX2V4cACeAQ9mMm1fdGltZXNTY2FsYXIAmgEQZjJtX2JhdGNoSW52ZXJzZQCdAQhmMm1fc3FydACfAQxmMm1faXNTcXVhcmUAoAEOZjJtX2lzTmVnYXRpdmUAnAEMZzJtX211bHRpZXhwAMsBEmcybV9tdWx0aWV4cF9jaHVuawDKARJnMm1fbXVsdGlleHBBZmZpbmUAzwEYZzJtX211bHRpZXhwQWZmaW5lX2NodW5rAM4BCmcybV9pc1plcm8AogEQZzJtX2lzWmVyb0FmZmluZQChAQZnMm1fZXEAqgELZzJtX2VxTWl4ZWQAqQEMZzJtX2VxQWZmaW5lAKgBCGcybV9jb3B5AKYBDmcybV9jb3B5QWZmaW5lAKUBCGcybV96ZXJvAKQBDmcybV96ZXJvQWZmaW5lAKMBCmcybV9kb3VibGUArAEQZzJtX2RvdWJsZUFmZmluZQCrAQdnMm1fYWRkAK8BDGcybV9hZGRNaXhlZACuAQ1nMm1fYWRkQWZmaW5lAK0BB2cybV9uZWcAsQENZzJtX25lZ0FmZmluZQCwAQdnMm1fc3ViALQBDGcybV9zdWJNaXhlZACzAQ1nMm1fc3ViQWZmaW5lALIBEmcybV9mcm9tTW9udGdvbWVyeQC2ARhnMm1fZnJvbU1vbnRnb21lcnlBZmZpbmUAtQEQZzJtX3RvTW9udGdvbWVyeQC4ARZnMm1fdG9Nb250Z29tZXJ5QWZmaW5lALcBD2cybV90aW1lc1NjYWxhcgDQARVnMm1fdGltZXNTY2FsYXJBZmZpbmUA0QENZzJtX25vcm1hbGl6ZQC9AQpnMm1fTEVNdG9VAL8BCmcybV9MRU10b0MAwAEKZzJtX1V0b0xFTQDBAQpnMm1fQ3RvTEVNAMIBD2cybV9iYXRjaExFTXRvVQDDAQ9nMm1fYmF0Y2hMRU10b0MAxAEPZzJtX2JhdGNoVXRvTEVNAMUBD2cybV9iYXRjaEN0b0xFTQDGAQxnMm1fdG9BZmZpbmUAuQEOZzJtX3RvSmFjb2JpYW4ApwERZzJtX2JhdGNoVG9BZmZpbmUAvAETZzJtX2JhdGNoVG9KYWNvYmlhbgDHAQtnMm1faW5DdXJ2ZQC7ARFnMm1faW5DdXJ2ZUFmZmluZQC6AQtnMW1fdGltZXNGcgDSARdnMW1fX3JldmVyc2VQZXJtdXRhdGlvbgDUAQdnMW1fZmZ0ANgBCGcxbV9pZmZ0ANkBCmcxbV9yYXdmZnQA1gELZzFtX2ZmdEpvaW4A2gEOZzFtX2ZmdEpvaW5FeHQA2wERZzFtX2ZmdEpvaW5FeHRJbnYA3AEKZzFtX2ZmdE1peADdAQxnMW1fZmZ0RmluYWwA3gEdZzFtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24A3wELZzJtX3RpbWVzRnIA4AEXZzJtX19yZXZlcnNlUGVybXV0YXRpb24A4gEHZzJtX2ZmdADmAQhnMm1faWZmdADnAQpnMm1fcmF3ZmZ0AOQBC2cybV9mZnRKb2luAOgBDmcybV9mZnRKb2luRXh0AOkBEWcybV9mZnRKb2luRXh0SW52AOoBCmcybV9mZnRNaXgA6wEMZzJtX2ZmdEZpbmFsAOwBHWcybV9wcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uAO0BEWcxbV90aW1lc0ZyQWZmaW5lAO4BEWcybV90aW1lc0ZyQWZmaW5lAO8BEWZybV9iYXRjaEFwcGx5S2V5APABEWcxbV9iYXRjaEFwcGx5S2V5APEBFmcxbV9iYXRjaEFwcGx5S2V5TWl4ZWQA8gERZzJtX2JhdGNoQXBwbHlLZXkA8wEWZzJtX2JhdGNoQXBwbHlLZXlNaXhlZAD0AQpmNm1faXNaZXJvAPYBCWY2bV9pc09uZQD3AQhmNm1femVybwD4AQdmNm1fb25lAPkBCGY2bV9jb3B5APoBB2Y2bV9tdWwA+wEKZjZtX3NxdWFyZQD8AQdmNm1fYWRkAP0BB2Y2bV9zdWIA/gEHZjZtX25lZwD/AQhmNm1fc2lnbgCAAhJmNm1fZnJvbU1vbnRnb21lcnkAggIQZjZtX3RvTW9udGdvbWVyeQCBAgZmNm1fZXEAgwILZjZtX2ludmVyc2UAhAIHZjZtX2V4cACIAg9mNm1fdGltZXNTY2FsYXIAhQIQZjZtX2JhdGNoSW52ZXJzZQCHAg5mNm1faXNOZWdhdGl2ZQCGAgpmdG1faXNaZXJvAIoCCWZ0bV9pc09uZQCLAghmdG1femVybwCMAgdmdG1fb25lAI0CCGZ0bV9jb3B5AI4CB2Z0bV9tdWwAjwIIZnRtX211bDEAkAIKZnRtX3NxdWFyZQCRAgdmdG1fYWRkAJICB2Z0bV9zdWIAkwIHZnRtX25lZwCUAghmdG1fc2lnbgCbAg1mdG1fY29uanVnYXRlAJUCEmZ0bV9mcm9tTW9udGdvbWVyeQCXAhBmdG1fdG9Nb250Z29tZXJ5AJYCBmZ0bV9lcQCYAgtmdG1faW52ZXJzZQCZAgdmdG1fZXhwAJ4CD2Z0bV90aW1lc1NjYWxhcgCaAhBmdG1fYmF0Y2hJbnZlcnNlAJ0CCGZ0bV9zcXJ0AJ8CDGZ0bV9pc1NxdWFyZQCgAg5mdG1faXNOZWdhdGl2ZQCcAhRibjEyOF9fZnJvYmVuaXVzTWFwMACpAhRibjEyOF9fZnJvYmVuaXVzTWFwMQCqAhRibjEyOF9fZnJvYmVuaXVzTWFwMgCrAhRibjEyOF9fZnJvYmVuaXVzTWFwMwCsAhRibjEyOF9fZnJvYmVuaXVzTWFwNACtAhRibjEyOF9fZnJvYmVuaXVzTWFwNQCuAhRibjEyOF9fZnJvYmVuaXVzTWFwNgCvAhRibjEyOF9fZnJvYmVuaXVzTWFwNwCwAhRibjEyOF9fZnJvYmVuaXVzTWFwOACxAhRibjEyOF9fZnJvYmVuaXVzTWFwOQCyAhBibjEyOF9wYWlyaW5nRXExALkCEGJuMTI4X3BhaXJpbmdFcTIAugIQYm4xMjhfcGFpcmluZ0VxMwC7AhBibjEyOF9wYWlyaW5nRXE0ALwCEGJuMTI4X3BhaXJpbmdFcTUAvQINYm4xMjhfcGFpcmluZwC+Ag9ibjEyOF9wcmVwYXJlRzEAowIPYm4xMjhfcHJlcGFyZUcyAKUCEGJuMTI4X21pbGxlckxvb3AAqAIZYm4xMjhfZmluYWxFeHBvbmVudGlhdGlvbgC4AhxibjEyOF9maW5hbEV4cG9uZW50aWF0aW9uT2xkALMCD2JuMTI4X19tdWxCeTAyNACmAhJibjEyOF9fbXVsQnkwMjRPbGQApwIXYm4xMjhfX2N5Y2xvdG9taWNTcXVhcmUAtQIXYm4xMjhfX2N5Y2xvdG9taWNFeHBfdzAAtgIKgfcDvwIqACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxgLHgAgAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYCzMAIAApAxhQBEAgACkDEFAEQCAAKQMIUARAIAApAwBQDwVBAA8LBUEADwsFQQAPC0EADwseACAAQgE3AwAgAEIANwMIIABCADcDECAAQgA3AxgLRwAgACkDGCABKQMYUQRAIAApAxAgASkDEFEEQCAAKQMIIAEpAwhRBEAgACkDACABKQMAUQ8FQQAPCwVBAA8LBUEADwtBAA8LfQAgACkDGCABKQMYVARAQQAPBSAAKQMYIAEpAxhWBEBBAQ8FIAApAxAgASkDEFQEQEEADwUgACkDECABKQMQVgRAQQEPBSAAKQMIIAEpAwhUBEBBAA8FIAApAwggASkDCFYEQEEBDwUgACkDACABKQMAWg8LCwsLCwtBAA8L1AEBAX4gADUCACABNQIAfCEDIAIgAz4CACAANQIEIAE1AgR8IANCIIh8IQMgAiADPgIEIAA1AgggATUCCHwgA0IgiHwhAyACIAM+AgggADUCDCABNQIMfCADQiCIfCEDIAIgAz4CDCAANQIQIAE1AhB8IANCIIh8IQMgAiADPgIQIAA1AhQgATUCFHwgA0IgiHwhAyACIAM+AhQgADUCGCABNQIYfCADQiCIfCEDIAIgAz4CGCAANQIcIAE1Ahx8IANCIIh8IQMgAiADPgIcIANCIIinC4wCAQF+IAA1AgAgATUCAH0hAyACIANC/////w+DPgIAIAA1AgQgATUCBH0gA0Igh3whAyACIANC/////w+DPgIEIAA1AgggATUCCH0gA0Igh3whAyACIANC/////w+DPgIIIAA1AgwgATUCDH0gA0Igh3whAyACIANC/////w+DPgIMIAA1AhAgATUCEH0gA0Igh3whAyACIANC/////w+DPgIQIAA1AhQgATUCFH0gA0Igh3whAyACIANC/////w+DPgIUIAA1AhggATUCGH0gA0Igh3whAyACIANC/////w+DPgIYIAA1AhwgATUCHH0gA0Igh3whAyACIANC/////w+DPgIcIANCIIenC48QEgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfiADQv////8PgyAANQIAIgUgATUCACIGfnwhAyAEIANCIIh8IQQgAiADPgIAIARCIIghAyAEQv////8PgyAFIAE1AgQiCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AgQiByAGfnwhBCADIARCIIh8IQMgAiAEPgIEIANCIIghBCADQv////8PgyAFIAE1AggiCn58IQMgBCADQiCIfCEEIANC/////w+DIAcgCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AggiCSAGfnwhAyAEIANCIIh8IQQgAiADPgIIIARCIIghAyAEQv////8PgyAFIAE1AgwiDH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgCn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AgwiCyAGfnwhBCADIARCIIh8IQMgAiAEPgIMIANCIIghBCADQv////8PgyAFIAE1AhAiDn58IQMgBCADQiCIfCEEIANC/////w+DIAcgDH58IQMgBCADQiCIfCEEIANC/////w+DIAkgCn58IQMgBCADQiCIfCEEIANC/////w+DIAsgCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AhAiDSAGfnwhAyAEIANCIIh8IQQgAiADPgIQIARCIIghAyAEQv////8PgyAFIAE1AhQiEH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgDn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgDH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgCn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhQiDyAGfnwhBCADIARCIIh8IQMgAiAEPgIUIANCIIghBCADQv////8PgyAFIAE1AhgiEn58IQMgBCADQiCIfCEEIANC/////w+DIAcgEH58IQMgBCADQiCIfCEEIANC/////w+DIAkgDn58IQMgBCADQiCIfCEEIANC/////w+DIAsgDH58IQMgBCADQiCIfCEEIANC/////w+DIA0gCn58IQMgBCADQiCIfCEEIANC/////w+DIA8gCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AhgiESAGfnwhAyAEIANCIIh8IQQgAiADPgIYIARCIIghAyAEQv////8PgyAFIAE1AhwiFH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgEn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgEH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgDn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gDH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gCn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhwiEyAGfnwhBCADIARCIIh8IQMgAiAEPgIcIANCIIghBCADQv////8PgyAHIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyANIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAh+fCEDIAQgA0IgiHwhBCACIAM+AiAgBEIgiCEDIARC/////w+DIAkgFH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgEn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gEH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gDn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgDH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgCn58IQQgAyAEQiCIfCEDIAIgBD4CJCADQiCIIQQgA0L/////D4MgCyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSASfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgESAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAMfnwhAyAEIANCIIh8IQQgAiADPgIoIARCIIghAyAEQv////8PgyANIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIA5+fCEEIAMgBEIgiHwhAyACIAQ+AiwgA0IgiCEEIANC/////w+DIA8gFH58IQMgBCADQiCIfCEEIANC/////w+DIBEgEn58IQMgBCADQiCIfCEEIANC/////w+DIBMgEH58IQMgBCADQiCIfCEEIAIgAz4CMCAEQiCIIQMgBEL/////D4MgESAUfnwhBCADIARCIIh8IQMgBEL/////D4MgEyASfnwhBCADIARCIIh8IQMgAiAEPgI0IANCIIghBCADQv////8PgyATIBR+fCEDIAQgA0IgiHwhBCACIAM+AjggBEIgiCEDIAIgBD4CPAuMEgwBfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX5CACECQgAhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAANQIAIgYgBn58IQIgAyACQiCIfCEDIAEgAj4CACADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIEIgd+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIEIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AggiCH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAcgB358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCDCIJfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CDCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIQIgp+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAl+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAIIAh+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIQIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhQiC358IQIgAyACQiCIfCEDIAJC/////w+DIAcgCn58IQIgAyACQiCIfCEDIAJC/////w+DIAggCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCGCIMfnwhAiADIAJCIIh8IQMgAkL/////D4MgByALfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAKfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgCSAJfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CGCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIcIg1+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIcIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAHIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAKIAp+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIgIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAIIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIkIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAJIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAx+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyALIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIoIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAKIA1+fCECIAMgAkIgiHwhAyACQv////8PgyALIAx+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIsIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyALIA1+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAMIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIwIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAMIA1+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgI0IAMhBCAEQiCIIQVCACECQgAhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyANIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgI4IAMhBCAEQiCIIQUgASAEPgI8CwoAIAAgACABEAgLtgEBAX4gADUAACABfiEDIAIgAz4AACAANQAEIAF+IANCIIh8IQMgAiADPgAEIAA1AAggAX4gA0IgiHwhAyACIAM+AAggADUADCABfiADQiCIfCEDIAIgAz4ADCAANQAQIAF+IANCIIh8IQMgAiADPgAQIAA1ABQgAX4gA0IgiHwhAyACIAM+ABQgADUAGCABfiADQiCIfCEDIAIgAz4AGCAANQAcIAF+IANCIIh8IQMgAiADPgAcC04CAX4BfyAAIQMgAzUAACABfCECIAMgAj4AACACQiCIIQICQANAIAJQDQEgA0EEaiEDIAM1AAAgAnwhAiADIAI+AAAg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BkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCCCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9CiceZpA5+Qv////8PgyEEIA8gBELH+vPDDX58IQYgBkIgiCEFIBAgBEKWmILhA358IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQo2Vx8MGfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCkdWFvAl+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AgwhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQonHmaQOfkL/////D4MhBCAPIARCx/rzww1+fCEGIAZCIIghBSAQIARClpiC4QN+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKNlcfDBn58IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQpHVhbwJfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIQIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCFCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9CiceZpA5+Qv////8PgyEEIA8gBELH+vPDDX58IQYgBkIgiCEFIBAgBEKWmILhA358IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQo2Vx8MGfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCkdWFvAl+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhghAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQonHmaQOfkL/////D4MhBCAPIARCx/rzww1+fCEGIAZCIIghBSAQIARClpiC4QN+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKNlcfDBn58IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQpHVhbwJfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIcIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgAiAPPgIAIAIgED4CBCACIBE+AgggAiASPgIMIAIgEz4CECACIBQ+AhQgAiAVPgIYIAIgFj4CHCACQegDEAUEQCACQegDIAIQBxoLC8skFgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IAA1AgAhBiAANQIEIQcgADUCCCEIIAA1AgwhCSAANQIQIQogADUCFCELIAA1AhghDCAANQIcIQ0gDiAGIAZ+fCEEIARC/////w+DIQ4gBEIgiCEDIAcgBn4hBSAPIAVC/////w+DQgGGfCADfCEEIARC/////w+DIQ8gBEIgiCAFQiCIQgGGfCEDIAggBn4hBSAQIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRAgBEIgiCAFQiCIQgGGfCEDIAkgBn4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogBn4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgBn4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgBn4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gBn4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgDyAHIAd+fCEEIARC/////w+DIQ8gBEIgiCEDIAggB34hBSAQIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRAgBEIgiCAFQiCIQgGGfCEDIAkgB34hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogB34hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgB34hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgB34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gB34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgECAIIAh+fCEEIARC/////w+DIRAgBEIgiCEDIAkgCH4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgESAJIAl+fCEEIARC/////w+DIREgBEIgiCEDIAogCX4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCX4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCX4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCX4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEiAKIAp+fCEEIARC/////w+DIRIgBEIgiCEDIAsgCn4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCn4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCn4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEyALIAt+fCEEIARC/////w+DIRMgBEIgiCEDIAwgC34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgFCAMIAx+fCEEIARC/////w+DIRQgBEIgiCEDIA0gDH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgFSANIA1+fCEEIARC/////w+DIRUgBEIgiCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgASAOPgIAIAEgDz4CBCABIBA+AgggASARPgIMIAEgEj4CECABIBM+AhQgASAUPgIYIAEgFT4CHCAWpwRAIAFB6AMgARAHGgUgAUHoAxAFBEAgAUHoAyABEAcaCwsLCgAgACAAIAEQFAsLACAAQYgEIAEQFAsVACAAQYgKEABBqAoQAUGICiABEBMLEQAgAEHIChAYQcgKQYgFEAULJAAgABACBEBBAA8LIABB6AoQGEHoCkGIBRAFBEBBfw8LQQEPCxcAIAAgARAYIAFB6AMgARAOIAEgARAXCwkAQagEIAAQAAvLAQQBfwF/AX8BfyACEAFBICEFIAAhAwJAA0AgBSABSw0BIAVBIEYEQEGICxAcBUGIC0GIBEGICxAUCyADQYgLQagLEBQgAkGoCyACEBAgA0EgaiEDIAVBIGohBQwACwsgAUEgcCEEIARFBEAPC0GoCxABQQAhBgJAA0AgBiAERg0BIAYgAy0AADoAqAsgA0EBaiEDIAZBAWohBgwACwsgBUEgRgRAQYgLEBwFQYgLQYgEQYgLEBQLQagLQYgLQagLEBQgAkGoCyACEBALHAAgASACQcgLEB1ByAtByAsQFyAAQcgLIAMQFAv4AQQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpBIGxqNgIAIAUQHCAAIQYgBUEgaiEFQQAhCAJAA0AgCCACRg0BIAYQAgRAIAVBIGsgBRAABSAGIAVBIGsgBRAUCyAGIAFqIQYgBUEgaiEFIAhBAWohCAwACwsgBiABayEGIAVBIGshBSADIAJBAWsgBGxqIQcgBSAFEBsCQANAIAhFDQEgBhACBEAgBSAFQSBrEAAgBxABBSAFQSBrQegLEAAgBSAGIAVBIGsQFCAFQegLIAcQFAsgBiABayEGIAcgBGshByAFQSBrIQUgCEEBayEIDAALC0EAIAU2AgALPgMBfwF/AX8gACEEIAIhBUEAIQMCQANAIAMgAUYNASAEIAUQFyAEQSBqIQQgBUEgaiEFIANBAWohAwwACwsLPgMBfwF/AX8gACEEIAIhBUEAIQMCQANAIAMgAUYNASAEIAUQGCAEQSBqIQQgBUEgaiEFIANBAWohAwwACwsLPgMBfwF/AX8gACEEIAIhBUEAIQMCQANAIAMgAUYNASAEIAUQEiAEQSBqIQQgBUEgaiEFIANBAWohAwwACwsLTQQBfwF/AX8BfyAAIQUgASEGIAMhB0EAIQQCQANAIAQgAkYNASAFIAYgBxAQIAVBIGohBSAGQSBqIQYgB0EgaiEHIARBAWohBAwACwsLTQQBfwF/AX8BfyAAIQUgASEGIAMhB0EAIQQCQANAIAQgAkYNASAFIAYgBxARIAVBIGohBSAGQSBqIQYgB0EgaiEHIARBAWohBAwACwsLTQQBfwF/AX8BfyAAIQUgASEGIAMhB0EAIQQCQANAIAQgAkYNASAFIAYgBxAUIAVBIGohBSAGQSBqIQYgB0EgaiEHIARBAWohBAwACwsLsgICAX8BfyACRQRAIAMQHA8LIABBiAwQACADEBwgAiEEAkADQCAEQQFrIQQgASAEai0AACEFIAMgAxAVIAVBgAFPBEAgBUGAAWshBSADQYgMIAMQFAsgAyADEBUgBUHAAE8EQCAFQcAAayEFIANBiAwgAxAUCyADIAMQFSAFQSBPBEAgBUEgayEFIANBiAwgAxAUCyADIAMQFSAFQRBPBEAgBUEQayEFIANBiAwgAxAUCyADIAMQFSAFQQhPBEAgBUEIayEFIANBiAwgAxAUCyADIAMQFSAFQQRPBEAgBUEEayEFIANBiAwgAxAUCyADIAMQFSAFQQJPBEAgBUECayEFIANBiAwgAxAUCyADIAMQFSAFQQFPBEAgBUEBayEFIANBiAwgAxAUCyAERQ0BDAALCwveAQMBfwF/AX8gABACBEAgARABDwtBASECQcgFQagMEAAgAEGoBUEgQcgMECYgAEHoBUEgQegMECYCQANAQcgMQagEEAQNAUHIDEGIDRAVQQEhAwJAA0BBiA1BqAQQBA0BQYgNQYgNEBUgA0EBaiEDDAALC0GoDEGoDRAAIAIgA2tBAWshBAJAA0AgBEUNAUGoDUGoDRAVIARBAWshBAwACwsgAyECQagNQagMEBVByAxBqAxByAwQFEHoDEGoDUHoDBAUDAALC0HoDBAZBEBB6AwgARASBUHoDCABEAALCyAAIAAQAgRAQQEPCyAAQegEQSBByA0QJkHIDUGoBBAECwoAIABBqA4QBA8LLAAgACABIAIQBgRAIAJB6A0gAhAHGgUgAkHoDRAFBEAgAkHoDSACEAcaCwsLFwAgACABIAIQBwRAIAJB6A0gAhAGGgsLCwBByA4gACABECsLnBEDAX4BfgF+Qv////8OIQJCACEDIAA1AgAgAn5C/////w+DIQQgADUCACADQiCIfEHoDTUCACAEfnwhAyAAIAM+AgAgADUCBCADQiCIfEHoDTUCBCAEfnwhAyAAIAM+AgQgADUCCCADQiCIfEHoDTUCCCAEfnwhAyAAIAM+AgggADUCDCADQiCIfEHoDTUCDCAEfnwhAyAAIAM+AgwgADUCECADQiCIfEHoDTUCECAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHoDTUCFCAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHoDTUCGCAEfnwhAyAAIAM+AhggADUCHCADQiCIfEHoDTUCHCAEfnwhAyAAIAM+AhxBiBAgA0IgiD4CAEIAIQMgADUCBCACfkL/////D4MhBCAANQIEIANCIIh8QegNNQIAIAR+fCEDIAAgAz4CBCAANQIIIANCIIh8QegNNQIEIAR+fCEDIAAgAz4CCCAANQIMIANCIIh8QegNNQIIIAR+fCEDIAAgAz4CDCAANQIQIANCIIh8QegNNQIMIAR+fCEDIAAgAz4CECAANQIUIANCIIh8QegNNQIQIAR+fCEDIAAgAz4CFCAANQIYIANCIIh8QegNNQIUIAR+fCEDIAAgAz4CGCAANQIcIANCIIh8QegNNQIYIAR+fCEDIAAgAz4CHCAANQIgIANCIIh8QegNNQIcIAR+fCEDIAAgAz4CIEGIECADQiCIPgIEQgAhAyAANQIIIAJ+Qv////8PgyEEIAA1AgggA0IgiHxB6A01AgAgBH58IQMgACADPgIIIAA1AgwgA0IgiHxB6A01AgQgBH58IQMgACADPgIMIAA1AhAgA0IgiHxB6A01AgggBH58IQMgACADPgIQIAA1AhQgA0IgiHxB6A01AgwgBH58IQMgACADPgIUIAA1AhggA0IgiHxB6A01AhAgBH58IQMgACADPgIYIAA1AhwgA0IgiHxB6A01AhQgBH58IQMgACADPgIcIAA1AiAgA0IgiHxB6A01AhggBH58IQMgACADPgIgIAA1AiQgA0IgiHxB6A01AhwgBH58IQMgACADPgIkQYgQIANCIIg+AghCACEDIAA1AgwgAn5C/////w+DIQQgADUCDCADQiCIfEHoDTUCACAEfnwhAyAAIAM+AgwgADUCECADQiCIfEHoDTUCBCAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHoDTUCCCAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHoDTUCDCAEfnwhAyAAIAM+AhggADUCHCADQiCIfEHoDTUCECAEfnwhAyAAIAM+AhwgADUCICADQiCIfEHoDTUCFCAEfnwhAyAAIAM+AiAgADUCJCADQiCIfEHoDTUCGCAEfnwhAyAAIAM+AiQgADUCKCADQiCIfEHoDTUCHCAEfnwhAyAAIAM+AihBiBAgA0IgiD4CDEIAIQMgADUCECACfkL/////D4MhBCAANQIQIANCIIh8QegNNQIAIAR+fCEDIAAgAz4CECAANQIUIANCIIh8QegNNQIEIAR+fCEDIAAgAz4CFCAANQIYIANCIIh8QegNNQIIIAR+fCEDIAAgAz4CGCAANQIcIANCIIh8QegNNQIMIAR+fCEDIAAgAz4CHCAANQIgIANCIIh8QegNNQIQIAR+fCEDIAAgAz4CICAANQIkIANCIIh8QegNNQIUIAR+fCEDIAAgAz4CJCAANQIoIANCIIh8QegNNQIYIAR+fCEDIAAgAz4CKCAANQIsIANCIIh8QegNNQIcIAR+fCEDIAAgAz4CLEGIECADQiCIPgIQQgAhAyAANQIUIAJ+Qv////8PgyEEIAA1AhQgA0IgiHxB6A01AgAgBH58IQMgACADPgIUIAA1AhggA0IgiHxB6A01AgQgBH58IQMgACADPgIYIAA1AhwgA0IgiHxB6A01AgggBH58IQMgACADPgIcIAA1AiAgA0IgiHxB6A01AgwgBH58IQMgACADPgIgIAA1AiQgA0IgiHxB6A01AhAgBH58IQMgACADPgIkIAA1AiggA0IgiHxB6A01AhQgBH58IQMgACADPgIoIAA1AiwgA0IgiHxB6A01AhggBH58IQMgACADPgIsIAA1AjAgA0IgiHxB6A01AhwgBH58IQMgACADPgIwQYgQIANCIIg+AhRCACEDIAA1AhggAn5C/////w+DIQQgADUCGCADQiCIfEHoDTUCACAEfnwhAyAAIAM+AhggADUCHCADQiCIfEHoDTUCBCAEfnwhAyAAIAM+AhwgADUCICADQiCIfEHoDTUCCCAEfnwhAyAAIAM+AiAgADUCJCADQiCIfEHoDTUCDCAEfnwhAyAAIAM+AiQgADUCKCADQiCIfEHoDTUCECAEfnwhAyAAIAM+AiggADUCLCADQiCIfEHoDTUCFCAEfnwhAyAAIAM+AiwgADUCMCADQiCIfEHoDTUCGCAEfnwhAyAAIAM+AjAgADUCNCADQiCIfEHoDTUCHCAEfnwhAyAAIAM+AjRBiBAgA0IgiD4CGEIAIQMgADUCHCACfkL/////D4MhBCAANQIcIANCIIh8QegNNQIAIAR+fCEDIAAgAz4CHCAANQIgIANCIIh8QegNNQIEIAR+fCEDIAAgAz4CICAANQIkIANCIIh8QegNNQIIIAR+fCEDIAAgAz4CJCAANQIoIANCIIh8QegNNQIMIAR+fCEDIAAgAz4CKCAANQIsIANCIIh8QegNNQIQIAR+fCEDIAAgAz4CLCAANQIwIANCIIh8QegNNQIUIAR+fCEDIAAgAz4CMCAANQI0IANCIIh8QegNNQIYIAR+fCEDIAAgAz4CNCAANQI4IANCIIh8QegNNQIcIAR+fCEDIAAgAz4COEGIECADQiCIPgIcQYgQIABBIGogARAqC8ojFgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IAA1AgAhByAANQIEIQggADUCCCEJIAA1AgwhCiAANQIQIQsgADUCFCEMIAA1AhghDSAANQIcIQ4gATUCACEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AgQhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIIIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////Dn5C/////w+DIQQgDyAEQoGAgIAPfnwhBiAGQiCIIQUgECAEQpPrh58EfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCkeHlzQd+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBELI0M/BAn58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCDCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhAhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIUIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////Dn5C/////w+DIQQgDyAEQoGAgIAPfnwhBiAGQiCIIQUgECAEQpPrh58EfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCkeHlzQd+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBELI0M/BAn58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCGCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhwhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiACIA8+AgAgAiAQPgIEIAIgET4CCCACIBI+AgwgAiATPgIQIAIgFD4CFCACIBU+AhggAiAWPgIcIAJB6A0QBQRAIAJB6A0gAhAHGgsLyyQWAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gADUCACEGIAA1AgQhByAANQIIIQggADUCDCEJIAA1AhAhCiAANQIUIQsgADUCGCEMIAA1AhwhDSAOIAYgBn58IQQgBEL/////D4MhDiAEQiCIIQMgByAGfiEFIA8gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhDyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAPIAcgB358IQQgBEL/////D4MhDyAEQiCIIQMgCCAHfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAHfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAHfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAHfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAHfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAHfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAQIAggCH58IQQgBEL/////D4MhECAEQiCIIQMgCSAIfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAIfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAIfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAIfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAIfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyARIAkgCX58IQQgBEL/////D4MhESAEQiCIIQMgCiAJfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyASIAogCn58IQQgBEL/////D4MhEiAEQiCIIQMgCyAKfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAKfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAKfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyATIAsgC358IQQgBEL/////D4MhEyAEQiCIIQMgDCALfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSALfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAUIAwgDH58IQQgBEL/////D4MhFCAEQiCIIQMgDSAMfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAVIA0gDX58IQQgBEL/////D4MhFSAEQiCIIQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUg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IABBIGoQAQsVACAAEAEgAEEgahAcIABBwABqEAELUgAgASAAKQMANwMAIAEgACkDCDcDCCABIAApAxA3AxAgASAAKQMYNwMYIAEgACkDIDcDICABIAApAyg3AyggASAAKQMwNwMwIAEgACkDODcDOAt6ACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWAsoACAAEEcEQCABEEoFIAFBwABqEBwgAEEgaiABQSBqEAAgACABEAALCxgBAX8gACABEAQgAEEgaiABQSBqEARxDwt1AQF/IABBwABqIQIgABBIBEAgARBHDwsgARBHBEBBAA8LIAIQDwRAIAAgARBODwsgAkGoGBAVIAFBqBhByBgQFCACQagYQegYEBQgAUEgakHoGEGIGRAUIABByBgQBARAIABBIGpBiBkQBARAQQEPCwtBAA8LtAECAX8BfyAAQcAAaiECIAFBwABqIQMgABBIBEAgARBIDwsgARBIBEBBAA8LIAIQDwRAIAEgABBPDwsgAxAPBEAgACABEE8PCyACQagZEBUgA0HIGRAVIABByBlB6BkQFCABQagZQYgaEBQgAkGoGUGoGhAUIANByBlByBoQFCAAQSBqQcgaQegaEBQgAUEgakGoGkGIGxAUQegZQYgaEAQEQEHoGkGIGxAEBEBBAQ8LC0EADwvoAQAgABBHBEAgACABEE0PCyAAQagbEBUgAEEgakHIGxAVQcgbQegbEBUgAEHIG0GIHBAQQYgcQYgcEBVBiBxBqBtBiBwQEUGIHEHoG0GIHBARQYgcQYgcQYgcEBBBqBtBqBtBqBwQEEGoHEGoG0GoHBAQIABBIGogAEEgaiABQcAAahAQQagcIAEQFSABQYgcIAEQESABQYgcIAEQEUHoG0HoG0HIHBAQQcgcQcgcQcgcEBBByBxByBxByBwQEEGIHCABIAFBIGoQESABQSBqQagcIAFBIGoQFCABQSBqQcgcIAFBIGoQEQuJAgAgABBIBEAgACABEEwPCyAAQcAAahAPBEAgACABEFEPDwsgAEHoHBAVIABBIGpBiB0QFUGIHUGoHRAVIABB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TwRAIAVBEGshBSADQcjcACADEI8BCyADIAMQkQEgBUEITwRAIAVBCGshBSADQcjcACADEI8BCyADIAMQkQEgBUEETwRAIAVBBGshBSADQcjcACADEI8BCyADIAMQkQEgBUECTwRAIAVBAmshBSADQcjcACADEI8BCyADIAMQkQEgBUEBTwRAIAVBAWshBSADQcjcACADEI8BCyAERQ0BDAALCwvNAQBBiN8AEI0BQYjfAEGI3wAQlAEgAEGI3QBBIEHI3QAQngFByN0AQYjeABCRASAAQYjeAEGI3gAQjwFBiN4AQcjeABCVAUHI3gBBiN4AQcjeABCPAUHI3gBBiN8AEJgBBEAAC0HI3QAgAEHI3wAQjwFBiN4AQYjfABCYAQRAQYjfABABQajfABAcQYjfAEHI3wAgARCPAQVBiOAAEI0BQYjgAEGI3gBBiOAAEJIBQYjgAEGo3QBBIEGI4AAQngFBiOAAQcjfACABEI8BCwtpAEGo4gAQjQFBqOIAQajiABCUASAAQcjgAEEgQejgABCeAUHo4ABBqOEAEJEBIABBqOEAQajhABCPAUGo4QBB6OEAEJUBQejhAEGo4QBB6OEAEI8BQejhAEGo4gAQmAEEQEEADwtBAQ8LEQAgABCKASAAQcAAahCKAXELCwAgAEGAAWoQigELEAAgABCMASAAQcAAahCMAQsZACAAEIwBIABBwABqEI0BIABBgAFqEIwBC6IBACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWCABIAApA2A3A2AgASAAKQNoNwNoIAEgACkDcDcDcCABIAApA3g3A3gLggIAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYIAEgACkDYDcDYCABIAApA2g3A2ggASAAKQNwNwNwIAEgACkDeDcDeCABIAApA4ABNwOAASABIAApA4gBNwOI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IAEQjwEgAEHAAGogAUHAAGoQACAAQeAAaiABQeAAahASIAFBwABqQdCIBCABQcAAahCPASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpBkIkEIAFBgAFqEI8BIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakHQiQQgAUHAAWoQjwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQZCKBCABQYACahCPASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpB0IoEIAFBwAJqEI8BC2wAIABBkIsEIAEQjwEgAEHAAGpB0IsEIAFBwABqEI8BIABBgAFqQZCMBCABQYABahCPASAAQcABakHQjAQgAUHAAWoQjwEgAEGAAmpBkI0EIAFBgAJqEI8BIABBwAJqQdCNBCABQcACahCPAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUGQjgQgARCPASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpB0I4EIAFBwABqEI8BIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakGQjwQgAUGAAWoQjwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQdCPBCABQcABahCPASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpBkJAEIAFBgAJqEI8BIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakHQkAQgAUHAAmoQjwELbAAgAEGQkQQgARCPASAAQcAAakHQkQQgAUHAAGoQjwEgAEGAAWpBkJIEIAFBgAFqEI8BIABBwAFqQdCSBCABQcABahCPASAAQYACakGQkwQgAUGAAmoQjwEgAEHAAmpB0JMEIAFBwAJqEI8BC4oCACAAIAEQACAAQSBqIAFBIGoQEiABQZCUBCABEI8BIABBwABqIAFBwABqEAAgAEHgAGogAUHgAGoQEiABQcAAakHQlAQgAUHAAGoQjwEgAEGAAWogAUGAAWoQACAAQaABaiABQaABahASIAFBgAFqQZCVBCABQYABahCPASAAQcABaiABQcABahAAIABB4AFqIAFB4AFqEBIgAUHAAWpB0JUEIAFBwAFqEI8BIABBgAJqIAFBgAJqEAAgAEGgAmogAUGgAmoQEiABQYACakGQlgQgAUGAAmoQjwEgAEHAAmogAUHAAmoQACAAQeACaiABQeACahASIAFBwAJqQdCWBCABQcACahCPAQtsACAAQZCXBCABEI8BIABBwABqQdCXBCABQcAAahCPASAAQYABakGQmAQgAUGAAWoQjwEgAEHAAWpB0JgEIAFBwAFqEI8BIABBgAJqQZCZBCABQYACahCPASAAQcACakHQmQQgAUHAAmoQjwELigIAIAAgARAAIABBIGogAUEgahASIAFBkJoEIAEQjwEgAEHAAGogAUHAAGoQACAAQeAAaiABQeAAahASIAFBwABqQdCaBCABQcAAahCPASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpBkJsEIAFBgAFqEI8BIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakHQmwQgAUHAAWoQjwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQZCcBCABQYACahCPASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpB0JwEIAFBwAJqEI8BC2wAIABBkJ0EIAEQjwEgAEHAAGpB0J0EIAFBwABqEI8BIABBgAFqQZCeBCABQYABahCPASAAQcABakHQngQgAUHAAWoQjwEgAEGAAmpBkJ8EIAFBgAJqEI8BIABBwAJqQdCfBCABQcACahCPAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUGQoAQgARCPASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpB0KAEIAFBwABqEI8BIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakGQoQQgAUGAAWoQjwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQdChBCABQcABahCPASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpBkKIEIAFBgAJqEI8BIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakHQogQgAUHAAmoQjwELEAAgAEGQowRB4AIgARCeAgtIACAAQfClBBD6ASAAQcABakGwpwQQ/wEgAEHwqAQQmQJB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";
- exports.pq = 488;
- exports.pr = 1768;
- exports.pG1gen = 32008;
- exports.pG1zero = 32104;
- exports.pG1b = 3080;
- exports.pG2gen = 32200;
- exports.pG2zero = 32392;
- exports.pG2b = 12648;
- exports.pOneT = 32584;
- exports.prePSize = 192;
- exports.preQSize = 19776;
- exports.n8q = 32;
- exports.n8r = 32;
- exports.q = "21888242871839275222246405745257275088696311157297823662689037894645226208583";
- exports.r = "21888242871839275222246405745257275088548364400416034343698204186575808495617";
-
\ No newline at end of file
+export const code = "AGFzbQEAAAABlQESYAJ/fwBgAX8AYAF/AX9gAn9/AX9gA39/fwF/YAN/f38AYAN/fn8AYAJ/fgBgBH9/f38AYAV/f39/fwBgBH9/f38Bf2AGf39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38Bf2AHf39/f39/fwF/YAl/f39/f39/f38Bf2ALf39/f39/f39/f38BfwIPAQNlbnYGbWVtb3J5AgAZA8ECvwIAAQIBAwMEBAUAAAYHCAUCBQUAAAUAAAAAAgIAAQUICQUFBQgICAgAAgIFBQAABQAAAAACAgABBQgJBQUFCAgICAACBQAAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgDAAgIAgAACQsLBQULAAgNCQgCAgEBAAUFAAUFAAAAAAMACAICCQgAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgFAwAICAIAAAkLCwUFCwUDAAgIAgAACQsLBQULBQUJCQkJCQACAgEBAAUABQUAAgAAAwAIAgkIAAICAQEABQUABQUAAAAAAwAIAgIJCAACBQAAAAAICAUAAAAAAAAAAAAAAAAAAAAABA4PEBEFB8UlqwIIaW50X2NvcHkAAAhpbnRfemVybwABB2ludF9vbmUAAwppbnRfaXNaZXJvAAIGaW50X2VxAAQHaW50X2d0ZQAFB2ludF9hZGQABgdpbnRfc3ViAAcHaW50X211bAAICmludF9zcXVhcmUACQ1pbnRfc3F1YXJlT2xkAAoHaW50X2RpdgANDmludF9pbnZlcnNlTW9kAA4IZjFtX2NvcHkAAAhmMW1femVybwABCmYxbV9pc1plcm8AAgZmMW1fZXEABAdmMW1fYWRkABAHZjFtX3N1YgARB2YxbV9uZWcAEg5mMW1faXNOZWdhdGl2ZQAZCWYxbV9pc09uZQAPCGYxbV9zaWduABoLZjFtX21SZWR1Y3QAEwdmMW1fbXVsABQKZjFtX3NxdWFyZQAVDWYxbV9zcXVhcmVPbGQAFhJmMW1fZnJvbU1vbnRnb21lcnkAGBBmMW1fdG9Nb250Z29tZXJ5ABcLZjFtX2ludmVyc2UAGwdmMW1fb25lABwIZjFtX2xvYWQAHQ9mMW1fdGltZXNTY2FsYXIAHgdmMW1fZXhwACYQZjFtX2JhdGNoSW52ZXJzZQAfCGYxbV9zcXJ0ACcMZjFtX2lzU3F1YXJlACgVZjFtX2JhdGNoVG9Nb250Z29tZXJ5ACAXZjFtX2JhdGNoRnJvbU1vbnRnb21lcnkAIQhmcm1fY29weQAACGZybV96ZXJvAAEKZnJtX2lzWmVybwACBmZybV9lcQAEB2ZybV9hZGQAKgdmcm1fc3ViACsHZnJtX25lZwAsDmZybV9pc05lZ2F0aXZlADMJZnJtX2lzT25lACkIZnJtX3NpZ24ANAtmcm1fbVJlZHVjdAAtB2ZybV9tdWwALgpmcm1fc3F1YXJlAC8NZnJtX3NxdWFyZU9sZAAwEmZybV9mcm9tTW9udGdvbWVyeQAyEGZybV90b01vbnRnb21lcnkAMQtmcm1faW52ZXJzZQA1B2ZybV9vbmUANghmcm1fbG9hZAA3D2ZybV90aW1lc1NjYWxhcgA4B2ZybV9leHAAQBBmcm1fYmF0Y2hJbnZlcnNlADkIZnJtX3NxcnQAQQxmcm1faXNTcXVhcmUAQhVmcm1fYmF0Y2hUb01vbnRnb21lcnkAOhdmcm1fYmF0Y2hGcm9tTW9udGdvbWVyeQA7BmZyX2FkZAAqBmZyX3N1YgArBmZyX25lZwAsBmZyX211bABDCWZyX3NxdWFyZQBECmZyX2ludmVyc2UARQ1mcl9pc05lZ2F0aXZlAEYHZnJfY29weQAAB2ZyX3plcm8AAQZmcl9vbmUANglmcl9pc1plcm8AAgVmcl9lcQAEDGcxbV9tdWx0aWV4cABxEmcxbV9tdWx0aWV4cF9jaHVuawBwEmcxbV9tdWx0aWV4cEFmZmluZQB1GGcxbV9tdWx0aWV4cEFmZmluZV9jaHVuawB0CmcxbV9pc1plcm8ASBBnMW1faXNaZXJvQWZmaW5lAEcGZzFtX2VxAFALZzFtX2VxTWl4ZWQATwxnMW1fZXFBZmZpbmUATghnMW1fY29weQBMDmcxbV9jb3B5QWZmaW5lAEsIZzFtX3plcm8ASg5nMW1femVyb0FmZmluZQBJCmcxbV9kb3VibGUAUhBnMW1fZG91YmxlQWZmaW5lAFEHZzFtX2FkZABVDGcxbV9hZGRNaXhlZABUDWcxbV9hZGRBZmZpbmUAUwdnMW1fbmVnAFcNZzFtX25lZ0FmZmluZQBWB2cxbV9zdWIAWgxnMW1fc3ViTWl4ZWQAWQ1nMW1fc3ViQWZmaW5lAFgSZzFtX2Zyb21Nb250Z29tZXJ5AFwYZzFtX2Zyb21Nb250Z29tZXJ5QWZmaW5lAFsQZzFtX3RvTW9udGdvbWVyeQBeFmcxbV90b01vbnRnb21lcnlBZmZpbmUAXQ9nMW1fdGltZXNTY2FsYXIAdhVnMW1fdGltZXNTY2FsYXJBZmZpbmUAdw1nMW1fbm9ybWFsaXplAGMKZzFtX0xFTXRvVQBlCmcxbV9MRU10b0MAZgpnMW1fVXRvTEVNAGcKZzFtX0N0b0xFTQBoD2cxbV9iYXRjaExFTXRvVQBpD2cxbV9iYXRjaExFTXRvQwBqD2cxbV9iYXRjaFV0b0xFTQBrD2cxbV9iYXRjaEN0b0xFTQBsDGcxbV90b0FmZmluZQBfDmcxbV90b0phY29iaWFuAE0RZzFtX2JhdGNoVG9BZmZpbmUAYhNnMW1fYmF0Y2hUb0phY29iaWFuAG0LZzFtX2luQ3VydmUAYRFnMW1faW5DdXJ2ZUFmZmluZQBgF2ZybV9fcmV2ZXJzZVBlcm11dGF0aW9uAHkHZnJtX2ZmdAB9CGZybV9pZmZ0AH4KZnJtX3Jhd2ZmdAB7C2ZybV9mZnRKb2luAH8OZnJtX2ZmdEpvaW5FeHQAgAERZnJtX2ZmdEpvaW5FeHRJbnYAgQEKZnJtX2ZmdE1peACCAQxmcm1fZmZ0RmluYWwAgwEdZnJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24AhAEIcG9sX3plcm8AhQEPcG9sX2NvbnN0cnVjdExDAIYBDHFhcF9idWlsZEFCQwCHAQtxYXBfam9pbkFCQwCIAQxxYXBfYmF0Y2hBZGQAiQEKZjJtX2lzWmVybwCKAQlmMm1faXNPbmUAiwEIZjJtX3plcm8AjAEHZjJtX29uZQCNAQhmMm1fY29weQCOAQdmMm1fbXVsAI8BCGYybV9tdWwxAJABCmYybV9zcXVhcmUAkQEHZjJtX2FkZACSAQdmMm1fc3ViAJMBB2YybV9uZWcAlAEIZjJtX3NpZ24AmwENZjJtX2Nvbmp1Z2F0ZQCVARJmMm1fZnJvbU1vbnRnb21lcnkAlwEQZjJtX3RvTW9udGdvbWVyeQCWAQZmMm1fZXEAmAELZjJtX2ludmVyc2UAmQEHZjJtX2V4cACeAQ9mMm1fdGltZXNTY2FsYXIAmgEQZjJtX2JhdGNoSW52ZXJzZQCdAQhmMm1fc3FydACfAQxmMm1faXNTcXVhcmUAoAEOZjJtX2lzTmVnYXRpdmUAnAEMZzJtX211bHRpZXhwAMsBEmcybV9tdWx0aWV4cF9jaHVuawDKARJnMm1fbXVsdGlleHBBZmZpbmUAzwEYZzJtX211bHRpZXhwQWZmaW5lX2NodW5rAM4BCmcybV9pc1plcm8AogEQZzJtX2lzWmVyb0FmZmluZQChAQZnMm1fZXEAqgELZzJtX2VxTWl4ZWQAqQEMZzJtX2VxQWZmaW5lAKgBCGcybV9jb3B5AKYBDmcybV9jb3B5QWZmaW5lAKUBCGcybV96ZXJvAKQBDmcybV96ZXJvQWZmaW5lAKMBCmcybV9kb3VibGUArAEQZzJtX2RvdWJsZUFmZmluZQCrAQdnMm1fYWRkAK8BDGcybV9hZGRNaXhlZACuAQ1nMm1fYWRkQWZmaW5lAK0BB2cybV9uZWcAsQENZzJtX25lZ0FmZmluZQCwAQdnMm1fc3ViALQBDGcybV9zdWJNaXhlZACzAQ1nMm1fc3ViQWZmaW5lALIBEmcybV9mcm9tTW9udGdvbWVyeQC2ARhnMm1fZnJvbU1vbnRnb21lcnlBZmZpbmUAtQEQZzJtX3RvTW9udGdvbWVyeQC4ARZnMm1fdG9Nb250Z29tZXJ5QWZmaW5lALcBD2cybV90aW1lc1NjYWxhcgDQARVnMm1fdGltZXNTY2FsYXJBZmZpbmUA0QENZzJtX25vcm1hbGl6ZQC9AQpnMm1fTEVNdG9VAL8BCmcybV9MRU10b0MAwAEKZzJtX1V0b0xFTQDBAQpnMm1fQ3RvTEVNAMIBD2cybV9iYXRjaExFTXRvVQDDAQ9nMm1fYmF0Y2hMRU10b0MAxAEPZzJtX2JhdGNoVXRvTEVNAMUBD2cybV9iYXRjaEN0b0xFTQDGAQxnMm1fdG9BZmZpbmUAuQEOZzJtX3RvSmFjb2JpYW4ApwERZzJtX2JhdGNoVG9BZmZpbmUAvAETZzJtX2JhdGNoVG9KYWNvYmlhbgDHAQtnMm1faW5DdXJ2ZQC7ARFnMm1faW5DdXJ2ZUFmZmluZQC6AQtnMW1fdGltZXNGcgDSARdnMW1fX3JldmVyc2VQZXJtdXRhdGlvbgDUAQdnMW1fZmZ0ANgBCGcxbV9pZmZ0ANkBCmcxbV9yYXdmZnQA1gELZzFtX2ZmdEpvaW4A2gEOZzFtX2ZmdEpvaW5FeHQA2wERZzFtX2ZmdEpvaW5FeHRJbnYA3AEKZzFtX2ZmdE1peADdAQxnMW1fZmZ0RmluYWwA3gEdZzFtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24A3wELZzJtX3RpbWVzRnIA4AEXZzJtX19yZXZlcnNlUGVybXV0YXRpb24A4gEHZzJtX2ZmdADmAQhnMm1faWZmdADnAQpnMm1fcmF3ZmZ0AOQBC2cybV9mZnRKb2luAOgBDmcybV9mZnRKb2luRXh0AOkBEWcybV9mZnRKb2luRXh0SW52AOoBCmcybV9mZnRNaXgA6wEMZzJtX2ZmdEZpbmFsAOwBHWcybV9wcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uAO0BEWcxbV90aW1lc0ZyQWZmaW5lAO4BEWcybV90aW1lc0ZyQWZmaW5lAO8BEWZybV9iYXRjaEFwcGx5S2V5APABEWcxbV9iYXRjaEFwcGx5S2V5APEBFmcxbV9iYXRjaEFwcGx5S2V5TWl4ZWQA8gERZzJtX2JhdGNoQXBwbHlLZXkA8wEWZzJtX2JhdGNoQXBwbHlLZXlNaXhlZAD0AQpmNm1faXNaZXJvAPYBCWY2bV9pc09uZQD3AQhmNm1femVybwD4AQdmNm1fb25lAPkBCGY2bV9jb3B5APoBB2Y2bV9tdWwA+wEKZjZtX3NxdWFyZQD8AQdmNm1fYWRkAP0BB2Y2bV9zdWIA/gEHZjZtX25lZwD/AQhmNm1fc2lnbgCAAhJmNm1fZnJvbU1vbnRnb21lcnkAggIQZjZtX3RvTW9udGdvbWVyeQCBAgZmNm1fZXEAgwILZjZtX2ludmVyc2UAhAIHZjZtX2V4cACIAg9mNm1fdGltZXNTY2FsYXIAhQIQZjZtX2JhdGNoSW52ZXJzZQCHAg5mNm1faXNOZWdhdGl2ZQCGAgpmdG1faXNaZXJvAIoCCWZ0bV9pc09uZQCLAghmdG1femVybwCMAgdmdG1fb25lAI0CCGZ0bV9jb3B5AI4CB2Z0bV9tdWwAjwIIZnRtX211bDEAkAIKZnRtX3NxdWFyZQCRAgdmdG1fYWRkAJICB2Z0bV9zdWIAkwIHZnRtX25lZwCUAghmdG1fc2lnbgCbAg1mdG1fY29uanVnYXRlAJUCEmZ0bV9mcm9tTW9udGdvbWVyeQCXAhBmdG1fdG9Nb250Z29tZXJ5AJYCBmZ0bV9lcQCYAgtmdG1faW52ZXJzZQCZAgdmdG1fZXhwAJ4CD2Z0bV90aW1lc1NjYWxhcgCaAhBmdG1fYmF0Y2hJbnZlcnNlAJ0CCGZ0bV9zcXJ0AJ8CDGZ0bV9pc1NxdWFyZQCgAg5mdG1faXNOZWdhdGl2ZQCcAhRibjEyOF9fZnJvYmVuaXVzTWFwMACpAhRibjEyOF9fZnJvYmVuaXVzTWFwMQCqAhRibjEyOF9fZnJvYmVuaXVzTWFwMgCrAhRibjEyOF9fZnJvYmVuaXVzTWFwMwCsAhRibjEyOF9fZnJvYmVuaXVzTWFwNACtAhRibjEyOF9fZnJvYmVuaXVzTWFwNQCuAhRibjEyOF9fZnJvYmVuaXVzTWFwNgCvAhRibjEyOF9fZnJvYmVuaXVzTWFwNwCwAhRibjEyOF9fZnJvYmVuaXVzTWFwOACxAhRibjEyOF9fZnJvYmVuaXVzTWFwOQCyAhBibjEyOF9wYWlyaW5nRXExALkCEGJuMTI4X3BhaXJpbmdFcTIAugIQYm4xMjhfcGFpcmluZ0VxMwC7AhBibjEyOF9wYWlyaW5nRXE0ALwCEGJuMTI4X3BhaXJpbmdFcTUAvQINYm4xMjhfcGFpcmluZwC+Ag9ibjEyOF9wcmVwYXJlRzEAowIPYm4xMjhfcHJlcGFyZUcyAKUCEGJuMTI4X21pbGxlckxvb3AAqAIZYm4xMjhfZmluYWxFeHBvbmVudGlhdGlvbgC4AhxibjEyOF9maW5hbEV4cG9uZW50aWF0aW9uT2xkALMCD2JuMTI4X19tdWxCeTAyNACmAhJibjEyOF9fbXVsQnkwMjRPbGQApwIXYm4xMjhfX2N5Y2xvdG9taWNTcXVhcmUAtQIXYm4xMjhfX2N5Y2xvdG9taWNFeHBfdzAAtgIKgfcDvwIqACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxgLHgAgAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYCzMAIAApAxhQBEAgACkDEFAEQCAAKQMIUARAIAApAwBQDwVBAA8LBUEADwsFQQAPC0EADwseACAAQgE3AwAgAEIANwMIIABCADcDECAAQgA3AxgLRwAgACkDGCABKQMYUQRAIAApAxAgASkDEFEEQCAAKQMIIAEpAwhRBEAgACkDACABKQMAUQ8FQQAPCwVBAA8LBUEADwtBAA8LfQAgACkDGCABKQMYVARAQQAPBSAAKQMYIAEpAxhWBEBBAQ8FIAApAxAgASkDEFQEQEEADwUgACkDECABKQMQVgRAQQEPBSAAKQMIIAEpAwhUBEBBAA8FIAApAwggASkDCFYEQEEBDwUgACkDACABKQMAWg8LCwsLCwtBAA8L1AEBAX4gADUCACABNQIAfCEDIAIgAz4CACAANQIEIAE1AgR8IANCIIh8IQMgAiADPgIEIAA1AgggATUCCHwgA0IgiHwhAyACIAM+AgggADUCDCABNQIMfCADQiCIfCEDIAIgAz4CDCAANQIQIAE1AhB8IANCIIh8IQMgAiADPgIQIAA1AhQgATUCFHwgA0IgiHwhAyACIAM+AhQgADUCGCABNQIYfCADQiCIfCEDIAIgAz4CGCAANQIcIAE1Ahx8IANCIIh8IQMgAiADPgIcIANCIIinC4wCAQF+IAA1AgAgATUCAH0hAyACIANC/////w+DPgIAIAA1AgQgATUCBH0gA0Igh3whAyACIANC/////w+DPgIEIAA1AgggATUCCH0gA0Igh3whAyACIANC/////w+DPgIIIAA1AgwgATUCDH0gA0Igh3whAyACIANC/////w+DPgIMIAA1AhAgATUCEH0gA0Igh3whAyACIANC/////w+DPgIQIAA1AhQgATUCFH0gA0Igh3whAyACIANC/////w+DPgIUIAA1AhggATUCGH0gA0Igh3whAyACIANC/////w+DPgIYIAA1AhwgATUCHH0gA0Igh3whAyACIANC/////w+DPgIcIANCIIenC48QEgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfiADQv////8PgyAANQIAIgUgATUCACIGfnwhAyAEIANCIIh8IQQgAiADPgIAIARCIIghAyAEQv////8PgyAFIAE1AgQiCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AgQiByAGfnwhBCADIARCIIh8IQMgAiAEPgIEIANCIIghBCADQv////8PgyAFIAE1AggiCn58IQMgBCADQiCIfCEEIANC/////w+DIAcgCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AggiCSAGfnwhAyAEIANCIIh8IQQgAiADPgIIIARCIIghAyAEQv////8PgyAFIAE1AgwiDH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgCn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AgwiCyAGfnwhBCADIARCIIh8IQMgAiAEPgIMIANCIIghBCADQv////8PgyAFIAE1AhAiDn58IQMgBCADQiCIfCEEIANC/////w+DIAcgDH58IQMgBCADQiCIfCEEIANC/////w+DIAkgCn58IQMgBCADQiCIfCEEIANC/////w+DIAsgCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AhAiDSAGfnwhAyAEIANCIIh8IQQgAiADPgIQIARCIIghAyAEQv////8PgyAFIAE1AhQiEH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgDn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgDH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgCn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhQiDyAGfnwhBCADIARCIIh8IQMgAiAEPgIUIANCIIghBCADQv////8PgyAFIAE1AhgiEn58IQMgBCADQiCIfCEEIANC/////w+DIAcgEH58IQMgBCADQiCIfCEEIANC/////w+DIAkgDn58IQMgBCADQiCIfCEEIANC/////w+DIAsgDH58IQMgBCADQiCIfCEEIANC/////w+DIA0gCn58IQMgBCADQiCIfCEEIANC/////w+DIA8gCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AhgiESAGfnwhAyAEIANCIIh8IQQgAiADPgIYIARCIIghAyAEQv////8PgyAFIAE1AhwiFH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgEn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgEH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgDn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gDH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gCn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhwiEyAGfnwhBCADIARCIIh8IQMgAiAEPgIcIANCIIghBCADQv////8PgyAHIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyANIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAh+fCEDIAQgA0IgiHwhBCACIAM+AiAgBEIgiCEDIARC/////w+DIAkgFH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgEn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gEH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gDn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgDH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgCn58IQQgAyAEQiCIfCEDIAIgBD4CJCADQiCIIQQgA0L/////D4MgCyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSASfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgESAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAMfnwhAyAEIANCIIh8IQQgAiADPgIoIARCIIghAyAEQv////8PgyANIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIA5+fCEEIAMgBEIgiHwhAyACIAQ+AiwgA0IgiCEEIANC/////w+DIA8gFH58IQMgBCADQiCIfCEEIANC/////w+DIBEgEn58IQMgBCADQiCIfCEEIANC/////w+DIBMgEH58IQMgBCADQiCIfCEEIAIgAz4CMCAEQiCIIQMgBEL/////D4MgESAUfnwhBCADIARCIIh8IQMgBEL/////D4MgEyASfnwhBCADIARCIIh8IQMgAiAEPgI0IANCIIghBCADQv////8PgyATIBR+fCEDIAQgA0IgiHwhBCACIAM+AjggBEIgiCEDIAIgBD4CPAuMEgwBfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX5CACECQgAhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAANQIAIgYgBn58IQIgAyACQiCIfCEDIAEgAj4CACADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIEIgd+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIEIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AggiCH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAcgB358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCDCIJfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CDCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIQIgp+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAl+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAIIAh+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIQIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhQiC358IQIgAyACQiCIfCEDIAJC/////w+DIAcgCn58IQIgAyACQiCIfCEDIAJC/////w+DIAggCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCGCIMfnwhAiADIAJCIIh8IQMgAkL/////D4MgByALfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAKfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgCSAJfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CGCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIcIg1+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIcIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAHIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAKIAp+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIgIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAIIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIkIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAJIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAx+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyALIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIoIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAKIA1+fCECIAMgAkIgiHwhAyACQv////8PgyALIAx+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIsIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyALIA1+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAMIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIwIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAMIA1+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgI0IAMhBCAEQiCIIQVCACECQgAhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyANIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgI4IAMhBCAEQiCIIQUgASAEPgI8CwoAIAAgACABEAgLtgEBAX4gADUAACABfiEDIAIgAz4AACAANQAEIAF+IANCIIh8IQMgAiADPgAEIAA1AAggAX4gA0IgiHwhAyACIAM+AAggADUADCABfiADQiCIfCEDIAIgAz4ADCAANQAQIAF+IANCIIh8IQMgAiADPgAQIAA1ABQgAX4gA0IgiHwhAyACIAM+ABQgADUAGCABfiADQiCIfCEDIAIgAz4AGCAANQAcIAF+IANCIIh8IQMgAiADPgAcC04CAX4BfyAAIQMgAzUAACABfCECIAMgAj4AACACQiCIIQICQANAIAJQDQEgA0EEaiEDIAM1AAAgAnwhAiADIAI+AAAg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BkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCCCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9CiceZpA5+Qv////8PgyEEIA8gBELH+vPDDX58IQYgBkIgiCEFIBAgBEKWmILhA358IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQo2Vx8MGfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCkdWFvAl+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AgwhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQonHmaQOfkL/////D4MhBCAPIARCx/rzww1+fCEGIAZCIIghBSAQIARClpiC4QN+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKNlcfDBn58IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQpHVhbwJfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIQIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCFCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9CiceZpA5+Qv////8PgyEEIA8gBELH+vPDDX58IQYgBkIgiCEFIBAgBEKWmILhA358IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQo2Vx8MGfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCkdWFvAl+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhghAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQonHmaQOfkL/////D4MhBCAPIARCx/rzww1+fCEGIAZCIIghBSAQIARClpiC4QN+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKNlcfDBn58IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQpHVhbwJfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIcIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgAiAPPgIAIAIgED4CBCACIBE+AgggAiASPgIMIAIgEz4CECACIBQ+AhQgAiAVPgIYIAIgFj4CHCACQegDEAUEQCACQegDIAIQBxoLC8skFgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IAA1AgAhBiAANQIEIQcgADUCCCEIIAA1AgwhCSAANQIQIQogADUCFCELIAA1AhghDCAANQIcIQ0gDiAGIAZ+fCEEIARC/////w+DIQ4gBEIgiCEDIAcgBn4hBSAPIAVC/////w+DQgGGfCADfCEEIARC/////w+DIQ8gBEIgiCAFQiCIQgGGfCEDIAggBn4hBSAQIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRAgBEIgiCAFQiCIQgGGfCEDIAkgBn4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogBn4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgBn4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgBn4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gBn4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgDyAHIAd+fCEEIARC/////w+DIQ8gBEIgiCEDIAggB34hBSAQIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRAgBEIgiCAFQiCIQgGGfCEDIAkgB34hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogB34hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgB34hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgB34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gB34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgECAIIAh+fCEEIARC/////w+DIRAgBEIgiCEDIAkgCH4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgESAJIAl+fCEEIARC/////w+DIREgBEIgiCEDIAogCX4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCX4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCX4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCX4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEiAKIAp+fCEEIARC/////w+DIRIgBEIgiCEDIAsgCn4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCn4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCn4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEyALIAt+fCEEIARC/////w+DIRMgBEIgiCEDIAwgC34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgFCAMIAx+fCEEIARC/////w+DIRQgBEIgiCEDIA0gDH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgFSANIA1+fCEEIARC/////w+DIRUgBEIgiCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgASAOPgIAIAEgDz4CBCABIBA+AgggASARPgIMIAEgEj4CECABIBM+AhQgASAUPgIYIAEgFT4CHCAWpwRAIAFB6AMgARAHGgUgAUHoAxAFBEAgAUHoAyABEAcaCwsLCgAgACAAIAEQFAsLACAAQYgEIAEQFAsVACAAQYgKEABBqAoQAUGICiABEBMLEQAgAEHIChAYQcgKQYgFEAULJAAgABACBEBBAA8LIABB6AoQGEHoCkGIBRAFBEBBfw8LQQEPCxcAIAAgARAYIAFB6AMgARAOIAEgARAXCwkAQagEIAAQAAvLAQQBfwF/AX8BfyACEAFBICEFIAAhAwJAA0AgBSABSw0BIAVBIEYEQEGICxAcBUGIC0GIBEGICxAUCyADQYgLQagLEBQgAkGoCyACEBAgA0EgaiEDIAVBIGohBQwACwsgAUEgcCEEIARFBEAPC0GoCxABQQAhBgJAA0AgBiAERg0BIAYgAy0AADoAqAsgA0EBaiEDIAZBAWohBgwACwsgBUEgRgRAQYgLEBwFQYgLQYgEQYgLEBQLQagLQYgLQagLEBQgAkGoCyACEBALHAAgASACQcgLEB1ByAtByAsQFyAAQcgLIAMQFAv4AQQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpBIGxqNgIAIAUQHCAAIQYgBUEgaiEFQQAhCAJAA0AgCCACRg0BIAYQAgRA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IIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AgQhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIIIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////Dn5C/////w+DIQQgDyAEQoGAgIAPfnwhBiAGQiCIIQUgECAEQpPrh58EfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCkeHlzQd+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBELI0M/BAn58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCDCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhAhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIUIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////Dn5C/////w+DIQQgDyAEQoGAgIAPfnwhBiAGQiCIIQUgECAEQpPrh58EfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCkeHlzQd+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBELI0M/BAn58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCGCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhwhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiACIA8+AgAgAiAQPgIEIAIgET4CCCACIBI+AgwgAiATPgIQIAIgFD4CFCACIBU+AhggAiAWPgIcIAJB6A0QBQRAIAJB6A0gAhAHGgsLyyQWAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gADUCACEGIAA1AgQhByAANQIIIQggADUCDCEJIAA1AhAhCiAANQIUIQsgADUCGCEMIAA1AhwhDSAOIAYgBn58IQQgBEL/////D4MhDiAEQiCIIQMgByAGfiEFIA8gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhDyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAPIAcgB358IQQgBEL/////D4MhDyAEQiCIIQMgCCAHfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAHfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAHfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAHfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAHfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAHfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAQIAggCH58IQQgBEL/////D4MhECAEQiCIIQMgCSAIfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAIfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAIfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAIfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAIfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyARIAkgCX58IQQgBEL/////D4MhESAEQiCIIQMgCiAJfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyASIAogCn58IQQgBEL/////D4MhEiAEQiCIIQMgCyAKfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAKfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAKfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyATIAsgC358IQQgBEL/////D4MhEyAEQiCIIQMgDCALfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSALfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAUIAwgDH58IQQgBEL/////D4MhFCAEQiCIIQMgDSAMfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAVIA0gDX58IQQgBEL/////D4MhFSAEQiCIIQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUg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IABBIGoQAQsVACAAEAEgAEEgahAcIABBwABqEAELUgAgASAAKQMANwMAIAEgACkDCDcDCCABIAApAxA3AxAgASAAKQMYNwMYIAEgACkDIDcDICABIAApAyg3AyggASAAKQMwNwMwIAEgACkDODcDOAt6ACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWAsoACAAEEcEQCABEEoFIAFBwABqEBwgAEEgaiABQSBqEAAgACABEAALCxgBAX8gACABEAQgAEEgaiABQSBqEARxDwt1AQF/IABBwABqIQIgABBIBEAgARBHDwsgARBHBEBBAA8LIAIQDwRAIAAgARBODwsgAkGoGBAVIAFBqBhByBgQFCACQagYQegYEBQgAUEgakHoGEGIGRAUIABByBgQBARAIABBIGpBiBkQBARAQQEPCwtBAA8LtAECAX8BfyAAQcAAaiECIAFBwABqIQMgABBIBEAgARBIDwsgARBIBEBBAA8LIAIQDwRAIAEgABBPDwsgAxAPBEAgACABEE8PCyACQagZEBUgA0HIGRAVIABByBlB6BkQFCABQagZQYgaEBQgAkGoGUGoGhAUIANByBlByBoQFCAAQSBqQcgaQegaEBQgAUEgakGoGkGIGxAUQegZQYgaEAQEQEHoGkGIGxAEBEBBAQ8LC0EADwvoAQAgABBHBEAgACABEE0PCyAAQagbEBUgAEEgakHIGxAVQcgbQegbEBUgAEHIG0GIHBAQQYgcQYgcEBVBiBxBqBtBiBwQEUGIHEHoG0GIHBARQYgcQYgcQYgcEBBBqBtBqBtBqBwQEEGoHEGoG0GoHBAQIABBIGogAEEgaiABQcAAahAQQagcIAEQFSABQYgcIAEQESABQYgcIAEQEUHoG0HoG0HIHBAQQcgcQcgcQcgcEBBByBxByBxByBwQEEGIHCABIAFBIGoQESABQSBqQagcIAFBIGoQFCABQSBqQcgcIAFBIGoQEQuJAgAgABBIBEAgACABEEwPCyAAQcAAahAPBEAgACABEFEPDwsgAEHoHBAVIABBIGpBiB0QFUGIHUGoHRAVIABB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TwRAIAVBEGshBSADQcjcACADEI8BCyADIAMQkQEgBUEITwRAIAVBCGshBSADQcjcACADEI8BCyADIAMQkQEgBUEETwRAIAVBBGshBSADQcjcACADEI8BCyADIAMQkQEgBUECTwRAIAVBAmshBSADQcjcACADEI8BCyADIAMQkQEgBUEBTwRAIAVBAWshBSADQcjcACADEI8BCyAERQ0BDAALCwvNAQBBiN8AEI0BQYjfAEGI3wAQlAEgAEGI3QBBIEHI3QAQngFByN0AQYjeABCRASAAQYjeAEGI3gAQjwFBiN4AQcjeABCVAUHI3gBBiN4AQcjeABCPAUHI3gBBiN8AEJgBBEAAC0HI3QAgAEHI3wAQjwFBiN4AQYjfABCYAQRAQYjfABABQajfABAcQYjfAEHI3wAgARCPAQVBiOAAEI0BQYjgAEGI3gBBiOAAEJIBQYjgAEGo3QBBIEGI4AAQngFBiOAAQcjfACABEI8BCwtpAEGo4gAQjQFBqOIAQajiABCUASAAQcjgAEEgQejgABCeAUHo4ABBqOEAEJEBIABBqOEAQajhABCPAUGo4QBB6OEAEJUBQejhAEGo4QBB6OEAEI8BQejhAEGo4gAQmAEEQEEADwtBAQ8LEQAgABCKASAAQcAAahCKAXELCwAgAEGAAWoQigELEAAgABCMASAAQcAAahCMAQsZACAAEIwBIABBwABqEI0BIABBgAFqEIwBC6IBACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWCABIAApA2A3A2AgASAAKQNoNwNoIAEgACkDcDcDcCABIAApA3g3A3gLggIAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYIAEgACkDYDcDYCABIAApA2g3A2ggASAAKQNwNwNwIAEgACkDeDcDeCABIAApA4ABNwOAASABIAApA4gBNwOI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IAEQjwEgAEHAAGogAUHAAGoQACAAQeAAaiABQeAAahASIAFBwABqQdCIBCABQcAAahCPASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpBkIkEIAFBgAFqEI8BIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakHQiQQgAUHAAWoQjwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQZCKBCABQYACahCPASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpB0IoEIAFBwAJqEI8BC2wAIABBkIsEIAEQjwEgAEHAAGpB0IsEIAFBwABqEI8BIABBgAFqQZCMBCABQYABahCPASAAQcABakHQjAQgAUHAAWoQjwEgAEGAAmpBkI0EIAFBgAJqEI8BIABBwAJqQdCNBCABQcACahCPAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUGQjgQgARCPASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpB0I4EIAFBwABqEI8BIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakGQjwQgAUGAAWoQjwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQdCPBCABQcABahCPASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpBkJAEIAFBgAJqEI8BIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakHQkAQgAUHAAmoQjwELbAAgAEGQkQQgARCPASAAQcAAakHQkQQgAUHAAGoQjwEgAEGAAWpBkJIEIAFBgAFqEI8BIABBwAFqQdCSBCABQcABahCPASAAQYACakGQkwQgAUGAAmoQjwEgAEHAAmpB0JMEIAFBwAJqEI8BC4oCACAAIAEQACAAQSBqIAFBIGoQEiABQZCUBCABEI8BIABBwABqIAFBwABqEAAgAEHgAGogAUHgAGoQEiABQcAAakHQlAQgAUHAAGoQjwEgAEGAAWogAUGAAWoQACAAQaABaiABQaABahASIAFBgAFqQZCVBCABQYABahCPASAAQcABaiABQcABahAAIABB4AFqIAFB4AFqEBIgAUHAAWpB0JUEIAFBwAFqEI8BIABBgAJqIAFBgAJqEAAgAEGgAmogAUGgAmoQEiABQYACakGQlgQgAUGAAmoQjwEgAEHAAmogAUHAAmoQACAAQeACaiABQeACahASIAFBwAJqQdCWBCABQcACahCPAQtsACAAQZCXBCABEI8BIABBwABqQdCXBCABQcAAahCPASAAQYABakGQmAQgAUGAAWoQjwEgAEHAAWpB0JgEIAFBwAFqEI8BIABBgAJqQZCZBCABQYACahCPASAAQcACakHQmQQgAUHAAmoQjwELigIAIAAgARAAIABBIGogAUEgahASIAFBkJoEIAEQjwEgAEHAAGogAUHAAGoQACAAQeAAaiABQeAAahASIAFBwABqQdCaBCABQcAAahCPASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpBkJsEIAFBgAFqEI8BIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakHQmwQgAUHAAWoQjwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQZCcBCABQYACahCPASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpB0JwEIAFBwAJqEI8BC2wAIABBkJ0EIAEQjwEgAEHAAGpB0J0EIAFBwABqEI8BIABBgAFqQZCeBCABQYABahCPASAAQcABakHQngQgAUHAAWoQjwEgAEGAAmpBkJ8EIAFBgAJqEI8BIABBwAJqQdCfBCABQcACahCPAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUGQoAQgARCPASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpB0KAEIAFBwABqEI8BIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakGQoQQgAUGAAWoQjwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQdChBCABQcABahCPASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpBkKIEIAFBgAJqEI8BIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakHQogQgAUHAAmoQjwELEAAgAEGQowRB4AIgARCeAgtIACAAQfClBBD6ASAAQcABakGwpwQQ/wEgAEHwqAQQmQJB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";
+export const pq = 488;
+export const pr = 1768;
+export const pG1gen = 32008;
+export const pG1zero = 32104;
+export const pG1b = 3080;
+export const pG2gen = 32200;
+export const pG2zero = 32392;
+export const pG2b = 12648;
+export const pOneT = 32584;
+export const prePSize = 192;
+export const preQSize = 19776;
+export const n8q = 32;
+export const n8r = 32;
+export const q = "21888242871839275222246405745257275088696311157297823662689037894645226208583";
+export const r = "21888242871839275222246405745257275088548364400416034343698204186575808495617";
diff --git a/build/bn128_wasm_gzip.js b/build/bn128_wasm_gzip.js
new file mode 100644
index 0000000..5a96a16
--- /dev/null
+++ b/build/bn128_wasm_gzip.js
@@ -0,0 +1,16 @@
+export const gzipCode = "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Hi13TLzsPDqgTv3pkemPtI1der7za2vnLZKXrovZdrXLjagzhVuG9f4sbn3kqPmr0y/erPbN77dss/NjZzeaOfztUyuOPj5mVJ+5j/YbcGJQYYVxz0RWrPDt2fFLv87vtaTTJyuHRte3nI1otPbbb97rmfTi4vJlf3qwdwKizq+RmiOhnLTtZFm341pep3118wcVmO2tnKmOPq6khU8dumfzyKvKxIc/q7Si58/x8x4/0HDD0D8tM9rtqflu/zPJi589cv+WMX9J45vtSFn+4snYOY/tr78u60LktDa7qr+T8VuZ17oebvrhS9eNk1v+u8rKXr+UeuWJg403Db8cNavDl7Xfz/yj/JLnf3xw69hbeBz9xPZG9xMxsx/9ut7awecjprb+otrbfX8t/erT39/7wahrhkktPq/8VvqphPldvm20cdgl68z2e2u9N+BsudefO/rAxy/flCc0/7Timz1+ipvb+ZsG64dcVKe33V1jdb/fyy565of7Php9wzTlkZ1VV/U+nbjgye+a/GvElejcjl/VWTPwXIWlLxx7aFt2IfuqIJU8WuShjAPYinEOdLxY0lwnkZrmkDaP+Omea/c917lB46plVanbY8NaF5z9V5UBjonN6/87vnLvwiNf7zlz+p4HrV/OfXl9Qfo76N2Uo/taf9d+Zp82X35AMaKO+bhYBxELi8e2CJccWJQcWJQcWPzTDyyWF2eelpxYhPspeWQP+1NiftifYp5YvINLTixKTixKTiz+6ScWa3HJiUXJiUXJicU//cRiMy45sShE8AF3Jc/pJc/pJc/p//Tn9D0lz+n/K57UwvyUmB/257/BfPgM1JLn9JLn9JLn9H/6c/oPJc/pJc/pJc/p//jn9JMlz+kssuA6VrsVldLStGz56WWnfLhydKlZvz968Hz8UzMuFPzY8uie57dGN5xwLj656JQYFzRTxI0OKlJMUT/UeQOr23EVskX6euOEWVl4dOtGpX8/cqzMuAWPVNl8475Or6yh9zxZOq17O8fLQzas+eyQ9FTXo827Ta6z7LG/Ov0a0W/0b00nFNyKv/xrP/vr11/vPnLRkksL9mffuvVy2YovlllSaGy25P3fx95M/eOJpJ1PPBPR86P7X66fcu3JI8O1Rg22NrrWZXzPm3N/WbbC+vftsN8EO4rk+5/259/9oc5bWM2R/+N6/F//gcRs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";
+export const pq = 488;
+export const pr = 1768;
+export const pG1gen = 32008;
+export const pG1zero = 32104;
+export const pG1b = 3080;
+export const pG2gen = 32200;
+export const pG2zero = 32392;
+export const pG2b = 12648;
+export const pOneT = 32584;
+export const prePSize = 192;
+export const preQSize = 19776;
+export const n8q = 32;
+export const n8r = 32;
+export const q = "21888242871839275222246405745257275088696311157297823662689037894645226208583";
+export const r = "21888242871839275222246405745257275088548364400416034343698204186575808495617";
diff --git a/build/main.cjs b/build/main.cjs
new file mode 100644
index 0000000..2e6f3b4
--- /dev/null
+++ b/build/main.cjs
@@ -0,0 +1,3962 @@
+Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
+//#region src/utils.js
+function bigInt2BytesLE(_a, len) {
+ const b = Array(len);
+ let v = BigInt(_a);
+ for (let i = 0; i < len; i++) {
+ b[i] = Number(v & 255n);
+ v = v >> 8n;
+ }
+ return b;
+}
+//#endregion
+//#region src/build_int.js
+function buildInt(module, n64, _prefix) {
+ const prefix = _prefix || "int";
+ if (module.modules[prefix]) return prefix;
+ module.modules[prefix] = {};
+ const n32 = n64 * 2;
+ const n8 = n64 * 8;
+ function buildCopy() {
+ const f = module.addFunction(prefix + "_copy");
+ f.addParam("px", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ for (let i = 0; i < n64; i++) f.addCode(c.i64_store(c.getLocal("pr"), i * 8, c.i64_load(c.getLocal("px"), i * 8)));
+ }
+ function buildZero() {
+ const f = module.addFunction(prefix + "_zero");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ for (let i = 0; i < n64; i++) f.addCode(c.i64_store(c.getLocal("pr"), i * 8, c.i64_const(0)));
+ }
+ function buildOne() {
+ const f = module.addFunction(prefix + "_one");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.i64_store(c.getLocal("pr"), 0, c.i64_const(1)));
+ for (let i = 1; i < n64; i++) f.addCode(c.i64_store(c.getLocal("pr"), i * 8, c.i64_const(0)));
+ }
+ function buildIsZero() {
+ const f = module.addFunction(prefix + "_isZero");
+ f.addParam("px", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ function getCompCode(n) {
+ if (n == 0) return c.ret(c.i64_eqz(c.i64_load(c.getLocal("px"))));
+ return c.if(c.i64_eqz(c.i64_load(c.getLocal("px"), n * 8)), getCompCode(n - 1), c.ret(c.i32_const(0)));
+ }
+ f.addCode(getCompCode(n64 - 1));
+ f.addCode(c.ret(c.i32_const(0)));
+ }
+ function buildEq() {
+ const f = module.addFunction(prefix + "_eq");
+ f.addParam("px", "i32");
+ f.addParam("py", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ function getCompCode(n) {
+ if (n == 0) return c.ret(c.i64_eq(c.i64_load(c.getLocal("px")), c.i64_load(c.getLocal("py"))));
+ return c.if(c.i64_eq(c.i64_load(c.getLocal("px"), n * 8), c.i64_load(c.getLocal("py"), n * 8)), getCompCode(n - 1), c.ret(c.i32_const(0)));
+ }
+ f.addCode(getCompCode(n64 - 1));
+ f.addCode(c.ret(c.i32_const(0)));
+ }
+ function buildGte() {
+ const f = module.addFunction(prefix + "_gte");
+ f.addParam("px", "i32");
+ f.addParam("py", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ function getCompCode(n) {
+ if (n == 0) return c.ret(c.i64_ge_u(c.i64_load(c.getLocal("px")), c.i64_load(c.getLocal("py"))));
+ return c.if(c.i64_lt_u(c.i64_load(c.getLocal("px"), n * 8), c.i64_load(c.getLocal("py"), n * 8)), c.ret(c.i32_const(0)), c.if(c.i64_gt_u(c.i64_load(c.getLocal("px"), n * 8), c.i64_load(c.getLocal("py"), n * 8)), c.ret(c.i32_const(1)), getCompCode(n - 1)));
+ }
+ f.addCode(getCompCode(n64 - 1));
+ f.addCode(c.ret(c.i32_const(0)));
+ }
+ function buildAdd() {
+ const f = module.addFunction(prefix + "_add");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ f.setReturnType("i32");
+ f.addLocal("c", "i64");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("c", c.i64_add(c.i64_load32_u(c.getLocal("x")), c.i64_load32_u(c.getLocal("y")))));
+ f.addCode(c.i64_store32(c.getLocal("r"), c.getLocal("c")));
+ for (let i = 1; i < n32; i++) {
+ f.addCode(c.setLocal("c", c.i64_add(c.i64_add(c.i64_load32_u(c.getLocal("x"), 4 * i), c.i64_load32_u(c.getLocal("y"), 4 * i)), c.i64_shr_u(c.getLocal("c"), c.i64_const(32)))));
+ f.addCode(c.i64_store32(c.getLocal("r"), i * 4, c.getLocal("c")));
+ }
+ f.addCode(c.i32_wrap_i64(c.i64_shr_u(c.getLocal("c"), c.i64_const(32))));
+ }
+ function buildSub() {
+ const f = module.addFunction(prefix + "_sub");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ f.setReturnType("i32");
+ f.addLocal("c", "i64");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("c", c.i64_sub(c.i64_load32_u(c.getLocal("x")), c.i64_load32_u(c.getLocal("y")))));
+ f.addCode(c.i64_store32(c.getLocal("r"), c.i64_and(c.getLocal("c"), c.i64_const("0xFFFFFFFF"))));
+ for (let i = 1; i < n32; i++) {
+ f.addCode(c.setLocal("c", c.i64_add(c.i64_sub(c.i64_load32_u(c.getLocal("x"), 4 * i), c.i64_load32_u(c.getLocal("y"), 4 * i)), c.i64_shr_s(c.getLocal("c"), c.i64_const(32)))));
+ f.addCode(c.i64_store32(c.getLocal("r"), i * 4, c.i64_and(c.getLocal("c"), c.i64_const("0xFFFFFFFF"))));
+ }
+ f.addCode(c.i32_wrap_i64(c.i64_shr_s(c.getLocal("c"), c.i64_const(32))));
+ }
+ function buildMul() {
+ const f = module.addFunction(prefix + "_mul");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("c0", "i64");
+ f.addLocal("c1", "i64");
+ for (let i = 0; i < n32; i++) {
+ f.addLocal("x" + i, "i64");
+ f.addLocal("y" + i, "i64");
+ }
+ const c = f.getCodeBuilder();
+ const loadX = [];
+ const loadY = [];
+ function mulij(i, j) {
+ let X, Y;
+ if (!loadX[i]) {
+ X = c.teeLocal("x" + i, c.i64_load32_u(c.getLocal("x"), i * 4));
+ loadX[i] = true;
+ } else X = c.getLocal("x" + i);
+ if (!loadY[j]) {
+ Y = c.teeLocal("y" + j, c.i64_load32_u(c.getLocal("y"), j * 4));
+ loadY[j] = true;
+ } else Y = c.getLocal("y" + j);
+ return c.i64_mul(X, Y);
+ }
+ let c0 = "c0";
+ let c1 = "c1";
+ for (let k = 0; k < n32 * 2 - 1; k++) {
+ for (let i = Math.max(0, k - n32 + 1); i <= k && i < n32; i++) {
+ const j = k - i;
+ f.addCode(c.setLocal(c0, c.i64_add(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), mulij(i, j))));
+ f.addCode(c.setLocal(c1, c.i64_add(c.getLocal(c1), c.i64_shr_u(c.getLocal(c0), c.i64_const(32)))));
+ }
+ f.addCode(c.i64_store32(c.getLocal("r"), k * 4, c.getLocal(c0)));
+ [c0, c1] = [c1, c0];
+ f.addCode(c.setLocal(c1, c.i64_shr_u(c.getLocal(c0), c.i64_const(32))));
+ }
+ f.addCode(c.i64_store32(c.getLocal("r"), n32 * 4 * 2 - 4, c.getLocal(c0)));
+ }
+ function buildSquare() {
+ const f = module.addFunction(prefix + "_square");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("c0", "i64");
+ f.addLocal("c1", "i64");
+ f.addLocal("c0_old", "i64");
+ f.addLocal("c1_old", "i64");
+ for (let i = 0; i < n32; i++) f.addLocal("x" + i, "i64");
+ const c = f.getCodeBuilder();
+ const loadX = [];
+ function mulij(i, j) {
+ let X, Y;
+ if (!loadX[i]) {
+ X = c.teeLocal("x" + i, c.i64_load32_u(c.getLocal("x"), i * 4));
+ loadX[i] = true;
+ } else X = c.getLocal("x" + i);
+ if (!loadX[j]) {
+ Y = c.teeLocal("x" + j, c.i64_load32_u(c.getLocal("x"), j * 4));
+ loadX[j] = true;
+ } else Y = c.getLocal("x" + j);
+ return c.i64_mul(X, Y);
+ }
+ let c0 = "c0";
+ let c1 = "c1";
+ let c0_old = "c0_old";
+ let c1_old = "c1_old";
+ for (let k = 0; k < n32 * 2 - 1; k++) {
+ f.addCode(c.setLocal(c0, c.i64_const(0)), c.setLocal(c1, c.i64_const(0)));
+ for (let i = Math.max(0, k - n32 + 1); i < k + 1 >> 1 && i < n32; i++) {
+ const j = k - i;
+ f.addCode(c.setLocal(c0, c.i64_add(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), mulij(i, j))));
+ f.addCode(c.setLocal(c1, c.i64_add(c.getLocal(c1), c.i64_shr_u(c.getLocal(c0), c.i64_const(32)))));
+ }
+ f.addCode(c.setLocal(c0, c.i64_shl(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), c.i64_const(1))));
+ f.addCode(c.setLocal(c1, c.i64_add(c.i64_shl(c.getLocal(c1), c.i64_const(1)), c.i64_shr_u(c.getLocal(c0), c.i64_const(32)))));
+ if (k % 2 == 0) {
+ f.addCode(c.setLocal(c0, c.i64_add(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), mulij(k >> 1, k >> 1))));
+ f.addCode(c.setLocal(c1, c.i64_add(c.getLocal(c1), c.i64_shr_u(c.getLocal(c0), c.i64_const(32)))));
+ }
+ if (k > 0) {
+ f.addCode(c.setLocal(c0, c.i64_add(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), c.i64_and(c.getLocal(c0_old), c.i64_const(4294967295)))));
+ f.addCode(c.setLocal(c1, c.i64_add(c.i64_add(c.getLocal(c1), c.i64_shr_u(c.getLocal(c0), c.i64_const(32))), c.getLocal(c1_old))));
+ }
+ f.addCode(c.i64_store32(c.getLocal("r"), k * 4, c.getLocal(c0)));
+ f.addCode(c.setLocal(c0_old, c.getLocal(c1)), c.setLocal(c1_old, c.i64_shr_u(c.getLocal(c0_old), c.i64_const(32))));
+ }
+ f.addCode(c.i64_store32(c.getLocal("r"), n32 * 4 * 2 - 4, c.getLocal(c0_old)));
+ }
+ function buildSquareOld() {
+ const f = module.addFunction(prefix + "_squareOld");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r")));
+ }
+ function _buildMul1() {
+ const f = module.addFunction(prefix + "__mul1");
+ f.addParam("px", "i32");
+ f.addParam("y", "i64");
+ f.addParam("pr", "i32");
+ f.addLocal("c", "i64");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("c", c.i64_mul(c.i64_load32_u(c.getLocal("px"), 0, 0), c.getLocal("y"))));
+ f.addCode(c.i64_store32(c.getLocal("pr"), 0, 0, c.getLocal("c")));
+ for (let i = 1; i < n32; i++) {
+ f.addCode(c.setLocal("c", c.i64_add(c.i64_mul(c.i64_load32_u(c.getLocal("px"), 4 * i, 0), c.getLocal("y")), c.i64_shr_u(c.getLocal("c"), c.i64_const(32)))));
+ f.addCode(c.i64_store32(c.getLocal("pr"), i * 4, 0, c.getLocal("c")));
+ }
+ }
+ function _buildAdd1() {
+ const f = module.addFunction(prefix + "__add1");
+ f.addParam("x", "i32");
+ f.addParam("y", "i64");
+ f.addLocal("c", "i64");
+ f.addLocal("px", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("px", c.getLocal("x")));
+ f.addCode(c.setLocal("c", c.i64_add(c.i64_load32_u(c.getLocal("px"), 0, 0), c.getLocal("y"))));
+ f.addCode(c.i64_store32(c.getLocal("px"), 0, 0, c.getLocal("c")));
+ f.addCode(c.setLocal("c", c.i64_shr_u(c.getLocal("c"), c.i64_const(32))));
+ f.addCode(c.block(c.loop(c.br_if(1, c.i64_eqz(c.getLocal("c"))), c.setLocal("px", c.i32_add(c.getLocal("px"), c.i32_const(4))), c.setLocal("c", c.i64_add(c.i64_load32_u(c.getLocal("px"), 0, 0), c.getLocal("c"))), c.i64_store32(c.getLocal("px"), 0, 0, c.getLocal("c")), c.setLocal("c", c.i64_shr_u(c.getLocal("c"), c.i64_const(32))), c.br(0))));
+ }
+ function buildDiv() {
+ _buildMul1();
+ _buildAdd1();
+ const f = module.addFunction(prefix + "_div");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("c", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("rr", "i32");
+ f.addLocal("cc", "i32");
+ f.addLocal("eX", "i32");
+ f.addLocal("eY", "i32");
+ f.addLocal("sy", "i64");
+ f.addLocal("sx", "i64");
+ f.addLocal("ec", "i32");
+ const c = f.getCodeBuilder();
+ const Y = c.i32_const(module.alloc(n8));
+ const Caux = c.i32_const(module.alloc(n8));
+ const Raux = c.i32_const(module.alloc(n8));
+ const C = c.getLocal("cc");
+ const R = c.getLocal("rr");
+ const pr1 = module.alloc(n8 * 2);
+ const R1 = c.i32_const(pr1);
+ const R2 = c.i32_const(pr1 + n8);
+ f.addCode(c.if(c.getLocal("c"), c.setLocal("cc", c.getLocal("c")), c.setLocal("cc", Caux)));
+ f.addCode(c.if(c.getLocal("r"), c.setLocal("rr", c.getLocal("r")), c.setLocal("rr", Raux)));
+ f.addCode(c.call(prefix + "_copy", c.getLocal("x"), R));
+ f.addCode(c.call(prefix + "_copy", c.getLocal("y"), Y));
+ f.addCode(c.call(prefix + "_zero", C));
+ f.addCode(c.call(prefix + "_zero", R1));
+ f.addCode(c.setLocal("eX", c.i32_const(n8 - 1)));
+ f.addCode(c.setLocal("eY", c.i32_const(n8 - 1)));
+ f.addCode(c.block(c.loop(c.br_if(1, c.i32_or(c.i32_load8_u(c.i32_add(Y, c.getLocal("eY")), 0, 0), c.i32_eq(c.getLocal("eY"), c.i32_const(3)))), c.setLocal("eY", c.i32_sub(c.getLocal("eY"), c.i32_const(1))), c.br(0))));
+ f.addCode(c.setLocal("sy", c.i64_add(c.i64_load32_u(c.i32_sub(c.i32_add(Y, c.getLocal("eY")), c.i32_const(3)), 0, 0), c.i64_const(1))));
+ f.addCode(c.if(c.i64_eq(c.getLocal("sy"), c.i64_const(1)), c.drop(c.i64_div_u(c.i64_const(0), c.i64_const(0)))));
+ f.addCode(c.block(c.loop(c.block(c.loop(c.br_if(1, c.i32_or(c.i32_load8_u(c.i32_add(R, c.getLocal("eX")), 0, 0), c.i32_eq(c.getLocal("eX"), c.i32_const(7)))), c.setLocal("eX", c.i32_sub(c.getLocal("eX"), c.i32_const(1))), c.br(0))), c.setLocal("sx", c.i64_load(c.i32_sub(c.i32_add(R, c.getLocal("eX")), c.i32_const(7)), 0, 0)), c.setLocal("sx", c.i64_div_u(c.getLocal("sx"), c.getLocal("sy"))), c.setLocal("ec", c.i32_sub(c.i32_sub(c.getLocal("eX"), c.getLocal("eY")), c.i32_const(4))), c.block(c.loop(c.br_if(1, c.i32_and(c.i64_eqz(c.i64_and(c.getLocal("sx"), c.i64_const("0xFFFFFFFF00000000"))), c.i32_ge_s(c.getLocal("ec"), c.i32_const(0)))), c.setLocal("sx", c.i64_shr_u(c.getLocal("sx"), c.i64_const(8))), c.setLocal("ec", c.i32_add(c.getLocal("ec"), c.i32_const(1))), c.br(0))), c.if(c.i64_eqz(c.getLocal("sx")), [
+ ...c.br_if(2, c.i32_eqz(c.call(prefix + "_gte", R, Y))),
+ ...c.setLocal("sx", c.i64_const(1)),
+ ...c.setLocal("ec", c.i32_const(0))
+ ]), c.call(prefix + "__mul1", Y, c.getLocal("sx"), R2), c.drop(c.call(prefix + "_sub", R, c.i32_sub(R2, c.getLocal("ec")), R)), c.call(prefix + "__add1", c.i32_add(C, c.getLocal("ec")), c.getLocal("sx")), c.br(0))));
+ }
+ function buildInverseMod() {
+ const f = module.addFunction(prefix + "_inverseMod");
+ f.addParam("px", "i32");
+ f.addParam("pm", "i32");
+ f.addParam("pr", "i32");
+ f.addLocal("t", "i32");
+ f.addLocal("newt", "i32");
+ f.addLocal("r", "i32");
+ f.addLocal("qq", "i32");
+ f.addLocal("qr", "i32");
+ f.addLocal("newr", "i32");
+ f.addLocal("swp", "i32");
+ f.addLocal("x", "i32");
+ f.addLocal("signt", "i32");
+ f.addLocal("signnewt", "i32");
+ f.addLocal("signx", "i32");
+ const c = f.getCodeBuilder();
+ const aux1 = c.i32_const(module.alloc(n8));
+ const aux2 = c.i32_const(module.alloc(n8));
+ const aux3 = c.i32_const(module.alloc(n8));
+ const aux4 = c.i32_const(module.alloc(n8));
+ const aux5 = c.i32_const(module.alloc(n8));
+ const aux6 = c.i32_const(module.alloc(n8));
+ const mulBuff = c.i32_const(module.alloc(n8 * 2));
+ const aux7 = c.i32_const(module.alloc(n8));
+ f.addCode(c.setLocal("t", aux1), c.call(prefix + "_zero", aux1), c.setLocal("signt", c.i32_const(0)));
+ f.addCode(c.setLocal("r", aux2), c.call(prefix + "_copy", c.getLocal("pm"), aux2));
+ f.addCode(c.setLocal("newt", aux3), c.call(prefix + "_one", aux3), c.setLocal("signnewt", c.i32_const(0)));
+ f.addCode(c.setLocal("newr", aux4), c.call(prefix + "_copy", c.getLocal("px"), aux4));
+ f.addCode(c.setLocal("qq", aux5));
+ f.addCode(c.setLocal("qr", aux6));
+ f.addCode(c.setLocal("x", aux7));
+ f.addCode(c.block(c.loop(c.br_if(1, c.call(prefix + "_isZero", c.getLocal("newr"))), c.call(prefix + "_div", c.getLocal("r"), c.getLocal("newr"), c.getLocal("qq"), c.getLocal("qr")), c.call(prefix + "_mul", c.getLocal("qq"), c.getLocal("newt"), mulBuff), c.if(c.getLocal("signt"), c.if(c.getLocal("signnewt"), c.if(c.call(prefix + "_gte", mulBuff, c.getLocal("t")), [...c.drop(c.call(prefix + "_sub", mulBuff, c.getLocal("t"), c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(0))], [...c.drop(c.call(prefix + "_sub", c.getLocal("t"), mulBuff, c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(1))]), [...c.drop(c.call(prefix + "_add", mulBuff, c.getLocal("t"), c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(1))]), c.if(c.getLocal("signnewt"), [...c.drop(c.call(prefix + "_add", mulBuff, c.getLocal("t"), c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(0))], c.if(c.call(prefix + "_gte", c.getLocal("t"), mulBuff), [...c.drop(c.call(prefix + "_sub", c.getLocal("t"), mulBuff, c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(0))], [...c.drop(c.call(prefix + "_sub", mulBuff, c.getLocal("t"), c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(1))]))), c.setLocal("swp", c.getLocal("t")), c.setLocal("t", c.getLocal("newt")), c.setLocal("newt", c.getLocal("x")), c.setLocal("x", c.getLocal("swp")), c.setLocal("signt", c.getLocal("signnewt")), c.setLocal("signnewt", c.getLocal("signx")), c.setLocal("swp", c.getLocal("r")), c.setLocal("r", c.getLocal("newr")), c.setLocal("newr", c.getLocal("qr")), c.setLocal("qr", c.getLocal("swp")), c.br(0))));
+ f.addCode(c.if(c.getLocal("signt"), c.drop(c.call(prefix + "_sub", c.getLocal("pm"), c.getLocal("t"), c.getLocal("pr"))), c.call(prefix + "_copy", c.getLocal("t"), c.getLocal("pr"))));
+ }
+ buildCopy();
+ buildZero();
+ buildIsZero();
+ buildOne();
+ buildEq();
+ buildGte();
+ buildAdd();
+ buildSub();
+ buildMul();
+ buildSquare();
+ buildSquareOld();
+ buildDiv();
+ buildInverseMod();
+ module.exportFunction(prefix + "_copy");
+ module.exportFunction(prefix + "_zero");
+ module.exportFunction(prefix + "_one");
+ module.exportFunction(prefix + "_isZero");
+ module.exportFunction(prefix + "_eq");
+ module.exportFunction(prefix + "_gte");
+ module.exportFunction(prefix + "_add");
+ module.exportFunction(prefix + "_sub");
+ module.exportFunction(prefix + "_mul");
+ module.exportFunction(prefix + "_square");
+ module.exportFunction(prefix + "_squareOld");
+ module.exportFunction(prefix + "_div");
+ module.exportFunction(prefix + "_inverseMod");
+ return prefix;
+}
+//#endregion
+//#region src/build_timesscalar.js
+function buildTimesScalar(module, fnName, elementLen, opAB, opAA, opCopy, opInit) {
+ const f = module.addFunction(fnName);
+ f.addParam("base", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLength", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("b", "i32");
+ const c = f.getCodeBuilder();
+ const aux = c.i32_const(module.alloc(elementLen));
+ f.addCode(c.if(c.i32_eqz(c.getLocal("scalarLength")), [...c.call(opInit, c.getLocal("r")), ...c.ret([])]));
+ f.addCode(c.call(opCopy, c.getLocal("base"), aux));
+ f.addCode(c.call(opInit, c.getLocal("r")));
+ f.addCode(c.setLocal("i", c.getLocal("scalarLength")));
+ f.addCode(c.block(c.loop(c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.setLocal("b", c.i32_load8_u(c.i32_add(c.getLocal("scalar"), c.getLocal("i")))), ...innerLoop(), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.br(0))));
+ function innerLoop() {
+ const code = [];
+ for (let i = 0; i < 8; i++) code.push(...c.call(opAA, c.getLocal("r"), c.getLocal("r")), ...c.if(c.i32_ge_u(c.getLocal("b"), c.i32_const(128 >> i)), [...c.setLocal("b", c.i32_sub(c.getLocal("b"), c.i32_const(128 >> i))), ...c.call(opAB, c.getLocal("r"), aux, c.getLocal("r"))]));
+ return code;
+ }
+}
+//#endregion
+//#region src/build_batchinverse.js
+var build_batchinverse_default = buildBatchInverse;
+function buildBatchInverse(module, prefix) {
+ const n8 = module.modules[prefix].n64 * 8;
+ const f = module.addFunction(prefix + "_batchInverse");
+ f.addParam("pIn", "i32");
+ f.addParam("inStep", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pOut", "i32");
+ f.addParam("outStep", "i32");
+ f.addLocal("itAux", "i32");
+ f.addLocal("itIn", "i32");
+ f.addLocal("itOut", "i32");
+ f.addLocal("i", "i32");
+ const c = f.getCodeBuilder();
+ const AUX = c.i32_const(module.alloc(n8));
+ f.addCode(c.setLocal("itAux", c.i32_load(c.i32_const(0))), c.i32_store(c.i32_const(0), c.i32_add(c.getLocal("itAux"), c.i32_mul(c.i32_add(c.getLocal("n"), c.i32_const(1)), c.i32_const(n8)))));
+ f.addCode(c.call(prefix + "_one", c.getLocal("itAux")), c.setLocal("itIn", c.getLocal("pIn")), c.setLocal("itAux", c.i32_add(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.if(c.call(prefix + "_isZero", c.getLocal("itIn")), c.call(prefix + "_copy", c.i32_sub(c.getLocal("itAux"), c.i32_const(n8)), c.getLocal("itAux")), c.call(prefix + "_mul", c.getLocal("itIn"), c.i32_sub(c.getLocal("itAux"), c.i32_const(n8)), c.getLocal("itAux"))), c.setLocal("itIn", c.i32_add(c.getLocal("itIn"), c.getLocal("inStep"))), c.setLocal("itAux", c.i32_add(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.setLocal("itIn", c.i32_sub(c.getLocal("itIn"), c.getLocal("inStep"))), c.setLocal("itAux", c.i32_sub(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("itOut", c.i32_add(c.getLocal("pOut"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.getLocal("outStep")))), c.call(prefix + "_inverse", c.getLocal("itAux"), c.getLocal("itAux")), c.block(c.loop(c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.if(c.call(prefix + "_isZero", c.getLocal("itIn")), [...c.call(prefix + "_copy", c.getLocal("itAux"), c.i32_sub(c.getLocal("itAux"), c.i32_const(n8))), ...c.call(prefix + "_zero", c.getLocal("itOut"))], [
+ ...c.call(prefix + "_copy", c.i32_sub(c.getLocal("itAux"), c.i32_const(n8)), AUX),
+ ...c.call(prefix + "_mul", c.getLocal("itAux"), c.getLocal("itIn"), c.i32_sub(c.getLocal("itAux"), c.i32_const(n8))),
+ ...c.call(prefix + "_mul", c.getLocal("itAux"), AUX, c.getLocal("itOut"))
+ ]), c.setLocal("itIn", c.i32_sub(c.getLocal("itIn"), c.getLocal("inStep"))), c.setLocal("itOut", c.i32_sub(c.getLocal("itOut"), c.getLocal("outStep"))), c.setLocal("itAux", c.i32_sub(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ f.addCode(c.i32_store(c.i32_const(0), c.getLocal("itAux")));
+}
+//#endregion
+//#region src/build_batchconvertion.js
+var build_batchconvertion_default = buildBatchConvertion$1;
+function buildBatchConvertion$1(module, fnName, internalFnName, sizeIn, sizeOut, reverse) {
+ if (typeof reverse === "undefined") if (sizeIn < sizeOut) reverse = true;
+ else reverse = false;
+ const f = module.addFunction(fnName);
+ f.addParam("pIn", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pOut", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("itIn", "i32");
+ f.addLocal("itOut", "i32");
+ const c = f.getCodeBuilder();
+ if (reverse) f.addCode(c.setLocal("itIn", c.i32_add(c.getLocal("pIn"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeIn)))), c.setLocal("itOut", c.i32_add(c.getLocal("pOut"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeOut)))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(internalFnName, c.getLocal("itIn"), c.getLocal("itOut")), c.setLocal("itIn", c.i32_sub(c.getLocal("itIn"), c.i32_const(sizeIn))), c.setLocal("itOut", c.i32_sub(c.getLocal("itOut"), c.i32_const(sizeOut))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ else f.addCode(c.setLocal("itIn", c.getLocal("pIn")), c.setLocal("itOut", c.getLocal("pOut")), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(internalFnName, c.getLocal("itIn"), c.getLocal("itOut")), c.setLocal("itIn", c.i32_add(c.getLocal("itIn"), c.i32_const(sizeIn))), c.setLocal("itOut", c.i32_add(c.getLocal("itOut"), c.i32_const(sizeOut))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+}
+//#endregion
+//#region src/build_batchop.js
+var build_batchop_default = buildBatchConvertion;
+function buildBatchConvertion(module, fnName, internalFnName, sizeIn, sizeOut, reverse) {
+ if (typeof reverse === "undefined") if (sizeIn < sizeOut) reverse = true;
+ else reverse = false;
+ const f = module.addFunction(fnName);
+ f.addParam("pIn1", "i32");
+ f.addParam("pIn2", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pOut", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("itIn1", "i32");
+ f.addLocal("itIn2", "i32");
+ f.addLocal("itOut", "i32");
+ const c = f.getCodeBuilder();
+ if (reverse) f.addCode(c.setLocal("itIn1", c.i32_add(c.getLocal("pIn1"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeIn)))), c.setLocal("itIn2", c.i32_add(c.getLocal("pIn2"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeIn)))), c.setLocal("itOut", c.i32_add(c.getLocal("pOut"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeOut)))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(internalFnName, c.getLocal("itIn1"), c.getLocal("itIn2"), c.getLocal("itOut")), c.setLocal("itIn1", c.i32_sub(c.getLocal("itIn1"), c.i32_const(sizeIn))), c.setLocal("itIn2", c.i32_sub(c.getLocal("itIn2"), c.i32_const(sizeIn))), c.setLocal("itOut", c.i32_sub(c.getLocal("itOut"), c.i32_const(sizeOut))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ else f.addCode(c.setLocal("itIn1", c.getLocal("pIn1")), c.setLocal("itIn2", c.getLocal("pIn2")), c.setLocal("itOut", c.getLocal("pOut")), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(internalFnName, c.getLocal("itIn1"), c.getLocal("itIn2"), c.getLocal("itOut")), c.setLocal("itIn1", c.i32_add(c.getLocal("itIn1"), c.i32_const(sizeIn))), c.setLocal("itIn2", c.i32_add(c.getLocal("itIn2"), c.i32_const(sizeIn))), c.setLocal("itOut", c.i32_add(c.getLocal("itOut"), c.i32_const(sizeOut))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+}
+//#endregion
+//#region src/bigint.js
+function compare(a, b) {
+ return a === b ? 0 : a > b ? 1 : -1;
+}
+function square(n) {
+ return n * n;
+}
+function isOdd(n) {
+ return n % 2n !== 0n;
+}
+function isEven(n) {
+ return n % 2n === 0n;
+}
+function isNegative(n) {
+ return n < 0n;
+}
+function isPositive(n) {
+ return n > 0n;
+}
+function bitLength(n) {
+ if (isNegative(n)) return n.toString(2).length - 1;
+ else return n.toString(2).length;
+}
+function abs(n) {
+ return n < 0n ? -n : n;
+}
+function isUnit(n) {
+ return abs(n) === 1n;
+}
+function modInv(a, n) {
+ var t = 0n, newT = 1n, r = n, newR = abs(a), q, lastT, lastR;
+ while (newR !== 0n) {
+ q = r / newR;
+ lastT = t;
+ lastR = r;
+ t = newT;
+ r = newR;
+ newT = lastT - q * newT;
+ newR = lastR - q * newR;
+ }
+ if (!isUnit(r)) throw new Error(a.toString() + " and " + n.toString() + " are not co-prime");
+ if (compare(t, 0n) === -1) t = t + n;
+ if (isNegative(a)) return -t;
+ return t;
+}
+function modPow(n, exp, mod) {
+ if (mod === 0n) throw new Error("Cannot take modPow with modulus 0");
+ var r = 1n, base = n % mod;
+ if (isNegative(exp)) {
+ exp = exp * -1n;
+ base = modInv(base, mod);
+ }
+ while (isPositive(exp)) {
+ if (base === 0n) return 0n;
+ if (isOdd(exp)) r = r * base % mod;
+ exp = exp / 2n;
+ base = square(base) % mod;
+ }
+ return r;
+}
+function compareAbs(a, b) {
+ a = a >= 0n ? a : -a;
+ b = b >= 0n ? b : -b;
+ return a === b ? 0 : a > b ? 1 : -1;
+}
+function isDivisibleBy(a, n) {
+ if (n === 0n) return false;
+ if (isUnit(n)) return true;
+ if (compareAbs(n, 2n) === 0) return isEven(a);
+ return a % n === 0n;
+}
+function isBasicPrime(v) {
+ var n = abs(v);
+ if (isUnit(n)) return false;
+ if (n === 2n || n === 3n || n === 5n) return true;
+ if (isEven(n) || isDivisibleBy(n, 3n) || isDivisibleBy(n, 5n)) return false;
+ if (n < 49n) return true;
+}
+function prev(n) {
+ return n - 1n;
+}
+function isKnownPrime(v) {
+ switch (abs(v)) {
+ case 21888242871839275222246405745257275088696311157297823662689037894645226208583n:
+ case 21888242871839275222246405745257275088548364400416034343698204186575808495617n:
+ case 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787n:
+ case 52435875175126190479447740508185965837690552500527637822603658699938581184513n:
+ case 41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160001n: return true;
+ }
+ return false;
+}
+function millerRabinTest(n, a) {
+ var nPrev = prev(n), b = nPrev, r = 0, d, i, x;
+ while (isEven(b)) b = b / 2n, r++;
+ next: for (i = 0; i < a.length; i++) {
+ if (n < a[i]) continue;
+ x = modPow(BigInt(a[i]), b, n);
+ if (isUnit(x) || x === nPrev) continue;
+ for (d = r - 1; d != 0; d--) {
+ x = square(x) % n;
+ if (isUnit(x)) return false;
+ if (x === nPrev) continue next;
+ }
+ return false;
+ }
+ return true;
+}
+function isPrime(p) {
+ let isPrime;
+ isPrime = isKnownPrime(p);
+ if (isPrime !== void 0) return isPrime;
+ isPrime = isBasicPrime(p);
+ if (isPrime !== void 0) return isPrime;
+ var n = abs(p);
+ var bits = bitLength(n);
+ if (bits <= 64) return millerRabinTest(n, [
+ 2,
+ 3,
+ 5,
+ 7,
+ 11,
+ 13,
+ 17,
+ 19,
+ 23,
+ 29,
+ 31,
+ 37
+ ]);
+ var logN = Math.log(2) * Number(bits);
+ var t = Math.ceil(logN);
+ for (var a = [], i = 0; i < t; i++) a.push(BigInt(i + 2));
+ return millerRabinTest(n, a);
+}
+//#endregion
+//#region src/build_f1m.js
+function buildF1m(module, _q, _prefix, _intPrefix) {
+ const q = BigInt(_q);
+ const n64 = Math.floor((bitLength(q - 1n) - 1) / 64) + 1;
+ const n32 = n64 * 2;
+ const n8 = n64 * 8;
+ const prefix = _prefix || "f1m";
+ if (module.modules[prefix]) return prefix;
+ const intPrefix = buildInt(module, n64, _intPrefix);
+ const pq = module.alloc(n8, bigInt2BytesLE(q, n8));
+ const pR2 = module.alloc(bigInt2BytesLE(square(1n << BigInt(n64 * 64)) % q, n8));
+ const pOne = module.alloc(bigInt2BytesLE((1n << BigInt(n64 * 64)) % q, n8));
+ const pZero = module.alloc(bigInt2BytesLE(0n, n8));
+ const _minusOne = q - 1n;
+ const _e = _minusOne >> 1n;
+ const pe = module.alloc(n8, bigInt2BytesLE(_e, n8));
+ const _ePlusOne = _e + 1n;
+ const pePlusOne = module.alloc(n8, bigInt2BytesLE(_ePlusOne, n8));
+ module.modules[prefix] = {
+ pq,
+ pR2,
+ n64,
+ q,
+ pOne,
+ pZero,
+ pePlusOne
+ };
+ function buildOne() {
+ const f = module.addFunction(prefix + "_one");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(intPrefix + "_copy", c.i32_const(pOne), c.getLocal("pr")));
+ }
+ function buildAdd() {
+ const f = module.addFunction(prefix + "_add");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.if(c.call(intPrefix + "_add", c.getLocal("x"), c.getLocal("y"), c.getLocal("r")), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), c.if(c.call(intPrefix + "_gte", c.getLocal("r"), c.i32_const(pq)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))))));
+ }
+ function buildSub() {
+ const f = module.addFunction(prefix + "_sub");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.if(c.call(intPrefix + "_sub", c.getLocal("x"), c.getLocal("y"), c.getLocal("r")), c.drop(c.call(intPrefix + "_add", c.getLocal("r"), c.i32_const(pq), c.getLocal("r")))));
+ }
+ function buildNeg() {
+ const f = module.addFunction(prefix + "_neg");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefix + "_sub", c.i32_const(pZero), c.getLocal("x"), c.getLocal("r")));
+ }
+ function buildIsNegative() {
+ const f = module.addFunction(prefix + "_isNegative");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const AUX = c.i32_const(module.alloc(n8));
+ f.addCode(c.call(prefix + "_fromMontgomery", c.getLocal("x"), AUX), c.call(intPrefix + "_gte", AUX, c.i32_const(pePlusOne)));
+ }
+ function buildSign() {
+ const f = module.addFunction(prefix + "_sign");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const AUX = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(intPrefix + "_isZero", c.getLocal("x")), c.ret(c.i32_const(0))), c.call(prefix + "_fromMontgomery", c.getLocal("x"), AUX), c.if(c.call(intPrefix + "_gte", AUX, c.i32_const(pePlusOne)), c.ret(c.i32_const(-1))), c.ret(c.i32_const(1)));
+ }
+ function buildMReduct() {
+ const carries = module.alloc(n32 * n32 * 8);
+ const f = module.addFunction(prefix + "_mReduct");
+ f.addParam("t", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("np32", "i64");
+ f.addLocal("c", "i64");
+ f.addLocal("m", "i64");
+ const c = f.getCodeBuilder();
+ const np32 = Number(4294967296n - modInv(q, 4294967296n));
+ f.addCode(c.setLocal("np32", c.i64_const(np32)));
+ for (let i = 0; i < n32; i++) {
+ f.addCode(c.setLocal("c", c.i64_const(0)));
+ f.addCode(c.setLocal("m", c.i64_and(c.i64_mul(c.i64_load32_u(c.getLocal("t"), i * 4), c.getLocal("np32")), c.i64_const("0xFFFFFFFF"))));
+ for (let j = 0; j < n32; j++) {
+ f.addCode(c.setLocal("c", c.i64_add(c.i64_add(c.i64_load32_u(c.getLocal("t"), (i + j) * 4), c.i64_shr_u(c.getLocal("c"), c.i64_const(32))), c.i64_mul(c.i64_load32_u(c.i32_const(pq), j * 4), c.getLocal("m")))));
+ f.addCode(c.i64_store32(c.getLocal("t"), (i + j) * 4, c.getLocal("c")));
+ }
+ f.addCode(c.i64_store32(c.i32_const(carries), i * 4, c.i64_shr_u(c.getLocal("c"), c.i64_const(32))));
+ }
+ f.addCode(c.call(prefix + "_add", c.i32_const(carries), c.i32_add(c.getLocal("t"), c.i32_const(n32 * 4)), c.getLocal("r")));
+ }
+ function buildMul() {
+ const f = module.addFunction(prefix + "_mul");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("yi", "i64");
+ f.addLocal("m", "i64");
+ f.addLocal("cc", "i64");
+ f.addLocal("s", "i64");
+ for (let i = 0; i < n32; i++) f.addLocal("x" + i, "i64");
+ for (let j = 0; j <= n32 + 1; j++) f.addLocal("t" + j, "i64");
+ const c = f.getCodeBuilder();
+ const np32 = Number(4294967296n - modInv(q, 4294967296n));
+ const qLimbs = [];
+ for (let j = 0; j < n32; j++) qLimbs.push(Number(q >> BigInt(32 * j) & 4294967295n));
+ const MASK32 = 4294967295;
+ const noCarry = q < 1n << BigInt(32 * n32 - 1);
+ for (let i = 0; i < n32; i++) f.addCode(c.setLocal("x" + i, c.i64_load32_u(c.getLocal("x"), i * 4)));
+ for (let i = 0; i < n32; i++) {
+ f.addCode(c.setLocal("yi", c.i64_load32_u(c.getLocal("y"), i * 4)));
+ f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t0"), c.i64_mul(c.getLocal("x0"), c.getLocal("yi")))), c.setLocal("t0", c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32))));
+ for (let j = 1; j < n32; j++) f.addCode(c.setLocal("s", c.i64_add(c.i64_add(c.getLocal("t" + j), c.i64_mul(c.getLocal("x" + j), c.getLocal("yi"))), c.getLocal("cc"))), c.setLocal("t" + j, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32))));
+ if (noCarry) f.addCode(c.setLocal("t" + n32, c.getLocal("cc")));
+ else f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + n32), c.getLocal("cc"))), c.setLocal("t" + n32, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("t" + (n32 + 1), c.i64_add(c.getLocal("t" + (n32 + 1)), c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))));
+ f.addCode(c.setLocal("m", c.i64_and(c.i64_mul(c.getLocal("t0"), c.i64_const(np32)), c.i64_const(MASK32))), c.setLocal("s", c.i64_add(c.getLocal("t0"), c.i64_mul(c.getLocal("m"), c.i64_const(qLimbs[0])))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32))));
+ for (let j = 1; j < n32; j++) f.addCode(c.setLocal("s", c.i64_add(c.i64_add(c.getLocal("t" + j), c.i64_mul(c.getLocal("m"), c.i64_const(qLimbs[j]))), c.getLocal("cc"))), c.setLocal("t" + (j - 1), c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32))));
+ if (noCarry) f.addCode(c.setLocal("t" + (n32 - 1), c.i64_add(c.getLocal("t" + n32), c.getLocal("cc"))));
+ else f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + n32), c.getLocal("cc"))), c.setLocal("t" + (n32 - 1), c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("t" + n32, c.i64_add(c.getLocal("t" + (n32 + 1)), c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))), c.setLocal("t" + (n32 + 1), c.i64_const(0)));
+ }
+ for (let j = 0; j < n32; j++) f.addCode(c.i64_store32(c.getLocal("r"), j * 4, c.getLocal("t" + j)));
+ if (noCarry) f.addCode(c.if(c.call(intPrefix + "_gte", c.getLocal("r"), c.i32_const(pq)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r")))));
+ else f.addCode(c.if(c.i32_wrap_i64(c.getLocal("t" + n32)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), c.if(c.call(intPrefix + "_gte", c.getLocal("r"), c.i32_const(pq)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))))));
+ }
+ function buildSquare() {
+ const f = module.addFunction(prefix + "_square");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("m", "i64");
+ f.addLocal("cc", "i64");
+ f.addLocal("s", "i64");
+ f.addLocal("p", "i64");
+ for (let i = 0; i < n32; i++) f.addLocal("x" + i, "i64");
+ for (let j = 0; j <= n32 + 1; j++) f.addLocal("t" + j, "i64");
+ const c = f.getCodeBuilder();
+ const np32 = Number(4294967296n - modInv(q, 4294967296n));
+ const qLimbs = [];
+ for (let j = 0; j < n32; j++) qLimbs.push(Number(q >> BigInt(32 * j) & 4294967295n));
+ const MASK32 = 4294967295;
+ for (let i = 0; i < n32; i++) f.addCode(c.setLocal("x" + i, c.i64_load32_u(c.getLocal("x"), i * 4)));
+ for (let i = 0; i < n32; i++) {
+ f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + i), c.i64_mul(c.getLocal("x" + i), c.getLocal("x" + i)))), c.setLocal("t" + i, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32))));
+ for (let j = i + 1; j < n32; j++) f.addCode(c.setLocal("p", c.i64_mul(c.getLocal("x" + j), c.getLocal("x" + i))), c.setLocal("s", c.i64_add(c.i64_add(c.getLocal("t" + j), c.i64_shl(c.i64_and(c.getLocal("p"), c.i64_const(MASK32)), c.i64_const(1))), c.getLocal("cc"))), c.setLocal("t" + j, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_add(c.i64_shr_u(c.getLocal("s"), c.i64_const(32)), c.i64_shl(c.i64_shr_u(c.getLocal("p"), c.i64_const(32)), c.i64_const(1)))));
+ f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + n32), c.getLocal("cc"))), c.setLocal("t" + n32, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("t" + (n32 + 1), c.i64_add(c.getLocal("t" + (n32 + 1)), c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))));
+ f.addCode(c.setLocal("m", c.i64_and(c.i64_mul(c.getLocal("t0"), c.i64_const(np32)), c.i64_const(MASK32))), c.setLocal("s", c.i64_add(c.getLocal("t0"), c.i64_mul(c.getLocal("m"), c.i64_const(qLimbs[0])))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32))));
+ for (let j = 1; j < n32; j++) f.addCode(c.setLocal("s", c.i64_add(c.i64_add(c.getLocal("t" + j), c.i64_mul(c.getLocal("m"), c.i64_const(qLimbs[j]))), c.getLocal("cc"))), c.setLocal("t" + (j - 1), c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32))));
+ f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + n32), c.getLocal("cc"))), c.setLocal("t" + (n32 - 1), c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("t" + n32, c.i64_add(c.getLocal("t" + (n32 + 1)), c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))), c.setLocal("t" + (n32 + 1), c.i64_const(0)));
+ }
+ for (let j = 0; j < n32; j++) f.addCode(c.i64_store32(c.getLocal("r"), j * 4, c.getLocal("t" + j)));
+ f.addCode(c.if(c.i32_wrap_i64(c.getLocal("t" + n32)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), c.if(c.call(intPrefix + "_gte", c.getLocal("r"), c.i32_const(pq)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))))));
+ }
+ function buildSquareOld() {
+ const f = module.addFunction(prefix + "_squareOld");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r")));
+ }
+ function buildToMontgomery() {
+ const f = module.addFunction(prefix + "_toMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.i32_const(pR2), c.getLocal("r")));
+ }
+ function buildFromMontgomery() {
+ const pAux2 = module.alloc(n8 * 2);
+ const f = module.addFunction(prefix + "_fromMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(intPrefix + "_copy", c.getLocal("x"), c.i32_const(pAux2)));
+ f.addCode(c.call(intPrefix + "_zero", c.i32_const(pAux2 + n8)));
+ f.addCode(c.call(prefix + "_mReduct", c.i32_const(pAux2), c.getLocal("r")));
+ }
+ function buildInverse() {
+ const f = module.addFunction(prefix + "_inverse");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefix + "_fromMontgomery", c.getLocal("x"), c.getLocal("r")));
+ f.addCode(c.call(intPrefix + "_inverseMod", c.getLocal("r"), c.i32_const(pq), c.getLocal("r")));
+ f.addCode(c.call(prefix + "_toMontgomery", c.getLocal("r"), c.getLocal("r")));
+ }
+ let _nqr = 2n;
+ if (isPrime(q)) while (modPow(_nqr, _e, q) !== _minusOne) _nqr = _nqr + 1n;
+ let s2 = 0;
+ let _t = _minusOne;
+ while (!isOdd(_t) && _t !== 0n) {
+ s2++;
+ _t = _t >> 1n;
+ }
+ const pt = module.alloc(n8, bigInt2BytesLE(_t, n8));
+ const _nqrToT = modPow(_nqr, _t, q);
+ const pNqrToT = module.alloc(bigInt2BytesLE((_nqrToT << BigInt(n64 * 64)) % q, n8));
+ const _tPlusOneOver2 = _t + 1n >> 1n;
+ const ptPlusOneOver2 = module.alloc(n8, bigInt2BytesLE(_tPlusOneOver2, n8));
+ function buildSqrt() {
+ const f = module.addFunction(prefix + "_sqrt");
+ f.addParam("n", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("m", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ const c = f.getCodeBuilder();
+ const ONE = c.i32_const(pOne);
+ const C = c.i32_const(module.alloc(n8));
+ const T = c.i32_const(module.alloc(n8));
+ const R = c.i32_const(module.alloc(n8));
+ const SQ = c.i32_const(module.alloc(n8));
+ const B = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("n")), c.ret(c.call(prefix + "_zero", c.getLocal("r")))), c.setLocal("m", c.i32_const(s2)), c.call(prefix + "_copy", c.i32_const(pNqrToT), C), c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(pt), c.i32_const(n8), T), c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(ptPlusOneOver2), c.i32_const(n8), R), c.block(c.loop(c.br_if(1, c.call(prefix + "_eq", T, ONE)), c.call(prefix + "_square", T, SQ), c.setLocal("i", c.i32_const(1)), c.block(c.loop(c.br_if(1, c.call(prefix + "_eq", SQ, ONE)), c.call(prefix + "_square", SQ, SQ), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.call(prefix + "_copy", C, B), c.setLocal("j", c.i32_sub(c.i32_sub(c.getLocal("m"), c.getLocal("i")), c.i32_const(1))), c.block(c.loop(c.br_if(1, c.i32_eqz(c.getLocal("j"))), c.call(prefix + "_square", B, B), c.setLocal("j", c.i32_sub(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("m", c.getLocal("i")), c.call(prefix + "_square", B, C), c.call(prefix + "_mul", T, C, T), c.call(prefix + "_mul", R, B, R), c.br(0))), c.if(c.call(prefix + "_isNegative", R), c.call(prefix + "_neg", R, c.getLocal("r")), c.call(prefix + "_copy", R, c.getLocal("r"))));
+ }
+ function buildIsSquare() {
+ const f = module.addFunction(prefix + "_isSquare");
+ f.addParam("n", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const ONE = c.i32_const(pOne);
+ const AUX = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("n")), c.ret(c.i32_const(1))), c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(pe), c.i32_const(n8), AUX), c.call(prefix + "_eq", AUX, ONE));
+ }
+ function buildLoad() {
+ const f = module.addFunction(prefix + "_load");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLen", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("p", "i32");
+ f.addLocal("l", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ const c = f.getCodeBuilder();
+ const R = c.i32_const(module.alloc(n8));
+ const pAux = module.alloc(n8);
+ const AUX = c.i32_const(pAux);
+ f.addCode(c.call(intPrefix + "_zero", c.getLocal("r")), c.setLocal("i", c.i32_const(n8)), c.setLocal("p", c.getLocal("scalar")), c.block(c.loop(c.br_if(1, c.i32_gt_u(c.getLocal("i"), c.getLocal("scalarLen"))), c.if(c.i32_eq(c.getLocal("i"), c.i32_const(n8)), c.call(prefix + "_one", R), c.call(prefix + "_mul", R, c.i32_const(pR2), R)), c.call(prefix + "_mul", c.getLocal("p"), R, AUX), c.call(prefix + "_add", c.getLocal("r"), AUX, c.getLocal("r")), c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(n8))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(n8))), c.br(0))), c.setLocal("l", c.i32_rem_u(c.getLocal("scalarLen"), c.i32_const(n8))), c.if(c.i32_eqz(c.getLocal("l")), c.ret([])), c.call(intPrefix + "_zero", AUX), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("l"))), c.i32_store8(c.getLocal("j"), pAux, c.i32_load8_u(c.getLocal("p"))), c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(1))), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.if(c.i32_eq(c.getLocal("i"), c.i32_const(n8)), c.call(prefix + "_one", R), c.call(prefix + "_mul", R, c.i32_const(pR2), R)), c.call(prefix + "_mul", AUX, R, AUX), c.call(prefix + "_add", c.getLocal("r"), AUX, c.getLocal("r")));
+ }
+ function buildTimesScalar$3() {
+ const f = module.addFunction(prefix + "_timesScalar");
+ f.addParam("x", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLen", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const AUX = c.i32_const(module.alloc(n8));
+ f.addCode(c.call(prefix + "_load", c.getLocal("scalar"), c.getLocal("scalarLen"), AUX), c.call(prefix + "_toMontgomery", AUX, AUX), c.call(prefix + "_mul", c.getLocal("x"), AUX, c.getLocal("r")));
+ }
+ function buildIsOne() {
+ const f = module.addFunction(prefix + "_isOne");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.ret(c.call(intPrefix + "_eq", c.getLocal("x"), c.i32_const(pOne))));
+ }
+ module.exportFunction(intPrefix + "_copy", prefix + "_copy");
+ module.exportFunction(intPrefix + "_zero", prefix + "_zero");
+ module.exportFunction(intPrefix + "_isZero", prefix + "_isZero");
+ module.exportFunction(intPrefix + "_eq", prefix + "_eq");
+ buildIsOne();
+ buildAdd();
+ buildSub();
+ buildNeg();
+ buildMReduct();
+ buildMul();
+ buildSquare();
+ buildSquareOld();
+ buildToMontgomery();
+ buildFromMontgomery();
+ buildIsNegative();
+ buildSign();
+ buildInverse();
+ buildOne();
+ buildLoad();
+ buildTimesScalar$3();
+ build_batchinverse_default(module, prefix);
+ build_batchconvertion_default(module, prefix + "_batchToMontgomery", prefix + "_toMontgomery", n8, n8);
+ build_batchconvertion_default(module, prefix + "_batchFromMontgomery", prefix + "_fromMontgomery", n8, n8);
+ build_batchconvertion_default(module, prefix + "_batchNeg", prefix + "_neg", n8, n8);
+ build_batchop_default(module, prefix + "_batchAdd", prefix + "_add", n8, n8);
+ build_batchop_default(module, prefix + "_batchSub", prefix + "_sub", n8, n8);
+ build_batchop_default(module, prefix + "_batchMul", prefix + "_mul", n8, n8);
+ module.exportFunction(prefix + "_add");
+ module.exportFunction(prefix + "_sub");
+ module.exportFunction(prefix + "_neg");
+ module.exportFunction(prefix + "_isNegative");
+ module.exportFunction(prefix + "_isOne");
+ module.exportFunction(prefix + "_sign");
+ module.exportFunction(prefix + "_mReduct");
+ module.exportFunction(prefix + "_mul");
+ module.exportFunction(prefix + "_square");
+ module.exportFunction(prefix + "_squareOld");
+ module.exportFunction(prefix + "_fromMontgomery");
+ module.exportFunction(prefix + "_toMontgomery");
+ module.exportFunction(prefix + "_inverse");
+ module.exportFunction(prefix + "_one");
+ module.exportFunction(prefix + "_load");
+ module.exportFunction(prefix + "_timesScalar");
+ buildTimesScalar(module, prefix + "_exp", n8, prefix + "_mul", prefix + "_square", intPrefix + "_copy", prefix + "_one");
+ module.exportFunction(prefix + "_exp");
+ module.exportFunction(prefix + "_batchInverse");
+ if (isPrime(q)) {
+ buildSqrt();
+ buildIsSquare();
+ module.exportFunction(prefix + "_sqrt");
+ module.exportFunction(prefix + "_isSquare");
+ }
+ module.exportFunction(prefix + "_batchToMontgomery");
+ module.exportFunction(prefix + "_batchFromMontgomery");
+ return prefix;
+}
+//#endregion
+//#region src/build_f1.js
+function buildF1(module, _q, _prefix, _f1mPrefix, _intPrefix) {
+ const q = BigInt(_q);
+ const n64 = Math.floor((bitLength(q - 1n) - 1) / 64) + 1;
+ const n8 = n64 * 8;
+ const prefix = _prefix || "f1";
+ if (module.modules[prefix]) return prefix;
+ module.modules[prefix] = { n64 };
+ const intPrefix = _intPrefix || "int";
+ const f1mPrefix = buildF1m(module, q, _f1mPrefix, intPrefix);
+ const pR2 = module.modules[f1mPrefix].pR2;
+ const pq = module.modules[f1mPrefix].pq;
+ const pePlusOne = module.modules[f1mPrefix].pePlusOne;
+ function buildMul() {
+ const pAux1 = module.alloc(n8);
+ const f = module.addFunction(prefix + "_mul");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(f1mPrefix + "_mul", c.getLocal("x"), c.getLocal("y"), c.i32_const(pAux1)));
+ f.addCode(c.call(f1mPrefix + "_mul", c.i32_const(pAux1), c.i32_const(pR2), c.getLocal("r")));
+ }
+ function buildSquare() {
+ const f = module.addFunction(prefix + "_square");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r")));
+ }
+ function buildInverse() {
+ const f = module.addFunction(prefix + "_inverse");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(intPrefix + "_inverseMod", c.getLocal("x"), c.i32_const(pq), c.getLocal("r")));
+ }
+ function buildIsNegative() {
+ const f = module.addFunction(prefix + "_isNegative");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(intPrefix + "_gte", c.getLocal("x"), c.i32_const(pePlusOne)));
+ }
+ buildMul();
+ buildSquare();
+ buildInverse();
+ buildIsNegative();
+ module.exportFunction(f1mPrefix + "_add", prefix + "_add");
+ module.exportFunction(f1mPrefix + "_sub", prefix + "_sub");
+ module.exportFunction(f1mPrefix + "_neg", prefix + "_neg");
+ module.exportFunction(prefix + "_mul");
+ module.exportFunction(prefix + "_square");
+ module.exportFunction(prefix + "_inverse");
+ module.exportFunction(prefix + "_isNegative");
+ module.exportFunction(f1mPrefix + "_copy", prefix + "_copy");
+ module.exportFunction(f1mPrefix + "_zero", prefix + "_zero");
+ module.exportFunction(f1mPrefix + "_one", prefix + "_one");
+ module.exportFunction(f1mPrefix + "_isZero", prefix + "_isZero");
+ module.exportFunction(f1mPrefix + "_eq", prefix + "_eq");
+ return prefix;
+}
+//#endregion
+//#region src/build_f2m.js
+function buildF2m(module, mulNonResidueFn, prefix, f1mPrefix) {
+ if (module.modules[prefix]) return prefix;
+ const f1n8 = module.modules[f1mPrefix].n64 * 8;
+ const q = module.modules[f1mPrefix].q;
+ module.modules[prefix] = { n64: module.modules[f1mPrefix].n64 * 2 };
+ function buildAdd() {
+ const f = module.addFunction(prefix + "_add");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_add", x0, y0, r0), c.call(f1mPrefix + "_add", x1, y1, r1));
+ }
+ function buildTimesScalar$2() {
+ const f = module.addFunction(prefix + "_timesScalar");
+ f.addParam("x", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLen", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_timesScalar", x0, c.getLocal("scalar"), c.getLocal("scalarLen"), r0), c.call(f1mPrefix + "_timesScalar", x1, c.getLocal("scalar"), c.getLocal("scalarLen"), r1));
+ }
+ function buildSub() {
+ const f = module.addFunction(prefix + "_sub");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_sub", x0, y0, r0), c.call(f1mPrefix + "_sub", x1, y1, r1));
+ }
+ function buildNeg() {
+ const f = module.addFunction(prefix + "_neg");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_neg", x0, r0), c.call(f1mPrefix + "_neg", x1, r1));
+ }
+ function buildConjugate() {
+ const f = module.addFunction(prefix + "_conjugate");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_copy", x0, r0), c.call(f1mPrefix + "_neg", x1, r1));
+ }
+ function buildIsNegative() {
+ const f = module.addFunction(prefix + "_isNegative");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ f.addCode(c.if(c.call(f1mPrefix + "_isZero", x1), c.ret(c.call(f1mPrefix + "_isNegative", x0))), c.ret(c.call(f1mPrefix + "_isNegative", x1)));
+ }
+ function buildMul() {
+ const f = module.addFunction(prefix + "_mul");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const A = c.i32_const(module.alloc(f1n8));
+ const B = c.i32_const(module.alloc(f1n8));
+ const C = c.i32_const(module.alloc(f1n8));
+ const D = c.i32_const(module.alloc(f1n8));
+ f.addCode(c.call(f1mPrefix + "_mul", x0, y0, A), c.call(f1mPrefix + "_mul", x1, y1, B), c.call(f1mPrefix + "_add", x0, x1, C), c.call(f1mPrefix + "_add", y0, y1, D), c.call(f1mPrefix + "_mul", C, D, C), c.call(mulNonResidueFn, B, r0), c.call(f1mPrefix + "_add", A, r0, r0), c.call(f1mPrefix + "_add", A, B, r1), c.call(f1mPrefix + "_sub", C, r1, r1));
+ }
+ function buildMul1() {
+ const f = module.addFunction(prefix + "_mul1");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y = c.getLocal("y");
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_mul", x0, y, r0), c.call(f1mPrefix + "_mul", x1, y, r1));
+ }
+ function buildSquare() {
+ const f = module.addFunction(prefix + "_square");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const AB = c.i32_const(module.alloc(f1n8));
+ const APB = c.i32_const(module.alloc(f1n8));
+ const APNB = c.i32_const(module.alloc(f1n8));
+ const ABPNAB = c.i32_const(module.alloc(f1n8));
+ f.addCode(c.call(f1mPrefix + "_mul", x0, x1, AB), c.call(f1mPrefix + "_add", x0, x1, APB), c.call(mulNonResidueFn, x1, APNB), c.call(f1mPrefix + "_add", x0, APNB, APNB), c.call(mulNonResidueFn, AB, ABPNAB), c.call(f1mPrefix + "_add", ABPNAB, AB, ABPNAB), c.call(f1mPrefix + "_mul", APB, APNB, r0), c.call(f1mPrefix + "_sub", r0, ABPNAB, r0), c.call(f1mPrefix + "_add", AB, AB, r1));
+ }
+ function buildToMontgomery() {
+ const f = module.addFunction(prefix + "_toMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_toMontgomery", x0, r0), c.call(f1mPrefix + "_toMontgomery", x1, r1));
+ }
+ function buildFromMontgomery() {
+ const f = module.addFunction(prefix + "_fromMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_fromMontgomery", x0, r0), c.call(f1mPrefix + "_fromMontgomery", x1, r1));
+ }
+ function buildCopy() {
+ const f = module.addFunction(prefix + "_copy");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_copy", x0, r0), c.call(f1mPrefix + "_copy", x1, r1));
+ }
+ function buildZero() {
+ const f = module.addFunction(prefix + "_zero");
+ f.addParam("x", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_zero", x0), c.call(f1mPrefix + "_zero", x1));
+ }
+ function buildOne() {
+ const f = module.addFunction(prefix + "_one");
+ f.addParam("x", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ f.addCode(c.call(f1mPrefix + "_one", x0), c.call(f1mPrefix + "_zero", x1));
+ }
+ function buildEq() {
+ const f = module.addFunction(prefix + "_eq");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ f.addCode(c.i32_and(c.call(f1mPrefix + "_eq", x0, y0), c.call(f1mPrefix + "_eq", x1, y1)));
+ }
+ function buildIsZero() {
+ const f = module.addFunction(prefix + "_isZero");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ f.addCode(c.i32_and(c.call(f1mPrefix + "_isZero", x0), c.call(f1mPrefix + "_isZero", x1)));
+ }
+ function buildInverse() {
+ const f = module.addFunction(prefix + "_inverse");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const t0 = c.i32_const(module.alloc(f1n8));
+ const t1 = c.i32_const(module.alloc(f1n8));
+ const t2 = c.i32_const(module.alloc(f1n8));
+ const t3 = c.i32_const(module.alloc(f1n8));
+ f.addCode(c.call(f1mPrefix + "_square", x0, t0), c.call(f1mPrefix + "_square", x1, t1), c.call(mulNonResidueFn, t1, t2), c.call(f1mPrefix + "_sub", t0, t2, t2), c.call(f1mPrefix + "_inverse", t2, t3), c.call(f1mPrefix + "_mul", x0, t3, r0), c.call(f1mPrefix + "_mul", x1, t3, r1), c.call(f1mPrefix + "_neg", r1, r1));
+ }
+ function buildSign() {
+ const f = module.addFunction(prefix + "_sign");
+ f.addParam("x", "i32");
+ f.addLocal("s", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ f.addCode(c.setLocal("s", c.call(f1mPrefix + "_sign", x1)), c.if(c.getLocal("s"), c.ret(c.getLocal("s"))), c.ret(c.call(f1mPrefix + "_sign", x0)));
+ }
+ function buildIsOne() {
+ const f = module.addFunction(prefix + "_isOne");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ f.addCode(c.ret(c.i32_and(c.call(f1mPrefix + "_isOne", x0), c.call(f1mPrefix + "_isZero", x1))));
+ }
+ function buildSqrt() {
+ const f = module.addFunction(prefix + "_sqrt");
+ f.addParam("a", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const e34 = c.i32_const(module.alloc(bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8)));
+ const e12 = c.i32_const(module.alloc(bigInt2BytesLE((BigInt(q || 0) - 1n) / 2n, f1n8)));
+ const a = c.getLocal("a");
+ const a1 = c.i32_const(module.alloc(f1n8 * 2));
+ const alpha = c.i32_const(module.alloc(f1n8 * 2));
+ const a0 = c.i32_const(module.alloc(f1n8 * 2));
+ const pn1 = module.alloc(f1n8 * 2);
+ const n1 = c.i32_const(pn1);
+ const n1a = c.i32_const(pn1);
+ const n1b = c.i32_const(pn1 + f1n8);
+ const x0 = c.i32_const(module.alloc(f1n8 * 2));
+ const b = c.i32_const(module.alloc(f1n8 * 2));
+ f.addCode(c.call(prefix + "_one", n1), c.call(prefix + "_neg", n1, n1), c.call(prefix + "_exp", a, e34, c.i32_const(f1n8), a1), c.call(prefix + "_square", a1, alpha), c.call(prefix + "_mul", a, alpha, alpha), c.call(prefix + "_conjugate", alpha, a0), c.call(prefix + "_mul", a0, alpha, a0), c.if(c.call(prefix + "_eq", a0, n1), c.unreachable()), c.call(prefix + "_mul", a1, a, x0), c.if(c.call(prefix + "_eq", alpha, n1), [
+ ...c.call(f1mPrefix + "_zero", n1a),
+ ...c.call(f1mPrefix + "_one", n1b),
+ ...c.call(prefix + "_mul", n1, x0, c.getLocal("pr"))
+ ], [
+ ...c.call(prefix + "_one", b),
+ ...c.call(prefix + "_add", b, alpha, b),
+ ...c.call(prefix + "_exp", b, e12, c.i32_const(f1n8), b),
+ ...c.call(prefix + "_mul", b, x0, c.getLocal("pr"))
+ ]));
+ }
+ function buildIsSquare() {
+ const f = module.addFunction(prefix + "_isSquare");
+ f.addParam("a", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const e34 = c.i32_const(module.alloc(bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8)));
+ const a = c.getLocal("a");
+ const a1 = c.i32_const(module.alloc(f1n8 * 2));
+ const alpha = c.i32_const(module.alloc(f1n8 * 2));
+ const a0 = c.i32_const(module.alloc(f1n8 * 2));
+ const pn1 = module.alloc(f1n8 * 2);
+ const n1 = c.i32_const(pn1);
+ f.addCode(c.call(prefix + "_one", n1), c.call(prefix + "_neg", n1, n1), c.call(prefix + "_exp", a, e34, c.i32_const(f1n8), a1), c.call(prefix + "_square", a1, alpha), c.call(prefix + "_mul", a, alpha, alpha), c.call(prefix + "_conjugate", alpha, a0), c.call(prefix + "_mul", a0, alpha, a0), c.if(c.call(prefix + "_eq", a0, n1), c.ret(c.i32_const(0))), c.ret(c.i32_const(1)));
+ }
+ buildIsZero();
+ buildIsOne();
+ buildZero();
+ buildOne();
+ buildCopy();
+ buildMul();
+ buildMul1();
+ buildSquare();
+ buildAdd();
+ buildSub();
+ buildNeg();
+ buildConjugate();
+ buildToMontgomery();
+ buildFromMontgomery();
+ buildEq();
+ buildInverse();
+ buildTimesScalar$2();
+ buildSign();
+ buildIsNegative();
+ module.exportFunction(prefix + "_isZero");
+ module.exportFunction(prefix + "_isOne");
+ module.exportFunction(prefix + "_zero");
+ module.exportFunction(prefix + "_one");
+ module.exportFunction(prefix + "_copy");
+ module.exportFunction(prefix + "_mul");
+ module.exportFunction(prefix + "_mul1");
+ module.exportFunction(prefix + "_square");
+ module.exportFunction(prefix + "_add");
+ module.exportFunction(prefix + "_sub");
+ module.exportFunction(prefix + "_neg");
+ module.exportFunction(prefix + "_sign");
+ module.exportFunction(prefix + "_conjugate");
+ module.exportFunction(prefix + "_fromMontgomery");
+ module.exportFunction(prefix + "_toMontgomery");
+ module.exportFunction(prefix + "_eq");
+ module.exportFunction(prefix + "_inverse");
+ build_batchinverse_default(module, prefix);
+ buildTimesScalar(module, prefix + "_exp", f1n8 * 2, prefix + "_mul", prefix + "_square", prefix + "_copy", prefix + "_one");
+ buildSqrt();
+ buildIsSquare();
+ module.exportFunction(prefix + "_exp");
+ module.exportFunction(prefix + "_timesScalar");
+ module.exportFunction(prefix + "_batchInverse");
+ module.exportFunction(prefix + "_sqrt");
+ module.exportFunction(prefix + "_isSquare");
+ module.exportFunction(prefix + "_isNegative");
+ return prefix;
+}
+//#endregion
+//#region src/build_f3m.js
+function buildF3m(module, mulNonResidueFn, prefix, f1mPrefix) {
+ if (module.modules[prefix]) return prefix;
+ const f1n8 = module.modules[f1mPrefix].n64 * 8;
+ module.modules[prefix] = { n64: module.modules[f1mPrefix].n64 * 3 };
+ function buildAdd() {
+ const f = module.addFunction(prefix + "_add");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2 * f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8));
+ f.addCode(c.call(f1mPrefix + "_add", x0, y0, r0), c.call(f1mPrefix + "_add", x1, y1, r1), c.call(f1mPrefix + "_add", x2, y2, r2));
+ }
+ function buildTimesScalar$1() {
+ const f = module.addFunction(prefix + "_timesScalar");
+ f.addParam("x", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLen", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8));
+ f.addCode(c.call(f1mPrefix + "_timesScalar", x0, c.getLocal("scalar"), c.getLocal("scalarLen"), r0), c.call(f1mPrefix + "_timesScalar", x1, c.getLocal("scalar"), c.getLocal("scalarLen"), r1), c.call(f1mPrefix + "_timesScalar", x2, c.getLocal("scalar"), c.getLocal("scalarLen"), r2));
+ }
+ function buildSub() {
+ const f = module.addFunction(prefix + "_sub");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2 * f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8));
+ f.addCode(c.call(f1mPrefix + "_sub", x0, y0, r0), c.call(f1mPrefix + "_sub", x1, y1, r1), c.call(f1mPrefix + "_sub", x2, y2, r2));
+ }
+ function buildNeg() {
+ const f = module.addFunction(prefix + "_neg");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8));
+ f.addCode(c.call(f1mPrefix + "_neg", x0, r0), c.call(f1mPrefix + "_neg", x1, r1), c.call(f1mPrefix + "_neg", x2, r2));
+ }
+ function buildIsNegative() {
+ const f = module.addFunction(prefix + "_isNegative");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ f.addCode(c.if(c.call(f1mPrefix + "_isZero", x2), c.if(c.call(f1mPrefix + "_isZero", x1), c.ret(c.call(f1mPrefix + "_isNegative", x0)), c.ret(c.call(f1mPrefix + "_isNegative", x1)))), c.ret(c.call(f1mPrefix + "_isNegative", x2)));
+ }
+ function buildMul() {
+ const f = module.addFunction(prefix + "_mul");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+ const cd = f.getCodeBuilder();
+ const a = cd.getLocal("x");
+ const b = cd.i32_add(cd.getLocal("x"), cd.i32_const(f1n8));
+ const c = cd.i32_add(cd.getLocal("x"), cd.i32_const(2 * f1n8));
+ const A = cd.getLocal("y");
+ const B = cd.i32_add(cd.getLocal("y"), cd.i32_const(f1n8));
+ const C = cd.i32_add(cd.getLocal("y"), cd.i32_const(2 * f1n8));
+ const r0 = cd.getLocal("r");
+ const r1 = cd.i32_add(cd.getLocal("r"), cd.i32_const(f1n8));
+ const r2 = cd.i32_add(cd.getLocal("r"), cd.i32_const(2 * f1n8));
+ const aA = cd.i32_const(module.alloc(f1n8));
+ const bB = cd.i32_const(module.alloc(f1n8));
+ const cC = cd.i32_const(module.alloc(f1n8));
+ const a_b = cd.i32_const(module.alloc(f1n8));
+ const A_B = cd.i32_const(module.alloc(f1n8));
+ const a_c = cd.i32_const(module.alloc(f1n8));
+ const A_C = cd.i32_const(module.alloc(f1n8));
+ const b_c = cd.i32_const(module.alloc(f1n8));
+ const B_C = cd.i32_const(module.alloc(f1n8));
+ const aA_bB = cd.i32_const(module.alloc(f1n8));
+ const aA_cC = cd.i32_const(module.alloc(f1n8));
+ const bB_cC = cd.i32_const(module.alloc(f1n8));
+ const AUX = cd.i32_const(module.alloc(f1n8));
+ f.addCode(cd.call(f1mPrefix + "_mul", a, A, aA), cd.call(f1mPrefix + "_mul", b, B, bB), cd.call(f1mPrefix + "_mul", c, C, cC), cd.call(f1mPrefix + "_add", a, b, a_b), cd.call(f1mPrefix + "_add", A, B, A_B), cd.call(f1mPrefix + "_add", a, c, a_c), cd.call(f1mPrefix + "_add", A, C, A_C), cd.call(f1mPrefix + "_add", b, c, b_c), cd.call(f1mPrefix + "_add", B, C, B_C), cd.call(f1mPrefix + "_add", aA, bB, aA_bB), cd.call(f1mPrefix + "_add", aA, cC, aA_cC), cd.call(f1mPrefix + "_add", bB, cC, bB_cC), cd.call(f1mPrefix + "_mul", b_c, B_C, r0), cd.call(f1mPrefix + "_sub", r0, bB_cC, r0), cd.call(mulNonResidueFn, r0, r0), cd.call(f1mPrefix + "_add", aA, r0, r0), cd.call(f1mPrefix + "_mul", a_b, A_B, r1), cd.call(f1mPrefix + "_sub", r1, aA_bB, r1), cd.call(mulNonResidueFn, cC, AUX), cd.call(f1mPrefix + "_add", r1, AUX, r1), cd.call(f1mPrefix + "_mul", a_c, A_C, r2), cd.call(f1mPrefix + "_sub", r2, aA_cC, r2), cd.call(f1mPrefix + "_add", r2, bB, r2));
+ }
+ function buildSquare() {
+ const f = module.addFunction(prefix + "_square");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const A = c.getLocal("x");
+ const B = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const C = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8));
+ const s0 = c.i32_const(module.alloc(f1n8));
+ const ab = c.i32_const(module.alloc(f1n8));
+ const s1 = c.i32_const(module.alloc(f1n8));
+ const s2 = c.i32_const(module.alloc(f1n8));
+ const bc = c.i32_const(module.alloc(f1n8));
+ const s3 = c.i32_const(module.alloc(f1n8));
+ const s4 = c.i32_const(module.alloc(f1n8));
+ f.addCode(c.call(f1mPrefix + "_square", A, s0), c.call(f1mPrefix + "_mul", A, B, ab), c.call(f1mPrefix + "_add", ab, ab, s1), c.call(f1mPrefix + "_sub", A, B, s2), c.call(f1mPrefix + "_add", s2, C, s2), c.call(f1mPrefix + "_square", s2, s2), c.call(f1mPrefix + "_mul", B, C, bc), c.call(f1mPrefix + "_add", bc, bc, s3), c.call(f1mPrefix + "_square", C, s4), c.call(mulNonResidueFn, s3, r0), c.call(f1mPrefix + "_add", s0, r0, r0), c.call(mulNonResidueFn, s4, r1), c.call(f1mPrefix + "_add", s1, r1, r1), c.call(f1mPrefix + "_add", s0, s4, r2), c.call(f1mPrefix + "_sub", s3, r2, r2), c.call(f1mPrefix + "_add", s2, r2, r2), c.call(f1mPrefix + "_add", s1, r2, r2));
+ }
+ function buildToMontgomery() {
+ const f = module.addFunction(prefix + "_toMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8));
+ f.addCode(c.call(f1mPrefix + "_toMontgomery", x0, r0), c.call(f1mPrefix + "_toMontgomery", x1, r1), c.call(f1mPrefix + "_toMontgomery", x2, r2));
+ }
+ function buildFromMontgomery() {
+ const f = module.addFunction(prefix + "_fromMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8));
+ f.addCode(c.call(f1mPrefix + "_fromMontgomery", x0, r0), c.call(f1mPrefix + "_fromMontgomery", x1, r1), c.call(f1mPrefix + "_fromMontgomery", x2, r2));
+ }
+ function buildCopy() {
+ const f = module.addFunction(prefix + "_copy");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8));
+ f.addCode(c.call(f1mPrefix + "_copy", x0, r0), c.call(f1mPrefix + "_copy", x1, r1), c.call(f1mPrefix + "_copy", x2, r2));
+ }
+ function buildZero() {
+ const f = module.addFunction(prefix + "_zero");
+ f.addParam("x", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ f.addCode(c.call(f1mPrefix + "_zero", x0), c.call(f1mPrefix + "_zero", x1), c.call(f1mPrefix + "_zero", x2));
+ }
+ function buildOne() {
+ const f = module.addFunction(prefix + "_one");
+ f.addParam("x", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ f.addCode(c.call(f1mPrefix + "_one", x0), c.call(f1mPrefix + "_zero", x1), c.call(f1mPrefix + "_zero", x2));
+ }
+ function buildEq() {
+ const f = module.addFunction(prefix + "_eq");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2 * f1n8));
+ f.addCode(c.i32_and(c.i32_and(c.call(f1mPrefix + "_eq", x0, y0), c.call(f1mPrefix + "_eq", x1, y1)), c.call(f1mPrefix + "_eq", x2, y2)));
+ }
+ function buildIsZero() {
+ const f = module.addFunction(prefix + "_isZero");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ f.addCode(c.i32_and(c.i32_and(c.call(f1mPrefix + "_isZero", x0), c.call(f1mPrefix + "_isZero", x1)), c.call(f1mPrefix + "_isZero", x2)));
+ }
+ function buildInverse() {
+ const f = module.addFunction(prefix + "_inverse");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8));
+ const t0 = c.i32_const(module.alloc(f1n8));
+ const t1 = c.i32_const(module.alloc(f1n8));
+ const t2 = c.i32_const(module.alloc(f1n8));
+ const t3 = c.i32_const(module.alloc(f1n8));
+ const t4 = c.i32_const(module.alloc(f1n8));
+ const t5 = c.i32_const(module.alloc(f1n8));
+ const c0 = c.i32_const(module.alloc(f1n8));
+ const c1 = c.i32_const(module.alloc(f1n8));
+ const c2 = c.i32_const(module.alloc(f1n8));
+ const t6 = c.i32_const(module.alloc(f1n8));
+ const AUX = c.i32_const(module.alloc(f1n8));
+ f.addCode(c.call(f1mPrefix + "_square", x0, t0), c.call(f1mPrefix + "_square", x1, t1), c.call(f1mPrefix + "_square", x2, t2), c.call(f1mPrefix + "_mul", x0, x1, t3), c.call(f1mPrefix + "_mul", x0, x2, t4), c.call(f1mPrefix + "_mul", x1, x2, t5), c.call(mulNonResidueFn, t5, c0), c.call(f1mPrefix + "_sub", t0, c0, c0), c.call(mulNonResidueFn, t2, c1), c.call(f1mPrefix + "_sub", c1, t3, c1), c.call(f1mPrefix + "_sub", t1, t4, c2), c.call(f1mPrefix + "_mul", x2, c1, t6), c.call(f1mPrefix + "_mul", x1, c2, AUX), c.call(f1mPrefix + "_add", t6, AUX, t6), c.call(mulNonResidueFn, t6, t6), c.call(f1mPrefix + "_mul", x0, c0, AUX), c.call(f1mPrefix + "_add", AUX, t6, t6), c.call(f1mPrefix + "_inverse", t6, t6), c.call(f1mPrefix + "_mul", t6, c0, r0), c.call(f1mPrefix + "_mul", t6, c1, r1), c.call(f1mPrefix + "_mul", t6, c2, r2));
+ }
+ function buildSign() {
+ const f = module.addFunction(prefix + "_sign");
+ f.addParam("x", "i32");
+ f.addLocal("s", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8));
+ f.addCode(c.setLocal("s", c.call(f1mPrefix + "_sign", x2)), c.if(c.getLocal("s"), c.ret(c.getLocal("s"))), c.setLocal("s", c.call(f1mPrefix + "_sign", x1)), c.if(c.getLocal("s"), c.ret(c.getLocal("s"))), c.ret(c.call(f1mPrefix + "_sign", x0)));
+ }
+ function buildIsOne() {
+ const f = module.addFunction(prefix + "_isOne");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8 * 2));
+ f.addCode(c.ret(c.i32_and(c.i32_and(c.call(f1mPrefix + "_isOne", x0), c.call(f1mPrefix + "_isZero", x1)), c.call(f1mPrefix + "_isZero", x2))));
+ }
+ buildIsZero();
+ buildIsOne();
+ buildZero();
+ buildOne();
+ buildCopy();
+ buildMul();
+ buildSquare();
+ buildAdd();
+ buildSub();
+ buildNeg();
+ buildSign();
+ buildToMontgomery();
+ buildFromMontgomery();
+ buildEq();
+ buildInverse();
+ buildTimesScalar$1();
+ buildIsNegative();
+ module.exportFunction(prefix + "_isZero");
+ module.exportFunction(prefix + "_isOne");
+ module.exportFunction(prefix + "_zero");
+ module.exportFunction(prefix + "_one");
+ module.exportFunction(prefix + "_copy");
+ module.exportFunction(prefix + "_mul");
+ module.exportFunction(prefix + "_square");
+ module.exportFunction(prefix + "_add");
+ module.exportFunction(prefix + "_sub");
+ module.exportFunction(prefix + "_neg");
+ module.exportFunction(prefix + "_sign");
+ module.exportFunction(prefix + "_fromMontgomery");
+ module.exportFunction(prefix + "_toMontgomery");
+ module.exportFunction(prefix + "_eq");
+ module.exportFunction(prefix + "_inverse");
+ build_batchinverse_default(module, prefix);
+ buildTimesScalar(module, prefix + "_exp", f1n8 * 3, prefix + "_mul", prefix + "_square", prefix + "_copy", prefix + "_one");
+ module.exportFunction(prefix + "_exp");
+ module.exportFunction(prefix + "_timesScalar");
+ module.exportFunction(prefix + "_batchInverse");
+ module.exportFunction(prefix + "_isNegative");
+ return prefix;
+}
+//#endregion
+//#region src/build_timesscalarnaf.js
+function buildTimesScalarNAF(module, fnName, elementLen, opAB, opAA, opAmB, opCopy, opInit) {
+ const f = module.addFunction(fnName);
+ f.addParam("base", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLength", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("old0", "i32");
+ f.addLocal("nbits", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("last", "i32");
+ f.addLocal("cur", "i32");
+ f.addLocal("carry", "i32");
+ f.addLocal("p", "i32");
+ const c = f.getCodeBuilder();
+ const aux = c.i32_const(module.alloc(elementLen));
+ function getBit(IDX) {
+ return c.i32_and(c.i32_shr_u(c.i32_load(c.i32_add(c.getLocal("scalar"), c.i32_and(c.i32_shr_u(IDX, c.i32_const(3)), c.i32_const(4294967292)))), c.i32_and(IDX, c.i32_const(31))), c.i32_const(1));
+ }
+ function pushBit(b) {
+ return [...c.i32_store8(c.getLocal("p"), c.i32_const(b)), ...c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(1)))];
+ }
+ f.addCode(c.if(c.i32_eqz(c.getLocal("scalarLength")), [...c.call(opInit, c.getLocal("r")), ...c.ret([])]), c.setLocal("nbits", c.i32_shl(c.getLocal("scalarLength"), c.i32_const(3))), c.setLocal("old0", c.i32_load(c.i32_const(0))), c.setLocal("p", c.getLocal("old0")), c.i32_store(c.i32_const(0), c.i32_and(c.i32_add(c.i32_add(c.getLocal("old0"), c.i32_const(32)), c.getLocal("nbits")), c.i32_const(4294967288))), c.setLocal("i", c.i32_const(1)), c.setLocal("last", getBit(c.i32_const(0))), c.setLocal("carry", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("nbits"))), c.setLocal("cur", getBit(c.getLocal("i"))), c.if(c.getLocal("last"), c.if(c.getLocal("cur"), c.if(c.getLocal("carry"), [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(1)),
+ ...pushBit(1)
+ ], [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(1)),
+ ...pushBit(255)
+ ]), c.if(c.getLocal("carry"), [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(1)),
+ ...pushBit(255)
+ ], [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(0)),
+ ...pushBit(1)
+ ])), c.if(c.getLocal("cur"), c.if(c.getLocal("carry"), [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(1)),
+ ...pushBit(0)
+ ], [
+ ...c.setLocal("last", c.i32_const(1)),
+ ...c.setLocal("carry", c.i32_const(0)),
+ ...pushBit(0)
+ ]), c.if(c.getLocal("carry"), [
+ ...c.setLocal("last", c.i32_const(1)),
+ ...c.setLocal("carry", c.i32_const(0)),
+ ...pushBit(0)
+ ], [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(0)),
+ ...pushBit(0)
+ ]))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.if(c.getLocal("last"), c.if(c.getLocal("carry"), [
+ ...pushBit(255),
+ ...pushBit(0),
+ ...pushBit(1)
+ ], [...pushBit(1)]), c.if(c.getLocal("carry"), [...pushBit(0), ...pushBit(1)])), c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))), c.call(opCopy, c.getLocal("base"), aux), c.call(opInit, c.getLocal("r")), c.block(c.loop(c.call(opAA, c.getLocal("r"), c.getLocal("r")), c.setLocal("cur", c.i32_load8_u(c.getLocal("p"))), c.if(c.getLocal("cur"), c.if(c.i32_eq(c.getLocal("cur"), c.i32_const(1)), c.call(opAB, c.getLocal("r"), aux, c.getLocal("r")), c.call(opAmB, c.getLocal("r"), aux, c.getLocal("r")))), c.br_if(1, c.i32_eq(c.getLocal("old0"), c.getLocal("p"))), c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))), c.br(0))), c.i32_store(c.i32_const(0), c.getLocal("old0")));
+}
+//#endregion
+//#region src/build_multiexp.js
+function buildMultiexp(module, prefix, fnName, opAdd, opSub, n8b) {
+ const n8g = module.modules[prefix].n64 * 8;
+ const accReduce = module.alloc(n8g);
+ const aux = module.alloc(n8g);
+ function buildGetChunk() {
+ const f = module.addFunction(fnName + "_getChunk");
+ f.addParam("pScalar", "i32");
+ f.addParam("scalarSize", "i32");
+ f.addParam("startBit", "i32");
+ f.addParam("chunkSize", "i32");
+ f.addLocal("bitsToEnd", "i32");
+ f.addLocal("mask", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("bitsToEnd", c.i32_sub(c.i32_mul(c.getLocal("scalarSize"), c.i32_const(8)), c.getLocal("startBit"))), c.if(c.i32_gt_s(c.getLocal("chunkSize"), c.getLocal("bitsToEnd")), c.setLocal("mask", c.i32_sub(c.i32_shl(c.i32_const(1), c.getLocal("bitsToEnd")), c.i32_const(1))), c.setLocal("mask", c.i32_sub(c.i32_shl(c.i32_const(1), c.getLocal("chunkSize")), c.i32_const(1)))), c.i32_and(c.i32_shr_u(c.i32_load(c.i32_add(c.getLocal("pScalar"), c.i32_shr_u(c.getLocal("startBit"), c.i32_const(3))), 0, 0), c.i32_and(c.getLocal("startBit"), c.i32_const(7))), c.getLocal("mask")));
+ }
+ function buildRecode() {
+ const f = module.addFunction(fnName + "_recode");
+ f.addParam("pScalars", "i32");
+ f.addParam("scalarSize", "i32");
+ f.addParam("n", "i32");
+ f.addParam("chunkSize", "i32");
+ f.addParam("nChunks", "i32");
+ f.addParam("pCarry", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("nWin", "i32");
+ f.addLocal("itScalar", "i32");
+ f.addLocal("carry", "i32");
+ f.addLocal("raw", "i32");
+ f.addLocal("half", "i32");
+ f.addLocal("scalarBits", "i32");
+ f.addLocal("startBit", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("half", c.i32_shl(c.i32_const(1), c.i32_sub(c.getLocal("chunkSize"), c.i32_const(1)))), c.setLocal("scalarBits", c.i32_shl(c.getLocal("scalarSize"), c.i32_const(3))), c.setLocal("nWin", c.i32_add(c.getLocal("nChunks"), c.i32_const(1))), c.setLocal("itScalar", c.getLocal("pScalars")), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("carry", c.i32_const(0)), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("nWin"))), c.i32_store8(c.i32_add(c.getLocal("pCarry"), c.i32_add(c.i32_mul(c.getLocal("j"), c.getLocal("n")), c.getLocal("i"))), c.getLocal("carry")), c.setLocal("startBit", c.i32_mul(c.getLocal("j"), c.getLocal("chunkSize"))), c.if(c.i32_lt_s(c.getLocal("startBit"), c.getLocal("scalarBits")), c.setLocal("raw", c.call(fnName + "_getChunk", c.getLocal("itScalar"), c.getLocal("scalarSize"), c.getLocal("startBit"), c.getLocal("chunkSize"))), c.setLocal("raw", c.i32_const(0))), c.if(c.i32_ge_s(c.i32_add(c.getLocal("raw"), c.getLocal("carry")), c.getLocal("half")), c.setLocal("carry", c.i32_const(1)), c.setLocal("carry", c.i32_const(0))), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("itScalar", c.i32_add(c.getLocal("itScalar"), c.getLocal("scalarSize"))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ function buildMutiexpChunk() {
+ const f = module.addFunction(fnName + "_chunk");
+ f.addParam("pBases", "i32");
+ f.addParam("pScalars", "i32");
+ f.addParam("scalarSize", "i32");
+ f.addParam("pCarry", "i32");
+ f.addParam("n", "i32");
+ f.addParam("windowIdx", "i32");
+ f.addParam("chunkSize", "i32");
+ f.addParam("pr", "i32");
+ f.addLocal("itBase", "i32");
+ f.addLocal("itScalar", "i32");
+ f.addLocal("itCarry", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("nTable", "i32");
+ f.addLocal("full", "i32");
+ f.addLocal("scalarBits", "i32");
+ f.addLocal("startBit", "i32");
+ f.addLocal("pTable", "i32");
+ f.addLocal("raw", "i32");
+ f.addLocal("d", "i32");
+ f.addLocal("pIdxTable", "i32");
+ f.addLocal("itB", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.if(c.i32_eqz(c.getLocal("n")), [...c.call(prefix + "_zero", c.getLocal("pr")), ...c.ret([])]), c.setLocal("nTable", c.i32_shl(c.i32_const(1), c.i32_sub(c.getLocal("chunkSize"), c.i32_const(1)))), c.setLocal("full", c.i32_shl(c.i32_const(1), c.getLocal("chunkSize"))), c.setLocal("scalarBits", c.i32_shl(c.getLocal("scalarSize"), c.i32_const(3))), c.setLocal("startBit", c.i32_mul(c.getLocal("windowIdx"), c.getLocal("chunkSize"))), c.setLocal("pTable", c.i32_load(c.i32_const(0))), c.i32_store(c.i32_const(0), c.i32_add(c.getLocal("pTable"), c.i32_mul(c.getLocal("nTable"), c.i32_const(n8g)))), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("nTable"))), c.call(prefix + "_zero", c.i32_add(c.getLocal("pTable"), c.i32_mul(c.getLocal("j"), c.i32_const(n8g)))), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("itBase", c.getLocal("pBases")), c.setLocal("itScalar", c.getLocal("pScalars")), c.setLocal("itCarry", c.i32_add(c.getLocal("pCarry"), c.i32_mul(c.getLocal("windowIdx"), c.getLocal("n")))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.if(c.i32_lt_s(c.getLocal("startBit"), c.getLocal("scalarBits")), c.setLocal("raw", c.call(fnName + "_getChunk", c.getLocal("itScalar"), c.getLocal("scalarSize"), c.getLocal("startBit"), c.getLocal("chunkSize"))), c.setLocal("raw", c.i32_const(0))), c.setLocal("d", c.i32_add(c.getLocal("raw"), c.i32_load8_u(c.getLocal("itCarry")))), c.if(c.i32_ge_s(c.getLocal("d"), c.getLocal("nTable")), c.setLocal("d", c.i32_sub(c.getLocal("d"), c.getLocal("full")))), c.if(c.i32_gt_s(c.getLocal("d"), c.i32_const(0)), [...c.setLocal("pIdxTable", c.i32_add(c.getLocal("pTable"), c.i32_mul(c.i32_sub(c.getLocal("d"), c.i32_const(1)), c.i32_const(n8g)))), ...c.call(opAdd, c.getLocal("pIdxTable"), c.getLocal("itBase"), c.getLocal("pIdxTable"))], c.if(c.i32_lt_s(c.getLocal("d"), c.i32_const(0)), [...c.setLocal("pIdxTable", c.i32_add(c.getLocal("pTable"), c.i32_mul(c.i32_sub(c.i32_const(-1), c.getLocal("d")), c.i32_const(n8g)))), ...c.call(opSub, c.getLocal("pIdxTable"), c.getLocal("itBase"), c.getLocal("pIdxTable"))])), c.setLocal("itScalar", c.i32_add(c.getLocal("itScalar"), c.getLocal("scalarSize"))), c.setLocal("itCarry", c.i32_add(c.getLocal("itCarry"), c.i32_const(1))), c.setLocal("itBase", c.i32_add(c.getLocal("itBase"), c.i32_const(n8b))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.setLocal("itB", c.i32_add(c.getLocal("pTable"), c.i32_mul(c.i32_sub(c.getLocal("nTable"), c.i32_const(1)), c.i32_const(n8g)))), c.call(prefix + "_copy", c.getLocal("itB"), c.getLocal("pr")), c.call(prefix + "_copy", c.getLocal("itB"), c.i32_const(accReduce)), c.setLocal("itB", c.i32_sub(c.getLocal("itB"), c.i32_const(n8g))), c.block(c.loop(c.br_if(1, c.i32_lt_u(c.getLocal("itB"), c.getLocal("pTable"))), c.call(prefix + "_add", c.i32_const(accReduce), c.getLocal("itB"), c.i32_const(accReduce)), c.call(prefix + "_add", c.getLocal("pr"), c.i32_const(accReduce), c.getLocal("pr")), c.setLocal("itB", c.i32_sub(c.getLocal("itB"), c.i32_const(n8g))), c.br(0))), c.i32_store(c.i32_const(0), c.getLocal("pTable")));
+ }
+ function buildMultiexp() {
+ const f = module.addFunction(fnName);
+ f.addParam("pBases", "i32");
+ f.addParam("pScalars", "i32");
+ f.addParam("scalarSize", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pr", "i32");
+ f.addLocal("chunkSize", "i32");
+ f.addLocal("nChunks", "i32");
+ f.addLocal("nWin", "i32");
+ f.addLocal("pCarry", "i32");
+ f.addLocal("savedFree", "i32");
+ f.addLocal("windowIdx", "i32");
+ f.addLocal("j", "i32");
+ const c = f.getCodeBuilder();
+ const pTSizes = module.alloc([
+ 17,
+ 17,
+ 17,
+ 17,
+ 17,
+ 17,
+ 17,
+ 17,
+ 17,
+ 17,
+ 16,
+ 16,
+ 15,
+ 14,
+ 13,
+ 13,
+ 12,
+ 11,
+ 10,
+ 9,
+ 8,
+ 7,
+ 7,
+ 6,
+ 5,
+ 4,
+ 3,
+ 2,
+ 1,
+ 1,
+ 1,
+ 1
+ ]);
+ f.addCode(c.call(prefix + "_zero", c.getLocal("pr")), c.if(c.i32_eqz(c.getLocal("n")), c.ret([])), c.setLocal("chunkSize", c.i32_load8_u(c.i32_clz(c.getLocal("n")), pTSizes)), c.if(c.i32_lt_s(c.getLocal("chunkSize"), c.i32_const(2)), c.setLocal("chunkSize", c.i32_const(2))), c.setLocal("nChunks", c.i32_add(c.i32_div_u(c.i32_sub(c.i32_shl(c.getLocal("scalarSize"), c.i32_const(3)), c.i32_const(1)), c.getLocal("chunkSize")), c.i32_const(1))), c.setLocal("nWin", c.i32_add(c.getLocal("nChunks"), c.i32_const(1))), c.setLocal("savedFree", c.i32_load(c.i32_const(0))), c.setLocal("pCarry", c.getLocal("savedFree")), c.i32_store(c.i32_const(0), c.i32_and(c.i32_add(c.i32_add(c.getLocal("savedFree"), c.i32_mul(c.getLocal("nWin"), c.getLocal("n"))), c.i32_const(3)), c.i32_const(-4))), c.call(fnName + "_recode", c.getLocal("pScalars"), c.getLocal("scalarSize"), c.getLocal("n"), c.getLocal("chunkSize"), c.getLocal("nChunks"), c.getLocal("pCarry")), c.setLocal("windowIdx", c.getLocal("nChunks")), c.block(c.loop(c.br_if(1, c.i32_lt_s(c.getLocal("windowIdx"), c.i32_const(0))), c.if(c.i32_eqz(c.call(prefix + "_isZero", c.getLocal("pr"))), [...c.setLocal("j", c.i32_const(0)), ...c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("chunkSize"))), c.call(prefix + "_double", c.getLocal("pr"), c.getLocal("pr")), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0)))]), c.call(fnName + "_chunk", c.getLocal("pBases"), c.getLocal("pScalars"), c.getLocal("scalarSize"), c.getLocal("pCarry"), c.getLocal("n"), c.getLocal("windowIdx"), c.getLocal("chunkSize"), c.i32_const(aux)), c.call(prefix + "_add", c.getLocal("pr"), c.i32_const(aux), c.getLocal("pr")), c.setLocal("windowIdx", c.i32_sub(c.getLocal("windowIdx"), c.i32_const(1))), c.br(0))), c.i32_store(c.i32_const(0), c.getLocal("savedFree")));
+ }
+ buildGetChunk();
+ buildRecode();
+ buildMutiexpChunk();
+ buildMultiexp();
+ module.exportFunction(fnName);
+ module.exportFunction(fnName + "_chunk");
+}
+//#endregion
+//#region src/build_curve_jacobian_a0.js
+function buildCurve(module, prefix, prefixField, pB) {
+ const n64 = module.modules[prefixField].n64;
+ const n8 = n64 * 8;
+ if (module.modules[prefix]) return prefix;
+ module.modules[prefix] = { n64: n64 * 3 };
+ function buildIsZero() {
+ const f = module.addFunction(prefix + "_isZero");
+ f.addParam("p1", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefixField + "_isZero", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2))));
+ }
+ function buildIsZeroAffine() {
+ const f = module.addFunction(prefix + "_isZeroAffine");
+ f.addParam("p1", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.i32_and(c.call(prefixField + "_isZero", c.getLocal("p1")), c.call(prefixField + "_isZero", c.i32_add(c.getLocal("p1"), c.i32_const(n8)))));
+ }
+ function buildCopy() {
+ const f = module.addFunction(prefix + "_copy");
+ f.addParam("ps", "i32");
+ f.addParam("pd", "i32");
+ const c = f.getCodeBuilder();
+ for (let i = 0; i < n64 * 3; i++) f.addCode(c.i64_store(c.getLocal("pd"), i * 8, c.i64_load(c.getLocal("ps"), i * 8)));
+ }
+ function buildCopyAffine() {
+ const f = module.addFunction(prefix + "_copyAffine");
+ f.addParam("ps", "i32");
+ f.addParam("pd", "i32");
+ const c = f.getCodeBuilder();
+ for (let i = 0; i < n64 * 2; i++) f.addCode(c.i64_store(c.getLocal("pd"), i * 8, c.i64_load(c.getLocal("ps"), i * 8)));
+ }
+ function buildZero() {
+ const f = module.addFunction(prefix + "_zero");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefixField + "_zero", c.getLocal("pr")));
+ f.addCode(c.call(prefixField + "_one", c.i32_add(c.getLocal("pr"), c.i32_const(n8))));
+ f.addCode(c.call(prefixField + "_zero", c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2))));
+ }
+ function buildZeroAffine() {
+ const f = module.addFunction(prefix + "_zeroAffine");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefixField + "_zero", c.getLocal("pr")));
+ f.addCode(c.call(prefixField + "_zero", c.i32_add(c.getLocal("pr"), c.i32_const(n8))));
+ }
+ function buildEq() {
+ const f = module.addFunction(prefix + "_eq");
+ f.addParam("p1", "i32");
+ f.addParam("p2", "i32");
+ f.setReturnType("i32");
+ f.addLocal("z1", "i32");
+ f.addLocal("z2", "i32");
+ const c = f.getCodeBuilder();
+ const x1 = c.getLocal("p1");
+ const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2))));
+ const z1 = c.getLocal("z1");
+ const x2 = c.getLocal("p2");
+ const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8));
+ f.addCode(c.setLocal("z2", c.i32_add(c.getLocal("p2"), c.i32_const(n8 * 2))));
+ const z2 = c.getLocal("z2");
+ const Z1Z1 = c.i32_const(module.alloc(n8));
+ const Z2Z2 = c.i32_const(module.alloc(n8));
+ const U1 = c.i32_const(module.alloc(n8));
+ const U2 = c.i32_const(module.alloc(n8));
+ const Z1_cubed = c.i32_const(module.alloc(n8));
+ const Z2_cubed = c.i32_const(module.alloc(n8));
+ const S1 = c.i32_const(module.alloc(n8));
+ const S2 = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), c.ret(c.call(prefix + "_isZero", c.getLocal("p2")))), c.if(c.call(prefix + "_isZero", c.getLocal("p2")), c.ret(c.i32_const(0))), c.if(c.call(prefixField + "_isOne", z1), c.ret(c.call(prefix + "_eqMixed", c.getLocal("p2"), c.getLocal("p1")))), c.if(c.call(prefixField + "_isOne", z2), c.ret(c.call(prefix + "_eqMixed", c.getLocal("p1"), c.getLocal("p2")))), c.call(prefixField + "_square", z1, Z1Z1), c.call(prefixField + "_square", z2, Z2Z2), c.call(prefixField + "_mul", x1, Z2Z2, U1), c.call(prefixField + "_mul", x2, Z1Z1, U2), c.call(prefixField + "_mul", z1, Z1Z1, Z1_cubed), c.call(prefixField + "_mul", z2, Z2Z2, Z2_cubed), c.call(prefixField + "_mul", y1, Z2_cubed, S1), c.call(prefixField + "_mul", y2, Z1_cubed, S2), c.if(c.call(prefixField + "_eq", U1, U2), c.if(c.call(prefixField + "_eq", S1, S2), c.ret(c.i32_const(1)))), c.ret(c.i32_const(0)));
+ }
+ function buildEqMixed() {
+ const f = module.addFunction(prefix + "_eqMixed");
+ f.addParam("p1", "i32");
+ f.addParam("p2", "i32");
+ f.setReturnType("i32");
+ f.addLocal("z1", "i32");
+ const c = f.getCodeBuilder();
+ const x1 = c.getLocal("p1");
+ const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2))));
+ const z1 = c.getLocal("z1");
+ const x2 = c.getLocal("p2");
+ const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8));
+ const Z1Z1 = c.i32_const(module.alloc(n8));
+ const U2 = c.i32_const(module.alloc(n8));
+ const Z1_cubed = c.i32_const(module.alloc(n8));
+ const S2 = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), c.ret(c.call(prefix + "_isZeroAffine", c.getLocal("p2")))), c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p2")), c.ret(c.i32_const(0))), c.if(c.call(prefixField + "_isOne", z1), c.ret(c.call(prefix + "_eqAffine", c.getLocal("p1"), c.getLocal("p2")))), c.call(prefixField + "_square", z1, Z1Z1), c.call(prefixField + "_mul", x2, Z1Z1, U2), c.call(prefixField + "_mul", z1, Z1Z1, Z1_cubed), c.call(prefixField + "_mul", y2, Z1_cubed, S2), c.if(c.call(prefixField + "_eq", x1, U2), c.if(c.call(prefixField + "_eq", y1, S2), c.ret(c.i32_const(1)))), c.ret(c.i32_const(0)));
+ }
+ function buildDouble() {
+ const f = module.addFunction(prefix + "_double");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("p1");
+ const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ const z = c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2));
+ const A = c.i32_const(module.alloc(n8));
+ const B = c.i32_const(module.alloc(n8));
+ const C = c.i32_const(module.alloc(n8));
+ const D = c.i32_const(module.alloc(n8));
+ const E = c.i32_const(module.alloc(n8));
+ const F = c.i32_const(module.alloc(n8));
+ const G = c.i32_const(module.alloc(n8));
+ const eightC = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), [...c.call(prefix + "_copy", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])]), c.if(c.call(prefixField + "_isOne", z), [...c.ret(c.call(prefix + "_doubleAffine", c.getLocal("p1"), c.getLocal("pr"))), ...c.ret([])]), c.call(prefixField + "_square", x, A), c.call(prefixField + "_square", y, B), c.call(prefixField + "_square", B, C), c.call(prefixField + "_add", x, B, D), c.call(prefixField + "_square", D, D), c.call(prefixField + "_sub", D, A, D), c.call(prefixField + "_sub", D, C, D), c.call(prefixField + "_add", D, D, D), c.call(prefixField + "_add", A, A, E), c.call(prefixField + "_add", E, A, E), c.call(prefixField + "_square", E, F), c.call(prefixField + "_mul", y, z, G), c.call(prefixField + "_add", D, D, x3), c.call(prefixField + "_sub", F, x3, x3), c.call(prefixField + "_add", C, C, eightC), c.call(prefixField + "_add", eightC, eightC, eightC), c.call(prefixField + "_add", eightC, eightC, eightC), c.call(prefixField + "_sub", D, x3, y3), c.call(prefixField + "_mul", y3, E, y3), c.call(prefixField + "_sub", y3, eightC, y3), c.call(prefixField + "_add", G, G, z3));
+ }
+ function buildDoubleAffine() {
+ const f = module.addFunction(prefix + "_doubleAffine");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("p1");
+ const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2));
+ const XX = c.i32_const(module.alloc(n8));
+ const YY = c.i32_const(module.alloc(n8));
+ const YYYY = c.i32_const(module.alloc(n8));
+ const S = c.i32_const(module.alloc(n8));
+ const M = c.i32_const(module.alloc(n8));
+ const eightYYYY = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p1")), [...c.call(prefix + "_toJacobian", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])]), c.call(prefixField + "_square", x, XX), c.call(prefixField + "_square", y, YY), c.call(prefixField + "_square", YY, YYYY), c.call(prefixField + "_add", x, YY, S), c.call(prefixField + "_square", S, S), c.call(prefixField + "_sub", S, XX, S), c.call(prefixField + "_sub", S, YYYY, S), c.call(prefixField + "_add", S, S, S), c.call(prefixField + "_add", XX, XX, M), c.call(prefixField + "_add", M, XX, M), c.call(prefixField + "_add", y, y, z3), c.call(prefixField + "_square", M, x3), c.call(prefixField + "_sub", x3, S, x3), c.call(prefixField + "_sub", x3, S, x3), c.call(prefixField + "_add", YYYY, YYYY, eightYYYY), c.call(prefixField + "_add", eightYYYY, eightYYYY, eightYYYY), c.call(prefixField + "_add", eightYYYY, eightYYYY, eightYYYY), c.call(prefixField + "_sub", S, x3, y3), c.call(prefixField + "_mul", y3, M, y3), c.call(prefixField + "_sub", y3, eightYYYY, y3));
+ }
+ function buildEqAffine() {
+ const f = module.addFunction(prefix + "_eqAffine");
+ f.addParam("p1", "i32");
+ f.addParam("p2", "i32");
+ f.setReturnType("i32");
+ f.addLocal("z1", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.ret(c.i32_and(c.call(prefixField + "_eq", c.getLocal("p1"), c.getLocal("p2")), c.call(prefixField + "_eq", c.i32_add(c.getLocal("p1"), c.i32_const(n8)), c.i32_add(c.getLocal("p2"), c.i32_const(n8))))));
+ }
+ function buildToMontgomery() {
+ const f = module.addFunction(prefix + "_toMontgomery");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefixField + "_toMontgomery", c.getLocal("p1"), c.getLocal("pr")));
+ for (let i = 1; i < 3; i++) f.addCode(c.call(prefixField + "_toMontgomery", c.i32_add(c.getLocal("p1"), c.i32_const(i * n8)), c.i32_add(c.getLocal("pr"), c.i32_const(i * n8))));
+ }
+ function buildToMontgomeryAffine() {
+ const f = module.addFunction(prefix + "_toMontgomeryAffine");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefixField + "_toMontgomery", c.getLocal("p1"), c.getLocal("pr")));
+ for (let i = 1; i < 2; i++) f.addCode(c.call(prefixField + "_toMontgomery", c.i32_add(c.getLocal("p1"), c.i32_const(i * n8)), c.i32_add(c.getLocal("pr"), c.i32_const(i * n8))));
+ }
+ function buildFromMontgomery() {
+ const f = module.addFunction(prefix + "_fromMontgomery");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefixField + "_fromMontgomery", c.getLocal("p1"), c.getLocal("pr")));
+ for (let i = 1; i < 3; i++) f.addCode(c.call(prefixField + "_fromMontgomery", c.i32_add(c.getLocal("p1"), c.i32_const(i * n8)), c.i32_add(c.getLocal("pr"), c.i32_const(i * n8))));
+ }
+ function buildFromMontgomeryAffine() {
+ const f = module.addFunction(prefix + "_fromMontgomeryAffine");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefixField + "_fromMontgomery", c.getLocal("p1"), c.getLocal("pr")));
+ for (let i = 1; i < 2; i++) f.addCode(c.call(prefixField + "_fromMontgomery", c.i32_add(c.getLocal("p1"), c.i32_const(i * n8)), c.i32_add(c.getLocal("pr"), c.i32_const(i * n8))));
+ }
+ function buildAdd() {
+ const f = module.addFunction(prefix + "_add");
+ f.addParam("p1", "i32");
+ f.addParam("p2", "i32");
+ f.addParam("pr", "i32");
+ f.addLocal("z1", "i32");
+ f.addLocal("z2", "i32");
+ const c = f.getCodeBuilder();
+ const x1 = c.getLocal("p1");
+ const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2))));
+ const z1 = c.getLocal("z1");
+ const x2 = c.getLocal("p2");
+ const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8));
+ f.addCode(c.setLocal("z2", c.i32_add(c.getLocal("p2"), c.i32_const(n8 * 2))));
+ const z2 = c.getLocal("z2");
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2));
+ const Z1Z1 = c.i32_const(module.alloc(n8));
+ const Z2Z2 = c.i32_const(module.alloc(n8));
+ const U1 = c.i32_const(module.alloc(n8));
+ const U2 = c.i32_const(module.alloc(n8));
+ const Z1_cubed = c.i32_const(module.alloc(n8));
+ const Z2_cubed = c.i32_const(module.alloc(n8));
+ const S1 = c.i32_const(module.alloc(n8));
+ const S2 = c.i32_const(module.alloc(n8));
+ const H = c.i32_const(module.alloc(n8));
+ const S2_minus_S1 = c.i32_const(module.alloc(n8));
+ const I = c.i32_const(module.alloc(n8));
+ const J = c.i32_const(module.alloc(n8));
+ const r = c.i32_const(module.alloc(n8));
+ const r2 = c.i32_const(module.alloc(n8));
+ const V = c.i32_const(module.alloc(n8));
+ const V2 = c.i32_const(module.alloc(n8));
+ const S1_J2 = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), [...c.call(prefix + "_copy", c.getLocal("p2"), c.getLocal("pr")), ...c.ret([])]), c.if(c.call(prefix + "_isZero", c.getLocal("p2")), [...c.call(prefix + "_copy", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])]), c.if(c.call(prefixField + "_isOne", z1), [...c.call(prefix + "_addMixed", x2, x1, x3), ...c.ret([])]), c.if(c.call(prefixField + "_isOne", z2), [...c.call(prefix + "_addMixed", x1, x2, x3), ...c.ret([])]), c.call(prefixField + "_square", z1, Z1Z1), c.call(prefixField + "_square", z2, Z2Z2), c.call(prefixField + "_mul", x1, Z2Z2, U1), c.call(prefixField + "_mul", x2, Z1Z1, U2), c.call(prefixField + "_mul", z1, Z1Z1, Z1_cubed), c.call(prefixField + "_mul", z2, Z2Z2, Z2_cubed), c.call(prefixField + "_mul", y1, Z2_cubed, S1), c.call(prefixField + "_mul", y2, Z1_cubed, S2), c.if(c.call(prefixField + "_eq", U1, U2), c.if(c.call(prefixField + "_eq", S1, S2), [...c.call(prefix + "_double", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])])), c.call(prefixField + "_sub", U2, U1, H), c.call(prefixField + "_sub", S2, S1, S2_minus_S1), c.call(prefixField + "_add", H, H, I), c.call(prefixField + "_square", I, I), c.call(prefixField + "_mul", H, I, J), c.call(prefixField + "_add", S2_minus_S1, S2_minus_S1, r), c.call(prefixField + "_mul", U1, I, V), c.call(prefixField + "_square", r, r2), c.call(prefixField + "_add", V, V, V2), c.call(prefixField + "_sub", r2, J, x3), c.call(prefixField + "_sub", x3, V2, x3), c.call(prefixField + "_mul", S1, J, S1_J2), c.call(prefixField + "_add", S1_J2, S1_J2, S1_J2), c.call(prefixField + "_sub", V, x3, y3), c.call(prefixField + "_mul", y3, r, y3), c.call(prefixField + "_sub", y3, S1_J2, y3), c.call(prefixField + "_add", z1, z2, z3), c.call(prefixField + "_square", z3, z3), c.call(prefixField + "_sub", z3, Z1Z1, z3), c.call(prefixField + "_sub", z3, Z2Z2, z3), c.call(prefixField + "_mul", z3, H, z3));
+ }
+ function buildAddMixed() {
+ const f = module.addFunction(prefix + "_addMixed");
+ f.addParam("p1", "i32");
+ f.addParam("p2", "i32");
+ f.addParam("pr", "i32");
+ f.addLocal("z1", "i32");
+ const c = f.getCodeBuilder();
+ const x1 = c.getLocal("p1");
+ const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2))));
+ const z1 = c.getLocal("z1");
+ const x2 = c.getLocal("p2");
+ const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2));
+ const Z1Z1 = c.i32_const(module.alloc(n8));
+ const U2 = c.i32_const(module.alloc(n8));
+ const Z1_cubed = c.i32_const(module.alloc(n8));
+ const S2 = c.i32_const(module.alloc(n8));
+ const H = c.i32_const(module.alloc(n8));
+ const HH = c.i32_const(module.alloc(n8));
+ const S2_minus_y1 = c.i32_const(module.alloc(n8));
+ const I = c.i32_const(module.alloc(n8));
+ const J = c.i32_const(module.alloc(n8));
+ const r = c.i32_const(module.alloc(n8));
+ const r2 = c.i32_const(module.alloc(n8));
+ const V = c.i32_const(module.alloc(n8));
+ const V2 = c.i32_const(module.alloc(n8));
+ const y1_J2 = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), [
+ ...c.call(prefix + "_copyAffine", c.getLocal("p2"), c.getLocal("pr")),
+ ...c.call(prefixField + "_one", c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2))),
+ ...c.ret([])
+ ]), c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p2")), [...c.call(prefix + "_copy", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])]), c.if(c.call(prefixField + "_isOne", z1), [...c.call(prefix + "_addAffine", x1, x2, x3), ...c.ret([])]), c.call(prefixField + "_square", z1, Z1Z1), c.call(prefixField + "_mul", x2, Z1Z1, U2), c.call(prefixField + "_mul", z1, Z1Z1, Z1_cubed), c.call(prefixField + "_mul", y2, Z1_cubed, S2), c.if(c.call(prefixField + "_eq", x1, U2), c.if(c.call(prefixField + "_eq", y1, S2), [...c.call(prefix + "_doubleAffine", c.getLocal("p2"), c.getLocal("pr")), ...c.ret([])])), c.call(prefixField + "_sub", U2, x1, H), c.call(prefixField + "_sub", S2, y1, S2_minus_y1), c.call(prefixField + "_square", H, HH), c.call(prefixField + "_add", HH, HH, I), c.call(prefixField + "_add", I, I, I), c.call(prefixField + "_mul", H, I, J), c.call(prefixField + "_add", S2_minus_y1, S2_minus_y1, r), c.call(prefixField + "_mul", x1, I, V), c.call(prefixField + "_square", r, r2), c.call(prefixField + "_add", V, V, V2), c.call(prefixField + "_sub", r2, J, x3), c.call(prefixField + "_sub", x3, V2, x3), c.call(prefixField + "_mul", y1, J, y1_J2), c.call(prefixField + "_add", y1_J2, y1_J2, y1_J2), c.call(prefixField + "_sub", V, x3, y3), c.call(prefixField + "_mul", y3, r, y3), c.call(prefixField + "_sub", y3, y1_J2, y3), c.call(prefixField + "_add", z1, H, z3), c.call(prefixField + "_square", z3, z3), c.call(prefixField + "_sub", z3, Z1Z1, z3), c.call(prefixField + "_sub", z3, HH, z3));
+ }
+ function buildAddAffine() {
+ const f = module.addFunction(prefix + "_addAffine");
+ f.addParam("p1", "i32");
+ f.addParam("p2", "i32");
+ f.addParam("pr", "i32");
+ f.addLocal("z1", "i32");
+ const c = f.getCodeBuilder();
+ const x1 = c.getLocal("p1");
+ const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2))));
+ const x2 = c.getLocal("p2");
+ const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2));
+ const H = c.i32_const(module.alloc(n8));
+ const HH = c.i32_const(module.alloc(n8));
+ const y2_minus_y1 = c.i32_const(module.alloc(n8));
+ const I = c.i32_const(module.alloc(n8));
+ const J = c.i32_const(module.alloc(n8));
+ const r = c.i32_const(module.alloc(n8));
+ const r2 = c.i32_const(module.alloc(n8));
+ const V = c.i32_const(module.alloc(n8));
+ const V2 = c.i32_const(module.alloc(n8));
+ const y1_J2 = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p1")), [
+ ...c.call(prefix + "_copyAffine", c.getLocal("p2"), c.getLocal("pr")),
+ ...c.call(prefixField + "_one", c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2))),
+ ...c.ret([])
+ ]), c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p2")), [
+ ...c.call(prefix + "_copyAffine", c.getLocal("p1"), c.getLocal("pr")),
+ ...c.call(prefixField + "_one", c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2))),
+ ...c.ret([])
+ ]), c.if(c.call(prefixField + "_eq", x1, x2), c.if(c.call(prefixField + "_eq", y1, y2), [...c.call(prefix + "_doubleAffine", c.getLocal("p2"), c.getLocal("pr")), ...c.ret([])])), c.call(prefixField + "_sub", x2, x1, H), c.call(prefixField + "_sub", y2, y1, y2_minus_y1), c.call(prefixField + "_square", H, HH), c.call(prefixField + "_add", HH, HH, I), c.call(prefixField + "_add", I, I, I), c.call(prefixField + "_mul", H, I, J), c.call(prefixField + "_add", y2_minus_y1, y2_minus_y1, r), c.call(prefixField + "_mul", x1, I, V), c.call(prefixField + "_square", r, r2), c.call(prefixField + "_add", V, V, V2), c.call(prefixField + "_sub", r2, J, x3), c.call(prefixField + "_sub", x3, V2, x3), c.call(prefixField + "_mul", y1, J, y1_J2), c.call(prefixField + "_add", y1_J2, y1_J2, y1_J2), c.call(prefixField + "_sub", V, x3, y3), c.call(prefixField + "_mul", y3, r, y3), c.call(prefixField + "_sub", y3, y1_J2, y3), c.call(prefixField + "_add", H, H, z3));
+ }
+ function buildNeg() {
+ const f = module.addFunction(prefix + "_neg");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("p1");
+ const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ const z = c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2));
+ f.addCode(c.call(prefixField + "_copy", x, x3), c.call(prefixField + "_neg", y, y3), c.call(prefixField + "_copy", z, z3));
+ }
+ function buildNegAffine() {
+ const f = module.addFunction(prefix + "_negAffine");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("p1");
+ const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ f.addCode(c.call(prefixField + "_copy", x, x3), c.call(prefixField + "_neg", y, y3));
+ }
+ function buildSub() {
+ const f = module.addFunction(prefix + "_sub");
+ f.addParam("p1", "i32");
+ f.addParam("p2", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const AUX = c.i32_const(module.alloc(n8 * 3));
+ f.addCode(c.call(prefix + "_neg", c.getLocal("p2"), AUX), c.call(prefix + "_add", c.getLocal("p1"), AUX, c.getLocal("pr")));
+ }
+ function buildSubMixed() {
+ const f = module.addFunction(prefix + "_subMixed");
+ f.addParam("p1", "i32");
+ f.addParam("p2", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const AUX = c.i32_const(module.alloc(n8 * 3));
+ f.addCode(c.call(prefix + "_negAffine", c.getLocal("p2"), AUX), c.call(prefix + "_addMixed", c.getLocal("p1"), AUX, c.getLocal("pr")));
+ }
+ function buildSubAffine() {
+ const f = module.addFunction(prefix + "_subAffine");
+ f.addParam("p1", "i32");
+ f.addParam("p2", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const AUX = c.i32_const(module.alloc(n8 * 3));
+ f.addCode(c.call(prefix + "_negAffine", c.getLocal("p2"), AUX), c.call(prefix + "_addAffine", c.getLocal("p1"), AUX, c.getLocal("pr")));
+ }
+ function buildNormalize() {
+ const f = module.addFunction(prefix + "_normalize");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("p1");
+ const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ const z = c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2));
+ const Z_inv = c.i32_const(module.alloc(n8));
+ const Z2_inv = c.i32_const(module.alloc(n8));
+ const Z3_inv = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), c.call(prefix + "_zero", c.getLocal("pr")), [
+ ...c.call(prefixField + "_inverse", z, Z_inv),
+ ...c.call(prefixField + "_square", Z_inv, Z2_inv),
+ ...c.call(prefixField + "_mul", Z_inv, Z2_inv, Z3_inv),
+ ...c.call(prefixField + "_mul", x, Z2_inv, x3),
+ ...c.call(prefixField + "_mul", y, Z3_inv, y3),
+ ...c.call(prefixField + "_one", z3)
+ ]));
+ }
+ function buildToAffine() {
+ const f = module.addFunction(prefix + "_toAffine");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("p1");
+ const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ const z = c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ const Z_inv = c.i32_const(module.alloc(n8));
+ const Z2_inv = c.i32_const(module.alloc(n8));
+ const Z3_inv = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), [...c.call(prefixField + "_zero", x3), ...c.call(prefixField + "_zero", y3)], [
+ ...c.call(prefixField + "_inverse", z, Z_inv),
+ ...c.call(prefixField + "_square", Z_inv, Z2_inv),
+ ...c.call(prefixField + "_mul", Z_inv, Z2_inv, Z3_inv),
+ ...c.call(prefixField + "_mul", x, Z2_inv, x3),
+ ...c.call(prefixField + "_mul", y, Z3_inv, y3)
+ ]));
+ }
+ function buildToJacobian() {
+ const f = module.addFunction(prefix + "_toJacobian");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("p1");
+ const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2));
+ f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p1")), c.call(prefix + "_zero", c.getLocal("pr")), [
+ ...c.call(prefixField + "_one", z3),
+ ...c.call(prefixField + "_copy", y, y3),
+ ...c.call(prefixField + "_copy", x, x3)
+ ]));
+ }
+ function buildBatchToAffine() {
+ const f = module.addFunction(prefix + "_batchToAffine");
+ f.addParam("pIn", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pOut", "i32");
+ f.addLocal("pAux", "i32");
+ f.addLocal("itIn", "i32");
+ f.addLocal("itAux", "i32");
+ f.addLocal("itOut", "i32");
+ f.addLocal("i", "i32");
+ const c = f.getCodeBuilder();
+ const tmp = c.i32_const(module.alloc(n8));
+ f.addCode(c.setLocal("pAux", c.i32_load(c.i32_const(0))), c.i32_store(c.i32_const(0), c.i32_add(c.getLocal("pAux"), c.i32_mul(c.getLocal("n"), c.i32_const(n8)))), c.call(prefixField + "_batchInverse", c.i32_add(c.getLocal("pIn"), c.i32_const(n8 * 2)), c.i32_const(n8 * 3), c.getLocal("n"), c.getLocal("pAux"), c.i32_const(n8)), c.setLocal("itIn", c.getLocal("pIn")), c.setLocal("itAux", c.getLocal("pAux")), c.setLocal("itOut", c.getLocal("pOut")), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.if(c.call(prefixField + "_isZero", c.getLocal("itAux")), [...c.call(prefixField + "_zero", c.getLocal("itOut")), ...c.call(prefixField + "_zero", c.i32_add(c.getLocal("itOut"), c.i32_const(n8)))], [
+ ...c.call(prefixField + "_mul", c.getLocal("itAux"), c.i32_add(c.getLocal("itIn"), c.i32_const(n8)), tmp),
+ ...c.call(prefixField + "_square", c.getLocal("itAux"), c.getLocal("itAux")),
+ ...c.call(prefixField + "_mul", c.getLocal("itAux"), c.getLocal("itIn"), c.getLocal("itOut")),
+ ...c.call(prefixField + "_mul", c.getLocal("itAux"), tmp, c.i32_add(c.getLocal("itOut"), c.i32_const(n8)))
+ ]), c.setLocal("itIn", c.i32_add(c.getLocal("itIn"), c.i32_const(n8 * 3))), c.setLocal("itOut", c.i32_add(c.getLocal("itOut"), c.i32_const(n8 * 2))), c.setLocal("itAux", c.i32_add(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.i32_store(c.i32_const(0), c.getLocal("pAux")));
+ }
+ function buildReverseBytes() {
+ const f = module.addFunction(prefix + "__reverseBytes");
+ f.addParam("pIn", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pOut", "i32");
+ f.addLocal("itOut", "i32");
+ f.addLocal("itIn", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("itOut", c.i32_sub(c.i32_add(c.getLocal("pOut"), c.getLocal("n")), c.i32_const(1))), c.setLocal("itIn", c.getLocal("pIn")), c.block(c.loop(c.br_if(1, c.i32_lt_s(c.getLocal("itOut"), c.getLocal("pOut"))), c.i32_store8(c.getLocal("itOut"), c.i32_load8_u(c.getLocal("itIn"))), c.setLocal("itOut", c.i32_sub(c.getLocal("itOut"), c.i32_const(1))), c.setLocal("itIn", c.i32_add(c.getLocal("itIn"), c.i32_const(1))), c.br(0))));
+ }
+ function buildLEMtoC() {
+ const f = module.addFunction(prefix + "_LEMtoC");
+ f.addParam("pIn", "i32");
+ f.addParam("pOut", "i32");
+ const c = f.getCodeBuilder();
+ const tmp = c.i32_const(module.alloc(n8));
+ f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("pIn")), [
+ ...c.call(prefixField + "_zero", c.getLocal("pOut")),
+ ...c.i32_store8(c.getLocal("pOut"), c.i32_const(64)),
+ ...c.ret([])
+ ]), c.call(prefixField + "_fromMontgomery", c.getLocal("pIn"), tmp), c.call(prefix + "__reverseBytes", tmp, c.i32_const(n8), c.getLocal("pOut")), c.if(c.i32_eq(c.call(prefixField + "_sign", c.i32_add(c.getLocal("pIn"), c.i32_const(n8))), c.i32_const(-1)), c.i32_store8(c.getLocal("pOut"), c.i32_or(c.i32_load8_u(c.getLocal("pOut")), c.i32_const(128)))));
+ }
+ function buildLEMtoU() {
+ const f = module.addFunction(prefix + "_LEMtoU");
+ f.addParam("pIn", "i32");
+ f.addParam("pOut", "i32");
+ const c = f.getCodeBuilder();
+ const pTmp = module.alloc(n8 * 2);
+ const tmp = c.i32_const(pTmp);
+ const tmpX = c.i32_const(pTmp);
+ const tmpY = c.i32_const(pTmp + n8);
+ f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("pIn")), [...c.call(prefix + "_zeroAffine", c.getLocal("pOut")), ...c.ret([])]), c.call(prefix + "_fromMontgomeryAffine", c.getLocal("pIn"), tmp), c.call(prefix + "__reverseBytes", tmpX, c.i32_const(n8), c.getLocal("pOut")), c.call(prefix + "__reverseBytes", tmpY, c.i32_const(n8), c.i32_add(c.getLocal("pOut"), c.i32_const(n8))));
+ }
+ function buildUtoLEM() {
+ const f = module.addFunction(prefix + "_UtoLEM");
+ f.addParam("pIn", "i32");
+ f.addParam("pOut", "i32");
+ const c = f.getCodeBuilder();
+ const pTmp = module.alloc(n8 * 2);
+ const tmp = c.i32_const(pTmp);
+ const tmpX = c.i32_const(pTmp);
+ const tmpY = c.i32_const(pTmp + n8);
+ f.addCode(c.if(c.i32_and(c.i32_load8_u(c.getLocal("pIn")), c.i32_const(64)), [...c.call(prefix + "_zeroAffine", c.getLocal("pOut")), ...c.ret([])]), c.call(prefix + "__reverseBytes", c.getLocal("pIn"), c.i32_const(n8), tmpX), c.call(prefix + "__reverseBytes", c.i32_add(c.getLocal("pIn"), c.i32_const(n8)), c.i32_const(n8), tmpY), c.call(prefix + "_toMontgomeryAffine", tmp, c.getLocal("pOut")));
+ }
+ function buildCtoLEM() {
+ const f = module.addFunction(prefix + "_CtoLEM");
+ f.addParam("pIn", "i32");
+ f.addParam("pOut", "i32");
+ f.addLocal("firstByte", "i32");
+ f.addLocal("greatest", "i32");
+ const c = f.getCodeBuilder();
+ const pTmp = module.alloc(n8 * 2);
+ const tmpX = c.i32_const(pTmp);
+ const tmpY = c.i32_const(pTmp + n8);
+ f.addCode(c.setLocal("firstByte", c.i32_load8_u(c.getLocal("pIn"))), c.if(c.i32_and(c.getLocal("firstByte"), c.i32_const(64)), [...c.call(prefix + "_zeroAffine", c.getLocal("pOut")), ...c.ret([])]), c.setLocal("greatest", c.i32_and(c.getLocal("firstByte"), c.i32_const(128))), c.call(prefixField + "_copy", c.getLocal("pIn"), tmpY), c.i32_store8(tmpY, c.i32_and(c.getLocal("firstByte"), c.i32_const(63))), c.call(prefix + "__reverseBytes", tmpY, c.i32_const(n8), tmpX), c.call(prefixField + "_toMontgomery", tmpX, c.getLocal("pOut")), c.call(prefixField + "_square", c.getLocal("pOut"), tmpY), c.call(prefixField + "_mul", c.getLocal("pOut"), tmpY, tmpY), c.call(prefixField + "_add", tmpY, c.i32_const(pB), tmpY), c.call(prefixField + "_sqrt", tmpY, tmpY), c.call(prefixField + "_neg", tmpY, tmpX), c.if(c.i32_eq(c.call(prefixField + "_sign", tmpY), c.i32_const(-1)), c.if(c.getLocal("greatest"), c.call(prefixField + "_copy", tmpY, c.i32_add(c.getLocal("pOut"), c.i32_const(n8))), c.call(prefixField + "_neg", tmpY, c.i32_add(c.getLocal("pOut"), c.i32_const(n8)))), c.if(c.getLocal("greatest"), c.call(prefixField + "_neg", tmpY, c.i32_add(c.getLocal("pOut"), c.i32_const(n8))), c.call(prefixField + "_copy", tmpY, c.i32_add(c.getLocal("pOut"), c.i32_const(n8))))));
+ }
+ function buildInCurveAffine() {
+ const f = module.addFunction(prefix + "_inCurveAffine");
+ f.addParam("pIn", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("pIn");
+ const y = c.i32_add(c.getLocal("pIn"), c.i32_const(n8));
+ const y2 = c.i32_const(module.alloc(n8));
+ const x3b = c.i32_const(module.alloc(n8));
+ f.addCode(c.call(prefixField + "_square", y, y2), c.call(prefixField + "_square", x, x3b), c.call(prefixField + "_mul", x, x3b, x3b), c.call(prefixField + "_add", x3b, c.i32_const(pB), x3b), c.ret(c.call(prefixField + "_eq", y2, x3b)));
+ }
+ function buildInCurve() {
+ const f = module.addFunction(prefix + "_inCurve");
+ f.addParam("pIn", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const aux = c.i32_const(module.alloc(n8 * 2));
+ f.addCode(c.call(prefix + "_toAffine", c.getLocal("pIn"), aux), c.ret(c.call(prefix + "_inCurveAffine", aux)));
+ }
+ buildIsZeroAffine();
+ buildIsZero();
+ buildZeroAffine();
+ buildZero();
+ buildCopyAffine();
+ buildCopy();
+ buildToJacobian();
+ buildEqAffine();
+ buildEqMixed();
+ buildEq();
+ buildDoubleAffine();
+ buildDouble();
+ buildAddAffine();
+ buildAddMixed();
+ buildAdd();
+ buildNegAffine();
+ buildNeg();
+ buildSubAffine();
+ buildSubMixed();
+ buildSub();
+ buildFromMontgomeryAffine();
+ buildFromMontgomery();
+ buildToMontgomeryAffine();
+ buildToMontgomery();
+ buildToAffine();
+ buildInCurveAffine();
+ buildInCurve();
+ buildBatchToAffine();
+ buildNormalize();
+ buildReverseBytes();
+ buildLEMtoU();
+ buildLEMtoC();
+ buildUtoLEM();
+ buildCtoLEM();
+ build_batchconvertion_default(module, prefix + "_batchLEMtoU", prefix + "_LEMtoU", n8 * 2, n8 * 2);
+ build_batchconvertion_default(module, prefix + "_batchLEMtoC", prefix + "_LEMtoC", n8 * 2, n8);
+ build_batchconvertion_default(module, prefix + "_batchUtoLEM", prefix + "_UtoLEM", n8 * 2, n8 * 2);
+ build_batchconvertion_default(module, prefix + "_batchCtoLEM", prefix + "_CtoLEM", n8, n8 * 2, true);
+ build_batchconvertion_default(module, prefix + "_batchToJacobian", prefix + "_toJacobian", n8 * 2, n8 * 3, true);
+ buildMultiexp(module, prefix, prefix + "_multiexp", prefix + "_add", prefix + "_sub", n8 * 3);
+ buildMultiexp(module, prefix, prefix + "_multiexpAffine", prefix + "_addMixed", prefix + "_subMixed", n8 * 2);
+ buildTimesScalarNAF(module, prefix + "_timesScalar", n8 * 3, prefix + "_add", prefix + "_double", prefix + "_sub", prefix + "_copy", prefix + "_zero");
+ buildTimesScalarNAF(module, prefix + "_timesScalarAffine", n8 * 2, prefix + "_addMixed", prefix + "_double", prefix + "_subMixed", prefix + "_copyAffine", prefix + "_zero");
+ module.exportFunction(prefix + "_isZero");
+ module.exportFunction(prefix + "_isZeroAffine");
+ module.exportFunction(prefix + "_eq");
+ module.exportFunction(prefix + "_eqMixed");
+ module.exportFunction(prefix + "_eqAffine");
+ module.exportFunction(prefix + "_copy");
+ module.exportFunction(prefix + "_copyAffine");
+ module.exportFunction(prefix + "_zero");
+ module.exportFunction(prefix + "_zeroAffine");
+ module.exportFunction(prefix + "_double");
+ module.exportFunction(prefix + "_doubleAffine");
+ module.exportFunction(prefix + "_add");
+ module.exportFunction(prefix + "_addMixed");
+ module.exportFunction(prefix + "_addAffine");
+ module.exportFunction(prefix + "_neg");
+ module.exportFunction(prefix + "_negAffine");
+ module.exportFunction(prefix + "_sub");
+ module.exportFunction(prefix + "_subMixed");
+ module.exportFunction(prefix + "_subAffine");
+ module.exportFunction(prefix + "_fromMontgomery");
+ module.exportFunction(prefix + "_fromMontgomeryAffine");
+ module.exportFunction(prefix + "_toMontgomery");
+ module.exportFunction(prefix + "_toMontgomeryAffine");
+ module.exportFunction(prefix + "_timesScalar");
+ module.exportFunction(prefix + "_timesScalarAffine");
+ module.exportFunction(prefix + "_normalize");
+ module.exportFunction(prefix + "_LEMtoU");
+ module.exportFunction(prefix + "_LEMtoC");
+ module.exportFunction(prefix + "_UtoLEM");
+ module.exportFunction(prefix + "_CtoLEM");
+ module.exportFunction(prefix + "_batchLEMtoU");
+ module.exportFunction(prefix + "_batchLEMtoC");
+ module.exportFunction(prefix + "_batchUtoLEM");
+ module.exportFunction(prefix + "_batchCtoLEM");
+ module.exportFunction(prefix + "_toAffine");
+ module.exportFunction(prefix + "_toJacobian");
+ module.exportFunction(prefix + "_batchToAffine");
+ module.exportFunction(prefix + "_batchToJacobian");
+ module.exportFunction(prefix + "_inCurve");
+ module.exportFunction(prefix + "_inCurveAffine");
+ return prefix;
+}
+//#endregion
+//#region src/build_fft.js
+function buildFFT(module, prefix, gPrefix, fPrefix, opGtimesF) {
+ const n8f = module.modules[fPrefix].n64 * 8;
+ const n8g = module.modules[gPrefix].n64 * 8;
+ const q = module.modules[fPrefix].q;
+ let rem = q - 1n;
+ let maxBits = 0;
+ while (!isOdd(rem)) {
+ maxBits++;
+ rem = rem >> 1n;
+ }
+ let nr = 2n;
+ while (modPow(nr, q >> 1n, q) === 1n) nr = nr + 1n;
+ const w = new Array(maxBits + 1);
+ w[maxBits] = modPow(nr, rem, q);
+ let n = maxBits - 1;
+ while (n >= 0) {
+ w[n] = modPow(w[n + 1], 2n, q);
+ n--;
+ }
+ const bytes = [];
+ const R = (1n << BigInt(n8f * 8)) % q;
+ for (let i = 0; i < w.length; i++) {
+ const m = w[i] * R % q;
+ bytes.push(...bigInt2BytesLE(m, n8f));
+ }
+ const ROOTs = module.alloc(bytes);
+ const i2 = new Array(maxBits + 1);
+ i2[0] = 1n;
+ for (let i = 1; i <= maxBits; i++) i2[i] = i2[i - 1] * 2n;
+ const bytesi2 = [];
+ for (let i = 0; i <= maxBits; i++) {
+ const m = modInv(i2[i], q) * R % q;
+ bytesi2.push(...bigInt2BytesLE(m, n8f));
+ }
+ const INV2 = module.alloc(bytesi2);
+ const shift = modPow(nr, 2n, q);
+ const bytesShiftToSmallM = [];
+ const bytesSConst = [];
+ for (let i = 0; i <= maxBits; i++) {
+ const shiftToSmallM = modPow(shift, 2n ** BigInt(i), q);
+ const sConst = modInv(q + 1n - shiftToSmallM, q);
+ bytesShiftToSmallM.push(...bigInt2BytesLE(shiftToSmallM * R % q, n8f));
+ bytesSConst.push(...bigInt2BytesLE(sConst * R % q, n8f));
+ }
+ const SHIFT_TO_M = module.alloc(bytesShiftToSmallM);
+ const SCONST = module.alloc(bytesSConst);
+ function rev(x) {
+ let r = 0;
+ for (let i = 0; i < 8; i++) if (x & 1 << i) r = r | 128 >> i;
+ return r;
+ }
+ const rtable = Array(256);
+ for (let i = 0; i < 256; i++) rtable[i] = rev(i);
+ const REVTABLE = module.alloc(rtable);
+ function buildLog2() {
+ const f = module.addFunction(prefix + "__log2");
+ f.addParam("n", "i32");
+ f.setReturnType("i32");
+ f.addLocal("bits", "i32");
+ f.addLocal("aux", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("aux", c.i32_shr_u(c.getLocal("n"), c.i32_const(1))));
+ f.addCode(c.setLocal("bits", c.i32_const(0)));
+ f.addCode(c.block(c.loop(c.br_if(1, c.i32_eqz(c.getLocal("aux"))), c.setLocal("aux", c.i32_shr_u(c.getLocal("aux"), c.i32_const(1))), c.setLocal("bits", c.i32_add(c.getLocal("bits"), c.i32_const(1))), c.br(0))));
+ f.addCode(c.if(c.i32_ne(c.getLocal("n"), c.i32_shl(c.i32_const(1), c.getLocal("bits"))), c.unreachable()));
+ f.addCode(c.if(c.i32_gt_u(c.getLocal("bits"), c.i32_const(maxBits)), c.unreachable()));
+ f.addCode(c.getLocal("bits"));
+ }
+ function buildFFT() {
+ const f = module.addFunction(prefix + "_fft");
+ f.addParam("px", "i32");
+ f.addParam("n", "i32");
+ f.addLocal("bits", "i32");
+ const c = f.getCodeBuilder();
+ const One = c.i32_const(module.alloc(n8f));
+ f.addCode(c.setLocal("bits", c.call(prefix + "__log2", c.getLocal("n"))), c.call(fPrefix + "_one", One), c.call(prefix + "_rawfft", c.getLocal("px"), c.getLocal("bits"), c.i32_const(0), One));
+ }
+ function buildIFFT() {
+ const f = module.addFunction(prefix + "_ifft");
+ f.addParam("px", "i32");
+ f.addParam("n", "i32");
+ f.addLocal("bits", "i32");
+ f.addLocal("pInv2", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("bits", c.call(prefix + "__log2", c.getLocal("n"))), c.setLocal("pInv2", c.i32_add(c.i32_const(INV2), c.i32_mul(c.getLocal("bits"), c.i32_const(n8f)))), c.call(prefix + "_rawfft", c.getLocal("px"), c.getLocal("bits"), c.i32_const(1), c.getLocal("pInv2")));
+ }
+ function buildRawFFT() {
+ const f = module.addFunction(prefix + "_rawfft");
+ f.addParam("px", "i32");
+ f.addParam("bits", "i32");
+ f.addParam("reverse", "i32");
+ f.addParam("mulFactor", "i32");
+ f.addLocal("s", "i32");
+ f.addLocal("k", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("m", "i32");
+ f.addLocal("mdiv2", "i32");
+ f.addLocal("n", "i32");
+ f.addLocal("pwm", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ const c = f.getCodeBuilder();
+ const W = c.i32_const(module.alloc(n8f));
+ const T = c.i32_const(module.alloc(n8g));
+ const U = c.i32_const(module.alloc(n8g));
+ f.addCode(c.call(prefix + "__reversePermutation", c.getLocal("px"), c.getLocal("bits")), c.setLocal("n", c.i32_shl(c.i32_const(1), c.getLocal("bits"))), c.setLocal("s", c.i32_const(1)), c.block(c.loop(c.br_if(1, c.i32_gt_u(c.getLocal("s"), c.getLocal("bits"))), c.setLocal("m", c.i32_shl(c.i32_const(1), c.getLocal("s"))), c.setLocal("pwm", c.i32_add(c.i32_const(ROOTs), c.i32_mul(c.getLocal("s"), c.i32_const(n8f)))), c.setLocal("k", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_ge_u(c.getLocal("k"), c.getLocal("n"))), c.call(fPrefix + "_one", W), c.setLocal("mdiv2", c.i32_shr_u(c.getLocal("m"), c.i32_const(1))), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_ge_u(c.getLocal("j"), c.getLocal("mdiv2"))), c.setLocal("idx1", c.i32_add(c.getLocal("px"), c.i32_mul(c.i32_add(c.getLocal("k"), c.getLocal("j")), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("idx1"), c.i32_mul(c.getLocal("mdiv2"), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx2"), W, T), c.call(gPrefix + "_copy", c.getLocal("idx1"), U), c.call(gPrefix + "_add", U, T, c.getLocal("idx1")), c.call(gPrefix + "_sub", U, T, c.getLocal("idx2")), c.call(fPrefix + "_mul", W, c.getLocal("pwm"), W), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("k", c.i32_add(c.getLocal("k"), c.getLocal("m"))), c.br(0))), c.setLocal("s", c.i32_add(c.getLocal("s"), c.i32_const(1))), c.br(0))), c.call(prefix + "__fftFinal", c.getLocal("px"), c.getLocal("bits"), c.getLocal("reverse"), c.getLocal("mulFactor")));
+ }
+ function buildFinalInverse() {
+ const f = module.addFunction(prefix + "__fftFinal");
+ f.addParam("px", "i32");
+ f.addParam("bits", "i32");
+ f.addParam("reverse", "i32");
+ f.addParam("mulFactor", "i32");
+ f.addLocal("n", "i32");
+ f.addLocal("ndiv2", "i32");
+ f.addLocal("pInv2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("mask", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ const c = f.getCodeBuilder();
+ const T = c.i32_const(module.alloc(n8g));
+ f.addCode(c.if(c.i32_and(c.i32_eqz(c.getLocal("reverse")), c.call(fPrefix + "_isOne", c.getLocal("mulFactor"))), c.ret([])), c.setLocal("n", c.i32_shl(c.i32_const(1), c.getLocal("bits"))), c.setLocal("mask", c.i32_sub(c.getLocal("n"), c.i32_const(1))), c.setLocal("i", c.i32_const(1)), c.setLocal("ndiv2", c.i32_shr_u(c.getLocal("n"), c.i32_const(1))), c.block(c.loop(c.br_if(1, c.i32_ge_u(c.getLocal("i"), c.getLocal("ndiv2"))), c.setLocal("idx1", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("px"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.getLocal("i")), c.i32_const(n8g)))), c.if(c.getLocal("reverse"), c.if(c.call(fPrefix + "_isOne", c.getLocal("mulFactor")), [
+ ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T),
+ ...c.call(gPrefix + "_copy", c.getLocal("idx2"), c.getLocal("idx1")),
+ ...c.call(gPrefix + "_copy", T, c.getLocal("idx2"))
+ ], [
+ ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T),
+ ...c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("mulFactor"), c.getLocal("idx1")),
+ ...c.call(opGtimesF, T, c.getLocal("mulFactor"), c.getLocal("idx2"))
+ ]), c.if(c.call(fPrefix + "_isOne", c.getLocal("mulFactor")), [], [...c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("mulFactor"), c.getLocal("idx1")), ...c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("mulFactor"), c.getLocal("idx2"))])), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.if(c.call(fPrefix + "_isOne", c.getLocal("mulFactor")), [], [
+ ...c.call(opGtimesF, c.getLocal("px"), c.getLocal("mulFactor"), c.getLocal("px")),
+ ...c.setLocal("idx2", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("ndiv2"), c.i32_const(n8g)))),
+ ...c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("mulFactor"), c.getLocal("idx2"))
+ ]));
+ }
+ function buildReversePermutation() {
+ const f = module.addFunction(prefix + "__reversePermutation");
+ f.addParam("px", "i32");
+ f.addParam("bits", "i32");
+ f.addLocal("n", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("ri", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ const c = f.getCodeBuilder();
+ const T = c.i32_const(module.alloc(n8g));
+ f.addCode(c.setLocal("n", c.i32_shl(c.i32_const(1), c.getLocal("bits"))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("ri", c.call(prefix + "__rev", c.getLocal("i"), c.getLocal("bits"))), c.setLocal("idx2", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("ri"), c.i32_const(n8g)))), c.if(c.i32_lt_u(c.getLocal("i"), c.getLocal("ri")), [
+ ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T),
+ ...c.call(gPrefix + "_copy", c.getLocal("idx2"), c.getLocal("idx1")),
+ ...c.call(gPrefix + "_copy", T, c.getLocal("idx2"))
+ ]), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ function buildRev() {
+ const f = module.addFunction(prefix + "__rev");
+ f.addParam("x", "i32");
+ f.addParam("bits", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.i32_rotl(c.i32_add(c.i32_add(c.i32_shl(c.i32_load8_u(c.i32_and(c.getLocal("x"), c.i32_const(255)), REVTABLE, 0), c.i32_const(24)), c.i32_shl(c.i32_load8_u(c.i32_and(c.i32_shr_u(c.getLocal("x"), c.i32_const(8)), c.i32_const(255)), REVTABLE, 0), c.i32_const(16))), c.i32_add(c.i32_shl(c.i32_load8_u(c.i32_and(c.i32_shr_u(c.getLocal("x"), c.i32_const(16)), c.i32_const(255)), REVTABLE, 0), c.i32_const(8)), c.i32_load8_u(c.i32_and(c.i32_shr_u(c.getLocal("x"), c.i32_const(24)), c.i32_const(255)), REVTABLE, 0))), c.getLocal("bits")));
+ }
+ function buildFFTJoin() {
+ const f = module.addFunction(prefix + "_fftJoin");
+ f.addParam("pBuff1", "i32");
+ f.addParam("pBuff2", "i32");
+ f.addParam("n", "i32");
+ f.addParam("first", "i32");
+ f.addParam("inc", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ const c = f.getCodeBuilder();
+ const W = c.i32_const(module.alloc(n8f));
+ const T = c.i32_const(module.alloc(n8g));
+ const U = c.i32_const(module.alloc(n8g));
+ f.addCode(c.call(fPrefix + "_copy", c.getLocal("first"), W), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff1"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff2"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx2"), W, T), c.call(gPrefix + "_copy", c.getLocal("idx1"), U), c.call(gPrefix + "_add", U, T, c.getLocal("idx1")), c.call(gPrefix + "_sub", U, T, c.getLocal("idx2")), c.call(fPrefix + "_mul", W, c.getLocal("inc"), W), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ function buildFFTJoinExt() {
+ const f = module.addFunction(prefix + "_fftJoinExt");
+ f.addParam("pBuff1", "i32");
+ f.addParam("pBuff2", "i32");
+ f.addParam("n", "i32");
+ f.addParam("first", "i32");
+ f.addParam("inc", "i32");
+ f.addParam("totalBits", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("pShiftToM", "i32");
+ const c = f.getCodeBuilder();
+ const W = c.i32_const(module.alloc(n8f));
+ const U = c.i32_const(module.alloc(n8g));
+ f.addCode(c.setLocal("pShiftToM", c.i32_add(c.i32_const(SHIFT_TO_M), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.call(fPrefix + "_copy", c.getLocal("first"), W), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff1"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff2"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.call(gPrefix + "_add", c.getLocal("idx1"), c.getLocal("idx2"), U), c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("pShiftToM"), c.getLocal("idx2")), c.call(gPrefix + "_add", c.getLocal("idx1"), c.getLocal("idx2"), c.getLocal("idx2")), c.call(opGtimesF, c.getLocal("idx2"), W, c.getLocal("idx2")), c.call(gPrefix + "_copy", U, c.getLocal("idx1")), c.call(fPrefix + "_mul", W, c.getLocal("inc"), W), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ function buildFFTJoinExtInv() {
+ const f = module.addFunction(prefix + "_fftJoinExtInv");
+ f.addParam("pBuff1", "i32");
+ f.addParam("pBuff2", "i32");
+ f.addParam("n", "i32");
+ f.addParam("first", "i32");
+ f.addParam("inc", "i32");
+ f.addParam("totalBits", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("pShiftToM", "i32");
+ f.addLocal("pSConst", "i32");
+ const c = f.getCodeBuilder();
+ const W = c.i32_const(module.alloc(n8f));
+ const U = c.i32_const(module.alloc(n8g));
+ f.addCode(c.setLocal("pShiftToM", c.i32_add(c.i32_const(SHIFT_TO_M), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.setLocal("pSConst", c.i32_add(c.i32_const(SCONST), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.call(fPrefix + "_copy", c.getLocal("first"), W), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff1"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff2"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx2"), W, U), c.call(gPrefix + "_sub", c.getLocal("idx1"), U, c.getLocal("idx2")), c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("pSConst"), c.getLocal("idx2")), c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("pShiftToM"), c.getLocal("idx1")), c.call(gPrefix + "_sub", U, c.getLocal("idx1"), c.getLocal("idx1")), c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("pSConst"), c.getLocal("idx1")), c.call(fPrefix + "_mul", W, c.getLocal("inc"), W), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ function buildPrepareLagrangeEvaluation() {
+ const f = module.addFunction(prefix + "_prepareLagrangeEvaluation");
+ f.addParam("pBuff1", "i32");
+ f.addParam("pBuff2", "i32");
+ f.addParam("n", "i32");
+ f.addParam("first", "i32");
+ f.addParam("inc", "i32");
+ f.addParam("totalBits", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("pShiftToM", "i32");
+ f.addLocal("pSConst", "i32");
+ const c = f.getCodeBuilder();
+ const W = c.i32_const(module.alloc(n8f));
+ const U = c.i32_const(module.alloc(n8g));
+ f.addCode(c.setLocal("pShiftToM", c.i32_add(c.i32_const(SHIFT_TO_M), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.setLocal("pSConst", c.i32_add(c.i32_const(SCONST), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.call(fPrefix + "_copy", c.getLocal("first"), W), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff1"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff2"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("pShiftToM"), U), c.call(gPrefix + "_sub", c.getLocal("idx2"), U, U), c.call(gPrefix + "_sub", c.getLocal("idx1"), c.getLocal("idx2"), c.getLocal("idx2")), c.call(opGtimesF, U, c.getLocal("pSConst"), c.getLocal("idx1")), c.call(opGtimesF, c.getLocal("idx2"), W, c.getLocal("idx2")), c.call(fPrefix + "_mul", W, c.getLocal("inc"), W), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ function buildFFTMix() {
+ const f = module.addFunction(prefix + "_fftMix");
+ f.addParam("pBuff", "i32");
+ f.addParam("n", "i32");
+ f.addParam("exp", "i32");
+ f.addLocal("nGroups", "i32");
+ f.addLocal("nPerGroup", "i32");
+ f.addLocal("nPerGroupDiv2", "i32");
+ f.addLocal("pairOffset", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("pwm", "i32");
+ const c = f.getCodeBuilder();
+ const W = c.i32_const(module.alloc(n8f));
+ const T = c.i32_const(module.alloc(n8g));
+ const U = c.i32_const(module.alloc(n8g));
+ f.addCode(c.setLocal("nPerGroup", c.i32_shl(c.i32_const(1), c.getLocal("exp"))), c.setLocal("nPerGroupDiv2", c.i32_shr_u(c.getLocal("nPerGroup"), c.i32_const(1))), c.setLocal("nGroups", c.i32_shr_u(c.getLocal("n"), c.getLocal("exp"))), c.setLocal("pairOffset", c.i32_mul(c.getLocal("nPerGroupDiv2"), c.i32_const(n8g))), c.setLocal("pwm", c.i32_add(c.i32_const(ROOTs), c.i32_mul(c.getLocal("exp"), c.i32_const(n8f)))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("nGroups"))), c.call(fPrefix + "_one", W), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("nPerGroupDiv2"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.i32_add(c.i32_mul(c.getLocal("i"), c.getLocal("nPerGroup")), c.getLocal("j")), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("idx1"), c.getLocal("pairOffset"))), c.call(opGtimesF, c.getLocal("idx2"), W, T), c.call(gPrefix + "_copy", c.getLocal("idx1"), U), c.call(gPrefix + "_add", U, T, c.getLocal("idx1")), c.call(gPrefix + "_sub", U, T, c.getLocal("idx2")), c.call(fPrefix + "_mul", W, c.getLocal("pwm"), W), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ function buildFFTFinal() {
+ const f = module.addFunction(prefix + "_fftFinal");
+ f.addParam("pBuff", "i32");
+ f.addParam("n", "i32");
+ f.addParam("factor", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("ndiv2", "i32");
+ const c = f.getCodeBuilder();
+ const T = c.i32_const(module.alloc(n8g));
+ f.addCode(c.setLocal("ndiv2", c.i32_shr_u(c.getLocal("n"), c.i32_const(1))), c.if(c.i32_and(c.getLocal("n"), c.i32_const(1)), c.call(opGtimesF, c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.getLocal("ndiv2"), c.i32_const(n8g))), c.getLocal("factor"), c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.getLocal("ndiv2"), c.i32_const(n8g))))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_ge_u(c.getLocal("i"), c.getLocal("ndiv2"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.i32_sub(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.getLocal("i")), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("factor"), T), c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("factor"), c.getLocal("idx2")), c.call(gPrefix + "_copy", T, c.getLocal("idx1")), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ buildRev();
+ buildReversePermutation();
+ buildFinalInverse();
+ buildRawFFT();
+ buildLog2();
+ buildFFT();
+ buildIFFT();
+ buildFFTJoin();
+ buildFFTJoinExt();
+ buildFFTJoinExtInv();
+ buildFFTMix();
+ buildFFTFinal();
+ buildPrepareLagrangeEvaluation();
+ module.exportFunction(prefix + "__reversePermutation");
+ module.exportFunction(prefix + "_fft");
+ module.exportFunction(prefix + "_ifft");
+ module.exportFunction(prefix + "_rawfft");
+ module.exportFunction(prefix + "_fftJoin");
+ module.exportFunction(prefix + "_fftJoinExt");
+ module.exportFunction(prefix + "_fftJoinExtInv");
+ module.exportFunction(prefix + "_fftMix");
+ module.exportFunction(prefix + "_fftFinal");
+ module.exportFunction(prefix + "_prepareLagrangeEvaluation");
+}
+//#endregion
+//#region src/build_pol.js
+function buildPol(module, prefix, prefixField) {
+ const n8 = module.modules[prefixField].n64 * 8;
+ function buildZero() {
+ const f = module.addFunction(prefix + "_zero");
+ f.addParam("px", "i32");
+ f.addParam("n", "i32");
+ f.addLocal("lastp", "i32");
+ f.addLocal("p", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("p", c.getLocal("px")), c.setLocal("lastp", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("n"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("p"), c.getLocal("lastp"))), c.call(prefixField + "_zero", c.getLocal("p")), c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(n8))), c.br(0))));
+ }
+ function buildConstructLC() {
+ const f = module.addFunction(prefix + "_constructLC");
+ f.addParam("ppolynomials", "i32");
+ f.addParam("psignals", "i32");
+ f.addParam("nSignals", "i32");
+ f.addParam("pres", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("pp", "i32");
+ f.addLocal("ps", "i32");
+ f.addLocal("pd", "i32");
+ f.addLocal("ncoefs", "i32");
+ const c = f.getCodeBuilder();
+ const aux = c.i32_const(module.alloc(n8));
+ f.addCode(c.setLocal("i", c.i32_const(0)), c.setLocal("pp", c.getLocal("ppolynomials")), c.setLocal("ps", c.getLocal("psignals")), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("nSignals"))), c.setLocal("ncoefs", c.i32_load(c.getLocal("pp"))), c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(4))), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("ncoefs"))), c.setLocal("pd", c.i32_add(c.getLocal("pres"), c.i32_mul(c.i32_load(c.getLocal("pp")), c.i32_const(n8)))), c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(4))), c.call(prefixField + "_mul", c.getLocal("ps"), c.getLocal("pp"), aux), c.call(prefixField + "_add", aux, c.getLocal("pd"), c.getLocal("pd")), c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(n8))), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("ps", c.i32_add(c.getLocal("ps"), c.i32_const(n8))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ buildZero();
+ buildConstructLC();
+ module.exportFunction(prefix + "_zero");
+ module.exportFunction(prefix + "_constructLC");
+ return prefix;
+}
+//#endregion
+//#region src/build_qap.js
+function buildQAP(module, prefix, prefixField) {
+ const n8 = module.modules[prefixField].n64 * 8;
+ function buildBuildABC() {
+ const f = module.addFunction(prefix + "_buildABC");
+ f.addParam("pCoefs", "i32");
+ f.addParam("nCoefs", "i32");
+ f.addParam("pWitness", "i32");
+ f.addParam("pA", "i32");
+ f.addParam("pB", "i32");
+ f.addParam("pC", "i32");
+ f.addParam("offsetOut", "i32");
+ f.addParam("nOut", "i32");
+ f.addParam("offsetWitness", "i32");
+ f.addParam("nWitness", "i32");
+ f.addLocal("it", "i32");
+ f.addLocal("ita", "i32");
+ f.addLocal("itb", "i32");
+ f.addLocal("last", "i32");
+ f.addLocal("m", "i32");
+ f.addLocal("c", "i32");
+ f.addLocal("s", "i32");
+ f.addLocal("pOut", "i32");
+ const c = f.getCodeBuilder();
+ const aux = c.i32_const(module.alloc(n8));
+ f.addCode(c.setLocal("ita", c.getLocal("pA")), c.setLocal("itb", c.getLocal("pB")), c.setLocal("last", c.i32_add(c.getLocal("pA"), c.i32_mul(c.getLocal("nOut"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("ita"), c.getLocal("last"))), c.call(prefixField + "_zero", c.getLocal("ita")), c.call(prefixField + "_zero", c.getLocal("itb")), c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), c.br(0))), c.setLocal("it", c.getLocal("pCoefs")), c.setLocal("last", c.i32_add(c.getLocal("pCoefs"), c.i32_mul(c.getLocal("nCoefs"), c.i32_const(n8 + 12)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("it"), c.getLocal("last"))), c.setLocal("s", c.i32_load(c.getLocal("it"), 8)), c.if(c.i32_or(c.i32_lt_u(c.getLocal("s"), c.getLocal("offsetWitness")), c.i32_ge_u(c.getLocal("s"), c.i32_add(c.getLocal("offsetWitness"), c.getLocal("nWitness")))), [...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8 + 12))), ...c.br(1)]), c.setLocal("m", c.i32_load(c.getLocal("it"))), c.if(c.i32_eq(c.getLocal("m"), c.i32_const(0)), c.setLocal("pOut", c.getLocal("pA")), c.if(c.i32_eq(c.getLocal("m"), c.i32_const(1)), c.setLocal("pOut", c.getLocal("pB")), [...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8 + 12))), ...c.br(1)])), c.setLocal("c", c.i32_load(c.getLocal("it"), 4)), c.if(c.i32_or(c.i32_lt_u(c.getLocal("c"), c.getLocal("offsetOut")), c.i32_ge_u(c.getLocal("c"), c.i32_add(c.getLocal("offsetOut"), c.getLocal("nOut")))), [...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8 + 12))), ...c.br(1)]), c.setLocal("pOut", c.i32_add(c.getLocal("pOut"), c.i32_mul(c.i32_sub(c.getLocal("c"), c.getLocal("offsetOut")), c.i32_const(n8)))), c.call(prefixField + "_mul", c.i32_add(c.getLocal("pWitness"), c.i32_mul(c.i32_sub(c.getLocal("s"), c.getLocal("offsetWitness")), c.i32_const(n8))), c.i32_add(c.getLocal("it"), c.i32_const(12)), aux), c.call(prefixField + "_add", c.getLocal("pOut"), aux, c.getLocal("pOut")), c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8 + 12))), c.br(0))), c.setLocal("ita", c.getLocal("pA")), c.setLocal("itb", c.getLocal("pB")), c.setLocal("it", c.getLocal("pC")), c.setLocal("last", c.i32_add(c.getLocal("pA"), c.i32_mul(c.getLocal("nOut"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("ita"), c.getLocal("last"))), c.call(prefixField + "_mul", c.getLocal("ita"), c.getLocal("itb"), c.getLocal("it")), c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8))), c.br(0))));
+ }
+ function buildJoinABC() {
+ const f = module.addFunction(prefix + "_joinABC");
+ f.addParam("pA", "i32");
+ f.addParam("pB", "i32");
+ f.addParam("pC", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pP", "i32");
+ f.addLocal("ita", "i32");
+ f.addLocal("itb", "i32");
+ f.addLocal("itc", "i32");
+ f.addLocal("itp", "i32");
+ f.addLocal("last", "i32");
+ const c = f.getCodeBuilder();
+ const aux = c.i32_const(module.alloc(n8));
+ f.addCode(c.setLocal("ita", c.getLocal("pA")), c.setLocal("itb", c.getLocal("pB")), c.setLocal("itc", c.getLocal("pC")), c.setLocal("itp", c.getLocal("pP")), c.setLocal("last", c.i32_add(c.getLocal("pA"), c.i32_mul(c.getLocal("n"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("ita"), c.getLocal("last"))), c.call(prefixField + "_mul", c.getLocal("ita"), c.getLocal("itb"), aux), c.call(prefixField + "_sub", aux, c.getLocal("itc"), c.getLocal("itp")), c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), c.setLocal("itc", c.i32_add(c.getLocal("itc"), c.i32_const(n8))), c.setLocal("itp", c.i32_add(c.getLocal("itp"), c.i32_const(n8))), c.br(0))));
+ }
+ function buildBatchAdd() {
+ const f = module.addFunction(prefix + "_batchAdd");
+ f.addParam("pa", "i32");
+ f.addParam("pb", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pr", "i32");
+ f.addLocal("ita", "i32");
+ f.addLocal("itb", "i32");
+ f.addLocal("itr", "i32");
+ f.addLocal("last", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.setLocal("ita", c.getLocal("pa")), c.setLocal("itb", c.getLocal("pb")), c.setLocal("itr", c.getLocal("pr")), c.setLocal("last", c.i32_add(c.getLocal("pa"), c.i32_mul(c.getLocal("n"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("ita"), c.getLocal("last"))), c.call(prefixField + "_add", c.getLocal("ita"), c.getLocal("itb"), c.getLocal("itr")), c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), c.setLocal("itr", c.i32_add(c.getLocal("itr"), c.i32_const(n8))), c.br(0))));
+ }
+ buildBuildABC();
+ buildJoinABC();
+ buildBatchAdd();
+ module.exportFunction(prefix + "_buildABC");
+ module.exportFunction(prefix + "_joinABC");
+ module.exportFunction(prefix + "_batchAdd");
+ return prefix;
+}
+//#endregion
+//#region src/build_applykey.js
+function buildApplyKey(module, fnName, gPrefix, frPrefix, sizeGIn, sizeGOut, sizeF, opGtimesF) {
+ const f = module.addFunction(fnName);
+ f.addParam("pIn", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pFirst", "i32");
+ f.addParam("pInc", "i32");
+ f.addParam("pOut", "i32");
+ f.addLocal("pOldFree", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("pFrom", "i32");
+ f.addLocal("pTo", "i32");
+ const c = f.getCodeBuilder();
+ const t = c.i32_const(module.alloc(sizeF));
+ f.addCode(c.setLocal("pFrom", c.getLocal("pIn")), c.setLocal("pTo", c.getLocal("pOut")));
+ f.addCode(c.call(frPrefix + "_copy", c.getLocal("pFirst"), t));
+ f.addCode(c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(opGtimesF, c.getLocal("pFrom"), t, c.getLocal("pTo")), c.setLocal("pFrom", c.i32_add(c.getLocal("pFrom"), c.i32_const(sizeGIn))), c.setLocal("pTo", c.i32_add(c.getLocal("pTo"), c.i32_const(sizeGOut))), c.call(frPrefix + "_mul", t, c.getLocal("pInc"), t), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ module.exportFunction(fnName);
+}
+//#endregion
+//#region src/bn128/build_bn128.js
+function buildBN128(module, _prefix) {
+ const prefix = _prefix || "bn128";
+ if (module.modules[prefix]) return prefix;
+ const q = 21888242871839275222246405745257275088696311157297823662689037894645226208583n;
+ const r = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
+ const n64 = Math.floor((bitLength(q - 1n) - 1) / 64) + 1;
+ const n8 = n64 * 8;
+ const frsize = n8;
+ const f1size = n8;
+ const f2size = f1size * 2;
+ const ftsize = f1size * 12;
+ const pr = module.alloc(bigInt2BytesLE(r, frsize));
+ const f1mPrefix = buildF1m(module, q, "f1m");
+ buildF1(module, r, "fr", "frm");
+ const pG1b = module.alloc(bigInt2BytesLE(toMontgomery(3n), f1size));
+ const g1mPrefix = buildCurve(module, "g1m", "f1m", pG1b);
+ buildFFT(module, "frm", "frm", "frm", "frm_mul");
+ buildPol(module, "pol", "frm");
+ buildQAP(module, "qap", "frm");
+ const f2mPrefix = buildF2m(module, "f1m_neg", "f2m", "f1m");
+ const pG2b = module.alloc([...bigInt2BytesLE(toMontgomery(19485874751759354771024239261021720505790618469301721065564631296452457478373n), f1size), ...bigInt2BytesLE(toMontgomery(266929791119991161246907387137283842545076965332900288569378510910307636690n), f1size)]);
+ const g2mPrefix = buildCurve(module, "g2m", "f2m", pG2b);
+ function buildGTimesFr(fnName, opMul) {
+ const f = module.addFunction(fnName);
+ f.addParam("pG", "i32");
+ f.addParam("pFr", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const AUX = c.i32_const(module.alloc(n8));
+ f.addCode(c.call("frm_fromMontgomery", c.getLocal("pFr"), AUX), c.call(opMul, c.getLocal("pG"), AUX, c.i32_const(n8), c.getLocal("pr")));
+ module.exportFunction(fnName);
+ }
+ buildGTimesFr("g1m_timesFr", "g1m_timesScalar");
+ buildFFT(module, "g1m", "g1m", "frm", "g1m_timesFr");
+ buildGTimesFr("g2m_timesFr", "g2m_timesScalar");
+ buildFFT(module, "g2m", "g2m", "frm", "g2m_timesFr");
+ buildGTimesFr("g1m_timesFrAffine", "g1m_timesScalarAffine");
+ buildGTimesFr("g2m_timesFrAffine", "g2m_timesScalarAffine");
+ buildApplyKey(module, "frm_batchApplyKey", "fmr", "frm", n8, n8, n8, "frm_mul");
+ buildApplyKey(module, "g1m_batchApplyKey", "g1m", "frm", n8 * 3, n8 * 3, n8, "g1m_timesFr");
+ buildApplyKey(module, "g1m_batchApplyKeyMixed", "g1m", "frm", n8 * 2, n8 * 3, n8, "g1m_timesFrAffine");
+ buildApplyKey(module, "g2m_batchApplyKey", "g2m", "frm", n8 * 2 * 3, n8 * 3 * 2, n8, "g2m_timesFr");
+ buildApplyKey(module, "g2m_batchApplyKeyMixed", "g2m", "frm", n8 * 2 * 2, n8 * 3 * 2, n8, "g2m_timesFrAffine");
+ function toMontgomery(a) {
+ return BigInt(a) * (1n << BigInt(f1size * 8)) % q;
+ }
+ const G1gen = [
+ 1n,
+ 2n,
+ 1n
+ ];
+ const pG1gen = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(G1gen[0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G1gen[1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G1gen[2]), f1size)
+ ]);
+ const G1zero = [
+ 0n,
+ 1n,
+ 0n
+ ];
+ const pG1zero = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(G1zero[0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G1zero[1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G1zero[2]), f1size)
+ ]);
+ const G2gen = [
+ [10857046999023057135944570762232829481370756359578518086990519993285655852781n, 11559732032986387107991004021392285783925812861821192530917403151452391805634n],
+ [8495653923123431417604973247489272438418190587263600148770280649306958101930n, 4082367875863433681332203403145435568316851327593401208105741076214120093531n],
+ [1n, 0n]
+ ];
+ const pG2gen = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(G2gen[0][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[0][1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[1][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[1][1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[2][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[2][1]), f1size)
+ ]);
+ const G2zero = [
+ [0n, 0n],
+ [1n, 0n],
+ [0n, 0n]
+ ];
+ const pG2zero = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(G2zero[0][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[0][1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[1][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[1][1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[2][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[2][1]), f1size)
+ ]);
+ const pOneT = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(1), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size),
+ ...bigInt2BytesLE(toMontgomery(0), f1size)
+ ]);
+ const pNonResidueF6 = module.alloc([...bigInt2BytesLE(toMontgomery(9), f1size), ...bigInt2BytesLE(toMontgomery(1), f1size)]);
+ const pTwoInv = module.alloc([...bigInt2BytesLE(toMontgomery(modInv(2n, q)), f1size), ...bigInt2BytesLE(0n, f1size)]);
+ const pAltBn128Twist = pNonResidueF6;
+ const pTwistCoefB = module.alloc([...bigInt2BytesLE(toMontgomery(19485874751759354771024239261021720505790618469301721065564631296452457478373n), f1size), ...bigInt2BytesLE(toMontgomery(266929791119991161246907387137283842545076965332900288569378510910307636690n), f1size)]);
+ function build_mulNR6() {
+ const f = module.addFunction(prefix + "_mulNR6");
+ f.addParam("x", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), c.getLocal("x"), c.getLocal("pr")));
+ }
+ build_mulNR6();
+ const f6mPrefix = buildF3m(module, prefix + "_mulNR6", "f6m", "f2m");
+ function build_mulNR12() {
+ const f = module.addFunction(prefix + "_mulNR12");
+ f.addParam("x", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), c.i32_add(c.getLocal("x"), c.i32_const(n8 * 4)), c.getLocal("pr")), c.call(f2mPrefix + "_copy", c.getLocal("x"), c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2))), c.call(f2mPrefix + "_copy", c.i32_add(c.getLocal("x"), c.i32_const(n8 * 2)), c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 4))));
+ }
+ build_mulNR12();
+ const ftmPrefix = buildF2m(module, prefix + "_mulNR12", "ftm", f6mPrefix);
+ const ateLoopBitBytes = bits(29793968203157093288n);
+ const pAteLoopBitBytes = module.alloc(ateLoopBitBytes);
+ const ateCoefSize = 3 * f2size;
+ const ateNDblCoefs = ateLoopBitBytes.length - 1;
+ const ateNCoefs = ateLoopBitBytes.reduce((acc, b) => acc + (b != 0 ? 1 : 0), 0) + ateNDblCoefs + 1;
+ const prePSize = 6 * n8;
+ const preQSize = 3 * n8 * 2 + ateNCoefs * ateCoefSize;
+ module.modules[prefix] = {
+ n64,
+ pG1gen,
+ pG1zero,
+ pG1b,
+ pG2gen,
+ pG2zero,
+ pG2b,
+ pq: module.modules["f1m"].pq,
+ pr,
+ pOneT,
+ prePSize,
+ preQSize,
+ r: r.toString(),
+ q: q.toString()
+ };
+ const finalExpZ = 4965661367192848881n;
+ function naf(n) {
+ let E = n;
+ const res = [];
+ while (E > 0n) {
+ if (isOdd(E)) {
+ const z = 2 - Number(E % 4n);
+ res.push(z);
+ E = E - BigInt(z);
+ } else res.push(0);
+ E = E >> 1n;
+ }
+ return res;
+ }
+ function bits(n) {
+ let E = n;
+ const res = [];
+ while (E > 0n) {
+ if (isOdd(E)) res.push(1);
+ else res.push(0);
+ E = E >> 1n;
+ }
+ return res;
+ }
+ function buildPrepareG1() {
+ const f = module.addFunction(prefix + "_prepareG1");
+ f.addParam("pP", "i32");
+ f.addParam("ppreP", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(g1mPrefix + "_normalize", c.getLocal("pP"), c.getLocal("ppreP")));
+ }
+ function buildPrepAddStep() {
+ const f = module.addFunction(prefix + "_prepAddStep");
+ f.addParam("pQ", "i32");
+ f.addParam("pR", "i32");
+ f.addParam("pCoef", "i32");
+ const c = f.getCodeBuilder();
+ const X2 = c.getLocal("pQ");
+ const Y2 = c.i32_add(c.getLocal("pQ"), c.i32_const(f2size));
+ const X1 = c.getLocal("pR");
+ const Y1 = c.i32_add(c.getLocal("pR"), c.i32_const(f2size));
+ const Z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2 * f2size));
+ const ELL_0 = c.getLocal("pCoef");
+ const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size));
+ const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2 * f2size));
+ const D = ELL_VW;
+ const E = c.i32_const(module.alloc(f2size));
+ const F = c.i32_const(module.alloc(f2size));
+ const G = c.i32_const(module.alloc(f2size));
+ const H = c.i32_const(module.alloc(f2size));
+ const I = c.i32_const(module.alloc(f2size));
+ const J = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+ f.addCode(c.call(f2mPrefix + "_mul", X2, Z1, D), c.call(f2mPrefix + "_sub", X1, D, D), c.call(f2mPrefix + "_mul", Y2, Z1, E), c.call(f2mPrefix + "_sub", Y1, E, E), c.call(f2mPrefix + "_square", D, F), c.call(f2mPrefix + "_square", E, G), c.call(f2mPrefix + "_mul", D, F, H), c.call(f2mPrefix + "_mul", X1, F, I), c.call(f2mPrefix + "_add", I, I, AUX), c.call(f2mPrefix + "_mul", Z1, G, J), c.call(f2mPrefix + "_add", H, J, J), c.call(f2mPrefix + "_sub", J, AUX, J), c.call(f2mPrefix + "_mul", D, J, X1), c.call(f2mPrefix + "_mul", H, Y1, Y1), c.call(f2mPrefix + "_sub", I, J, AUX), c.call(f2mPrefix + "_mul", E, AUX, AUX), c.call(f2mPrefix + "_sub", AUX, Y1, Y1), c.call(f2mPrefix + "_mul", Z1, H, Z1), c.call(f2mPrefix + "_mul", D, Y2, AUX), c.call(f2mPrefix + "_mul", E, X2, ELL_0), c.call(f2mPrefix + "_sub", ELL_0, AUX, ELL_0), c.call(f2mPrefix + "_mul", ELL_0, c.i32_const(pAltBn128Twist), ELL_0), c.call(f2mPrefix + "_neg", E, ELL_VV));
+ }
+ function buildPrepDoubleStep() {
+ const f = module.addFunction(prefix + "_prepDblStep");
+ f.addParam("pR", "i32");
+ f.addParam("pCoef", "i32");
+ const c = f.getCodeBuilder();
+ const X1 = c.getLocal("pR");
+ const Y1 = c.i32_add(c.getLocal("pR"), c.i32_const(f2size));
+ const Z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2 * f2size));
+ const ELL_0 = c.getLocal("pCoef");
+ const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size));
+ const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2 * f2size));
+ const A = c.i32_const(module.alloc(f2size));
+ const B = c.i32_const(module.alloc(f2size));
+ const C = c.i32_const(module.alloc(f2size));
+ const D = c.i32_const(module.alloc(f2size));
+ const E = c.i32_const(module.alloc(f2size));
+ const F = c.i32_const(module.alloc(f2size));
+ const G = c.i32_const(module.alloc(f2size));
+ const H = c.i32_const(module.alloc(f2size));
+ const I = c.i32_const(module.alloc(f2size));
+ const J = c.i32_const(module.alloc(f2size));
+ const E2 = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+ f.addCode(c.call(f2mPrefix + "_mul", Y1, c.i32_const(pTwoInv), A), c.call(f2mPrefix + "_mul", X1, A, A), c.call(f2mPrefix + "_square", Y1, B), c.call(f2mPrefix + "_square", Z1, C), c.call(f2mPrefix + "_add", C, C, D), c.call(f2mPrefix + "_add", D, C, D), c.call(f2mPrefix + "_mul", c.i32_const(pTwistCoefB), D, E), c.call(f2mPrefix + "_add", E, E, F), c.call(f2mPrefix + "_add", E, F, F), c.call(f2mPrefix + "_add", B, F, G), c.call(f2mPrefix + "_mul", G, c.i32_const(pTwoInv), G), c.call(f2mPrefix + "_add", B, C, AUX), c.call(f2mPrefix + "_add", Y1, Z1, H), c.call(f2mPrefix + "_square", H, H), c.call(f2mPrefix + "_sub", H, AUX, H), c.call(f2mPrefix + "_sub", E, B, I), c.call(f2mPrefix + "_square", X1, J), c.call(f2mPrefix + "_square", E, E2), c.call(f2mPrefix + "_sub", B, F, AUX), c.call(f2mPrefix + "_mul", A, AUX, X1), c.call(f2mPrefix + "_add", E2, E2, AUX), c.call(f2mPrefix + "_add", E2, AUX, AUX), c.call(f2mPrefix + "_square", G, Y1), c.call(f2mPrefix + "_sub", Y1, AUX, Y1), c.call(f2mPrefix + "_mul", B, H, Z1), c.call(f2mPrefix + "_mul", c.i32_const(pAltBn128Twist), I, ELL_0), c.call(f2mPrefix + "_neg", H, ELL_VW), c.call(f2mPrefix + "_add", J, J, ELL_VV), c.call(f2mPrefix + "_add", J, ELL_VV, ELL_VV));
+ }
+ function buildMulByQ() {
+ const f = module.addFunction(prefix + "_mulByQ");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("p1");
+ const y = c.i32_add(c.getLocal("p1"), c.i32_const(f2size));
+ const z = c.i32_add(c.getLocal("p1"), c.i32_const(f2size * 2));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(f2size));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(f2size * 2));
+ const MulByQX = c.i32_const(module.alloc([...bigInt2BytesLE(toMontgomery("21575463638280843010398324269430826099269044274347216827212613867836435027261"), f1size), ...bigInt2BytesLE(toMontgomery("10307601595873709700152284273816112264069230130616436755625194854815875713954"), f1size)]));
+ const MulByQY = c.i32_const(module.alloc([...bigInt2BytesLE(toMontgomery("2821565182194536844548159561693502659359617185244120367078079554186484126554"), f1size), ...bigInt2BytesLE(toMontgomery("3505843767911556378687030309984248845540243509899259641013678093033130930403"), f1size)]));
+ f.addCode(c.call(f2mPrefix + "_conjugate", x, x3), c.call(f2mPrefix + "_mul", MulByQX, x3, x3), c.call(f2mPrefix + "_conjugate", y, y3), c.call(f2mPrefix + "_mul", MulByQY, y3, y3), c.call(f2mPrefix + "_conjugate", z, z3));
+ }
+ function buildPrepareG2() {
+ buildMulByQ();
+ const f = module.addFunction(prefix + "_prepareG2");
+ f.addParam("pQ", "i32");
+ f.addParam("ppreQ", "i32");
+ f.addLocal("pCoef", "i32");
+ f.addLocal("i", "i32");
+ const c = f.getCodeBuilder();
+ const QX = c.getLocal("pQ");
+ const pR = module.alloc(f2size * 3);
+ const R = c.i32_const(pR);
+ const RX = c.i32_const(pR);
+ const RY = c.i32_const(pR + f2size);
+ const RZ = c.i32_const(pR + 2 * f2size);
+ const cQX = c.i32_add(c.getLocal("ppreQ"), c.i32_const(0));
+ const cQY = c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size));
+ const pQ1 = module.alloc(f2size * 3);
+ const Q1 = c.i32_const(pQ1);
+ const pQ2 = module.alloc(f2size * 3);
+ const Q2 = c.i32_const(pQ2);
+ const Q2Y = c.i32_const(pQ2 + f2size);
+ f.addCode(c.call(g2mPrefix + "_normalize", QX, cQX), c.call(f2mPrefix + "_copy", cQX, RX), c.call(f2mPrefix + "_copy", cQY, RY), c.call(f2mPrefix + "_one", RZ));
+ f.addCode(c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size * 3))), c.setLocal("i", c.i32_const(ateLoopBitBytes.length - 2)), c.block(c.loop(c.call(prefix + "_prepDblStep", R, c.getLocal("pCoef")), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.if(c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), [...c.call(prefix + "_prepAddStep", cQX, R, c.getLocal("pCoef")), ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize)))]), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ f.addCode(c.call(prefix + "_mulByQ", cQX, Q1), c.call(prefix + "_mulByQ", Q1, Q2));
+ f.addCode(c.call(f2mPrefix + "_neg", Q2Y, Q2Y), c.call(prefix + "_prepAddStep", Q1, R, c.getLocal("pCoef")), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.call(prefix + "_prepAddStep", Q2, R, c.getLocal("pCoef")), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))));
+ }
+ function buildMulBy024Old() {
+ const f = module.addFunction(prefix + "__mulBy024Old");
+ f.addParam("pEll0", "i32");
+ f.addParam("pEllVW", "i32");
+ f.addParam("pEllVV", "i32");
+ f.addParam("pR", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("pEll0");
+ const x2 = c.getLocal("pEllVV");
+ const x4 = c.getLocal("pEllVW");
+ const z0 = c.getLocal("pR");
+ const pAUX12 = module.alloc(ftsize);
+ const AUX12 = c.i32_const(pAUX12);
+ const AUX12_0 = c.i32_const(pAUX12);
+ const AUX12_2 = c.i32_const(pAUX12 + f2size);
+ const AUX12_4 = c.i32_const(pAUX12 + f2size * 2);
+ const AUX12_6 = c.i32_const(pAUX12 + f2size * 3);
+ const AUX12_8 = c.i32_const(pAUX12 + f2size * 4);
+ const AUX12_10 = c.i32_const(pAUX12 + f2size * 5);
+ f.addCode(c.call(f2mPrefix + "_copy", x0, AUX12_0), c.call(f2mPrefix + "_zero", AUX12_2), c.call(f2mPrefix + "_copy", x2, AUX12_4), c.call(f2mPrefix + "_zero", AUX12_6), c.call(f2mPrefix + "_copy", x4, AUX12_8), c.call(f2mPrefix + "_zero", AUX12_10), c.call(ftmPrefix + "_mul", AUX12, z0, z0));
+ }
+ function buildMulBy024() {
+ const f = module.addFunction(prefix + "__mulBy024");
+ f.addParam("pEll0", "i32");
+ f.addParam("pEllVW", "i32");
+ f.addParam("pEllVV", "i32");
+ f.addParam("pR", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("pEll0");
+ const x2 = c.getLocal("pEllVV");
+ const x4 = c.getLocal("pEllVW");
+ const z0 = c.getLocal("pR");
+ const z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2 * n8));
+ const z2 = c.i32_add(c.getLocal("pR"), c.i32_const(4 * n8));
+ const z3 = c.i32_add(c.getLocal("pR"), c.i32_const(6 * n8));
+ const z4 = c.i32_add(c.getLocal("pR"), c.i32_const(8 * n8));
+ const z5 = c.i32_add(c.getLocal("pR"), c.i32_const(10 * n8));
+ const t0 = c.i32_const(module.alloc(f2size));
+ const t1 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const s0 = c.i32_const(module.alloc(f2size));
+ const T3 = c.i32_const(module.alloc(f2size));
+ const T4 = c.i32_const(module.alloc(f2size));
+ const D0 = c.i32_const(module.alloc(f2size));
+ const D2 = c.i32_const(module.alloc(f2size));
+ const D4 = c.i32_const(module.alloc(f2size));
+ const S1 = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+ f.addCode(c.call(f2mPrefix + "_mul", z0, x0, D0), c.call(f2mPrefix + "_mul", z2, x2, D2), c.call(f2mPrefix + "_mul", z4, x4, D4), c.call(f2mPrefix + "_add", z0, z4, t2), c.call(f2mPrefix + "_add", z0, z2, t1), c.call(f2mPrefix + "_add", z1, z3, s0), c.call(f2mPrefix + "_add", s0, z5, s0), c.call(f2mPrefix + "_mul", z1, x2, S1), c.call(f2mPrefix + "_add", S1, D4, T3), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), c.call(f2mPrefix + "_add", T4, D0, z0), c.call(f2mPrefix + "_mul", z5, x4, T3), c.call(f2mPrefix + "_add", S1, T3, S1), c.call(f2mPrefix + "_add", T3, D2, T3), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), c.call(f2mPrefix + "_mul", z1, x0, T3), c.call(f2mPrefix + "_add", S1, T3, S1), c.call(f2mPrefix + "_add", T4, T3, z1), c.call(f2mPrefix + "_add", x0, x2, t0), c.call(f2mPrefix + "_mul", t1, t0, T3), c.call(f2mPrefix + "_add", D0, D2, AUX), c.call(f2mPrefix + "_sub", T3, AUX, T3), c.call(f2mPrefix + "_mul", z3, x4, T4), c.call(f2mPrefix + "_add", S1, T4, S1), c.call(f2mPrefix + "_add", z2, z4, t0), c.call(f2mPrefix + "_add", T3, T4, z2), c.call(f2mPrefix + "_add", x2, x4, t1), c.call(f2mPrefix + "_mul", t1, t0, T3), c.call(f2mPrefix + "_add", D2, D4, AUX), c.call(f2mPrefix + "_sub", T3, AUX, T3), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), c.call(f2mPrefix + "_mul", z3, x0, T3), c.call(f2mPrefix + "_add", S1, T3, S1), c.call(f2mPrefix + "_add", T4, T3, z3), c.call(f2mPrefix + "_mul", z5, x2, T3), c.call(f2mPrefix + "_add", S1, T3, S1), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), c.call(f2mPrefix + "_add", x0, x4, t0), c.call(f2mPrefix + "_mul", t2, t0, T3), c.call(f2mPrefix + "_add", D0, D4, AUX), c.call(f2mPrefix + "_sub", T3, AUX, T3), c.call(f2mPrefix + "_add", T4, T3, z4), c.call(f2mPrefix + "_add", x0, x2, t0), c.call(f2mPrefix + "_add", t0, x4, t0), c.call(f2mPrefix + "_mul", s0, t0, T3), c.call(f2mPrefix + "_sub", T3, S1, z5));
+ }
+ function buildMillerLoop() {
+ const f = module.addFunction(prefix + "_millerLoop");
+ f.addParam("ppreP", "i32");
+ f.addParam("ppreQ", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("pCoef", "i32");
+ f.addLocal("i", "i32");
+ const c = f.getCodeBuilder();
+ const preP_PX = c.getLocal("ppreP");
+ const preP_PY = c.i32_add(c.getLocal("ppreP"), c.i32_const(f1size));
+ const ELL_0 = c.getLocal("pCoef");
+ const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size));
+ const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2 * f2size));
+ const pVW = module.alloc(f2size);
+ const VW = c.i32_const(pVW);
+ const pVV = module.alloc(f2size);
+ const VV = c.i32_const(pVV);
+ const F = c.getLocal("r");
+ f.addCode(c.call(ftmPrefix + "_one", F), c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size * 3))), c.setLocal("i", c.i32_const(ateLoopBitBytes.length - 2)), c.block(c.loop(c.call(ftmPrefix + "_square", F, F), c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.if(c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), [
+ ...c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW),
+ ...c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV),
+ ...c.call(prefix + "__mulBy024", ELL_0, VW, VV, F),
+ ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize)))
+ ]), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ f.addCode(c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))));
+ }
+ function buildFrobeniusMap(n) {
+ const F12 = [[
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n]
+ ], [
+ [1n, 0n],
+ [8376118865763821496583973867626364092589906065868298776909617916018768340080n, 16469823323077808223889137241176536799009286646108169935659301613961712198316n],
+ [21888242871839275220042445260109153167277707414472061641714758635765020556617n, 0n],
+ [11697423496358154304825782922584725312912383441159505038794027105778954184319n, 303847389135065887422783454877609941456349188919719272345083954437860409601n],
+ [21888242871839275220042445260109153167277707414472061641714758635765020556616n, 0n],
+ [3321304630594332808241809054958361220322477375291206261884409189760185844239n, 5722266937896532885780051958958348231143373700109372999374820235121374419868n],
+ [21888242871839275222246405745257275088696311157297823662689037894645226208582n, 0n],
+ [13512124006075453725662431877630910996106405091429524885779419978626457868503n, 5418419548761466998357268504080738289687024511189653727029736280683514010267n],
+ [2203960485148121921418603742825762020974279258880205651966n, 0n],
+ [10190819375481120917420622822672549775783927716138318623895010788866272024264n, 21584395482704209334823622290379665147239961968378104390343953940207365798982n],
+ [2203960485148121921418603742825762020974279258880205651967n, 0n],
+ [18566938241244942414004596690298913868373833782006617400804628704885040364344n, 16165975933942742336466353786298926857552937457188450663314217659523851788715n]
+ ]];
+ const F6 = [
+ [
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n]
+ ],
+ [
+ [1n, 0n],
+ [21575463638280843010398324269430826099269044274347216827212613867836435027261n, 10307601595873709700152284273816112264069230130616436755625194854815875713954n],
+ [21888242871839275220042445260109153167277707414472061641714758635765020556616n, 0n],
+ [3772000881919853776433695186713858239009073593817195771773381919316419345261n, 2236595495967245188281701248203181795121068902605861227855261137820944008926n],
+ [2203960485148121921418603742825762020974279258880205651966n, 0n],
+ [18429021223477853657660792034369865839114504446431234726392080002137598044644n, 9344045779998320333812420223237981029506012124075525679208581902008406485703n]
+ ],
+ [
+ [1n, 0n],
+ [2581911344467009335267311115468803099551665605076196740867805258568234346338n, 19937756971775647987995932169929341994314640652964949448313374472400716661030n],
+ [2203960485148121921418603742825762020974279258880205651966n, 0n],
+ [5324479202449903542726783395506214481928257762400643279780343368557297135718n, 16208900380737693084919495127334387981393726419856888799917914180988844123039n],
+ [21888242871839275220042445260109153167277707414472061641714758635765020556616n, 0n],
+ [13981852324922362344252311234282257507216387789820983642040889267519694726527n, 7629828391165209371577384193250820201684255241773809077146787135900891633097n]
+ ]
+ ];
+ const f = module.addFunction(prefix + "__frobeniusMap" + n);
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ for (let i = 0; i < 6; i++) {
+ const X = i == 0 ? c.getLocal("x") : c.i32_add(c.getLocal("x"), c.i32_const(i * f2size));
+ const Xc0 = X;
+ const Xc1 = c.i32_add(c.getLocal("x"), c.i32_const(i * f2size + f1size));
+ const R = i == 0 ? c.getLocal("r") : c.i32_add(c.getLocal("r"), c.i32_const(i * f2size));
+ const Rc0 = R;
+ const Rc1 = c.i32_add(c.getLocal("r"), c.i32_const(i * f2size + f1size));
+ const coef = mul2(F12[Math.floor(i / 3)][n % 12], F6[i % 3][n % 6]);
+ const pCoef = module.alloc([...bigInt2BytesLE(toMontgomery(coef[0]), 32), ...bigInt2BytesLE(toMontgomery(coef[1]), 32)]);
+ if (n % 2 == 1) f.addCode(c.call(f1mPrefix + "_copy", Xc0, Rc0), c.call(f1mPrefix + "_neg", Xc1, Rc1), c.call(f2mPrefix + "_mul", R, c.i32_const(pCoef), R));
+ else f.addCode(c.call(f2mPrefix + "_mul", X, c.i32_const(pCoef), R));
+ }
+ function mul2(a, b) {
+ const ac0 = BigInt(a[0]);
+ const ac1 = BigInt(a[1]);
+ const bc0 = BigInt(b[0]);
+ const bc1 = BigInt(b[1]);
+ const res = [(ac0 * bc0 - ac1 * bc1) % q, (ac0 * bc1 + ac1 * bc0) % q];
+ if (isNegative(res[0])) res[0] = res[0] + q;
+ return res;
+ }
+ }
+ function buildFinalExponentiationFirstChunk() {
+ const f = module.addFunction(prefix + "__finalExponentiationFirstChunk");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const elt = c.getLocal("x");
+ const eltC0 = elt;
+ const eltC1 = c.i32_add(elt, c.i32_const(n8 * 6));
+ const r = c.getLocal("r");
+ const pA = module.alloc(ftsize);
+ const A = c.i32_const(pA);
+ const Ac0 = A;
+ const Ac1 = c.i32_const(pA + n8 * 6);
+ const B = c.i32_const(module.alloc(ftsize));
+ const C = c.i32_const(module.alloc(ftsize));
+ const D = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(f6mPrefix + "_copy", eltC0, Ac0), c.call(f6mPrefix + "_neg", eltC1, Ac1), c.call(ftmPrefix + "_inverse", elt, B), c.call(ftmPrefix + "_mul", A, B, C), c.call(prefix + "__frobeniusMap2", C, D), c.call(ftmPrefix + "_mul", C, D, r));
+ }
+ function buildCyclotomicSquare() {
+ const f = module.addFunction(prefix + "__cyclotomicSquare");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x4 = c.i32_add(c.getLocal("x"), c.i32_const(f2size));
+ const x3 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f2size));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(3 * f2size));
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(4 * f2size));
+ const x5 = c.i32_add(c.getLocal("x"), c.i32_const(5 * f2size));
+ const r0 = c.getLocal("r");
+ const r4 = c.i32_add(c.getLocal("r"), c.i32_const(f2size));
+ const r3 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f2size));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(3 * f2size));
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(4 * f2size));
+ const r5 = c.i32_add(c.getLocal("r"), c.i32_const(5 * f2size));
+ const t0 = c.i32_const(module.alloc(f2size));
+ const t1 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const t3 = c.i32_const(module.alloc(f2size));
+ const t4 = c.i32_const(module.alloc(f2size));
+ const t5 = c.i32_const(module.alloc(f2size));
+ const tmp = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+ f.addCode(c.call(f2mPrefix + "_mul", x0, x1, tmp), c.call(f2mPrefix + "_mul", x1, c.i32_const(pNonResidueF6), t0), c.call(f2mPrefix + "_add", x0, t0, t0), c.call(f2mPrefix + "_add", x0, x1, AUX), c.call(f2mPrefix + "_mul", AUX, t0, t0), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t0, AUX, t0), c.call(f2mPrefix + "_add", tmp, tmp, t1), c.call(f2mPrefix + "_mul", x2, x3, tmp), c.call(f2mPrefix + "_mul", x3, c.i32_const(pNonResidueF6), t2), c.call(f2mPrefix + "_add", x2, t2, t2), c.call(f2mPrefix + "_add", x2, x3, AUX), c.call(f2mPrefix + "_mul", AUX, t2, t2), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t2, AUX, t2), c.call(f2mPrefix + "_add", tmp, tmp, t3), c.call(f2mPrefix + "_mul", x4, x5, tmp), c.call(f2mPrefix + "_mul", x5, c.i32_const(pNonResidueF6), t4), c.call(f2mPrefix + "_add", x4, t4, t4), c.call(f2mPrefix + "_add", x4, x5, AUX), c.call(f2mPrefix + "_mul", AUX, t4, t4), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t4, AUX, t4), c.call(f2mPrefix + "_add", tmp, tmp, t5), c.call(f2mPrefix + "_sub", t0, x0, r0), c.call(f2mPrefix + "_add", r0, r0, r0), c.call(f2mPrefix + "_add", t0, r0, r0), c.call(f2mPrefix + "_add", t1, x1, r1), c.call(f2mPrefix + "_add", r1, r1, r1), c.call(f2mPrefix + "_add", t1, r1, r1), c.call(f2mPrefix + "_mul", t5, c.i32_const(pAltBn128Twist), AUX), c.call(f2mPrefix + "_add", AUX, x2, r2), c.call(f2mPrefix + "_add", r2, r2, r2), c.call(f2mPrefix + "_add", AUX, r2, r2), c.call(f2mPrefix + "_sub", t4, x3, r3), c.call(f2mPrefix + "_add", r3, r3, r3), c.call(f2mPrefix + "_add", t4, r3, r3), c.call(f2mPrefix + "_sub", t2, x4, r4), c.call(f2mPrefix + "_add", r4, r4, r4), c.call(f2mPrefix + "_add", t2, r4, r4), c.call(f2mPrefix + "_add", t3, x5, r5), c.call(f2mPrefix + "_add", r5, r5, r5), c.call(f2mPrefix + "_add", t3, r5, r5));
+ }
+ function buildCyclotomicExp(exponent, fnName) {
+ const exponentNafBytes = naf(exponent).map((b) => b == -1 ? 255 : b);
+ const pExponentNafBytes = module.alloc(exponentNafBytes);
+ const f = module.addFunction(prefix + "__cyclotomicExp_" + fnName);
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("bit", "i32");
+ f.addLocal("i", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("x");
+ const res = c.getLocal("r");
+ const inverse = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(ftmPrefix + "_conjugate", x, inverse), c.call(ftmPrefix + "_one", res), c.if(c.teeLocal("bit", c.i32_load8_s(c.i32_const(exponentNafBytes.length - 1), pExponentNafBytes)), c.if(c.i32_eq(c.getLocal("bit"), c.i32_const(1)), c.call(ftmPrefix + "_mul", res, x, res), c.call(ftmPrefix + "_mul", res, inverse, res))), c.setLocal("i", c.i32_const(exponentNafBytes.length - 2)), c.block(c.loop(c.call(prefix + "__cyclotomicSquare", res, res), c.if(c.teeLocal("bit", c.i32_load8_s(c.getLocal("i"), pExponentNafBytes)), c.if(c.i32_eq(c.getLocal("bit"), c.i32_const(1)), c.call(ftmPrefix + "_mul", res, x, res), c.call(ftmPrefix + "_mul", res, inverse, res))), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ function buildFinalExponentiationLastChunk() {
+ buildCyclotomicSquare();
+ buildCyclotomicExp(finalExpZ, "w0");
+ const f = module.addFunction(prefix + "__finalExponentiationLastChunk");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const elt = c.getLocal("x");
+ const result = c.getLocal("r");
+ const A = c.i32_const(module.alloc(ftsize));
+ const B = c.i32_const(module.alloc(ftsize));
+ const C = c.i32_const(module.alloc(ftsize));
+ const D = c.i32_const(module.alloc(ftsize));
+ const E = c.i32_const(module.alloc(ftsize));
+ const F = c.i32_const(module.alloc(ftsize));
+ const G = c.i32_const(module.alloc(ftsize));
+ const H = c.i32_const(module.alloc(ftsize));
+ const I = c.i32_const(module.alloc(ftsize));
+ const J = c.i32_const(module.alloc(ftsize));
+ const K = c.i32_const(module.alloc(ftsize));
+ const L = c.i32_const(module.alloc(ftsize));
+ const M = c.i32_const(module.alloc(ftsize));
+ const N = c.i32_const(module.alloc(ftsize));
+ const O = c.i32_const(module.alloc(ftsize));
+ const P = c.i32_const(module.alloc(ftsize));
+ const Q = c.i32_const(module.alloc(ftsize));
+ const R = c.i32_const(module.alloc(ftsize));
+ const S = c.i32_const(module.alloc(ftsize));
+ const T = c.i32_const(module.alloc(ftsize));
+ const U = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(prefix + "__cyclotomicExp_w0", elt, A), c.call(ftmPrefix + "_conjugate", A, A), c.call(prefix + "__cyclotomicSquare", A, B), c.call(prefix + "__cyclotomicSquare", B, C), c.call(ftmPrefix + "_mul", C, B, D), c.call(prefix + "__cyclotomicExp_w0", D, E), c.call(ftmPrefix + "_conjugate", E, E), c.call(prefix + "__cyclotomicSquare", E, F), c.call(prefix + "__cyclotomicExp_w0", F, G), c.call(ftmPrefix + "_conjugate", G, G), c.call(ftmPrefix + "_conjugate", D, H), c.call(ftmPrefix + "_conjugate", G, I), c.call(ftmPrefix + "_mul", I, E, J), c.call(ftmPrefix + "_mul", J, H, K), c.call(ftmPrefix + "_mul", K, B, L), c.call(ftmPrefix + "_mul", K, E, M), c.call(ftmPrefix + "_mul", M, elt, N), c.call(prefix + "__frobeniusMap1", L, O), c.call(ftmPrefix + "_mul", O, N, P), c.call(prefix + "__frobeniusMap2", K, Q), c.call(ftmPrefix + "_mul", Q, P, R), c.call(ftmPrefix + "_conjugate", elt, S), c.call(ftmPrefix + "_mul", S, L, T), c.call(prefix + "__frobeniusMap3", T, U), c.call(ftmPrefix + "_mul", U, R, result));
+ }
+ function buildFinalExponentiation() {
+ buildFinalExponentiationFirstChunk();
+ buildFinalExponentiationLastChunk();
+ const f = module.addFunction(prefix + "_finalExponentiation");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const elt = c.getLocal("x");
+ const result = c.getLocal("r");
+ const eltToFirstChunk = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(prefix + "__finalExponentiationFirstChunk", elt, eltToFirstChunk), c.call(prefix + "__finalExponentiationLastChunk", eltToFirstChunk, result));
+ }
+ function buildFinalExponentiationOld() {
+ const f = module.addFunction(prefix + "_finalExponentiationOld");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const pExponent = module.alloc(bigInt2BytesLE(552484233613224096312617126783173147097382103762957654188882734314196910839907541213974502761540629817009608548654680343627701153829446747810907373256841551006201639677726139946029199968412598804882391702273019083653272047566316584365559776493027495458238373902875937659943504873220554161550525926302303331747463515644711876653177129578303191095900909191624817826566688241804408081892785725967931714097716709526092261278071952560171111444072049229123565057483750161460024353346284167282452756217662335528813519139808291170539072125381230815729071544861602750936964829313608137325426383735122175229541155376346436093930287402089517426973178917569713384748081827255472576937471496195752727188261435633271238710131736096299798168852925540549342330775279877006784354801422249722573783561685179618816480037695005515426162362431072245638324744480n, 352));
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(ftmPrefix + "_exp", c.getLocal("x"), c.i32_const(pExponent), c.i32_const(352), c.getLocal("r")));
+ }
+ const pPreP = module.alloc(prePSize);
+ const pPreQ = module.alloc(preQSize);
+ function buildPairingEquation(nPairings) {
+ const f = module.addFunction(prefix + "_pairingEq" + nPairings);
+ for (let i = 0; i < nPairings; i++) {
+ f.addParam("p_" + i, "i32");
+ f.addParam("q_" + i, "i32");
+ }
+ f.addParam("c", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const resT = c.i32_const(module.alloc(ftsize));
+ const auxT = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(ftmPrefix + "_one", resT));
+ for (let i = 0; i < nPairings; i++) {
+ f.addCode(c.call(prefix + "_prepareG1", c.getLocal("p_" + i), c.i32_const(pPreP)));
+ f.addCode(c.call(prefix + "_prepareG2", c.getLocal("q_" + i), c.i32_const(pPreQ)));
+ f.addCode(c.call(prefix + "_millerLoop", c.i32_const(pPreP), c.i32_const(pPreQ), auxT));
+ f.addCode(c.call(ftmPrefix + "_mul", resT, auxT, resT));
+ }
+ f.addCode(c.call(prefix + "_finalExponentiation", resT, resT));
+ f.addCode(c.call(ftmPrefix + "_eq", resT, c.getLocal("c")));
+ }
+ function buildPairing() {
+ const f = module.addFunction(prefix + "_pairing");
+ f.addParam("p", "i32");
+ f.addParam("q", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const resT = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(prefix + "_prepareG1", c.getLocal("p"), c.i32_const(pPreP)));
+ f.addCode(c.call(prefix + "_prepareG2", c.getLocal("q"), c.i32_const(pPreQ)));
+ f.addCode(c.call(prefix + "_millerLoop", c.i32_const(pPreP), c.i32_const(pPreQ), resT));
+ f.addCode(c.call(prefix + "_finalExponentiation", resT, c.getLocal("r")));
+ }
+ buildPrepAddStep();
+ buildPrepDoubleStep();
+ buildPrepareG1();
+ buildPrepareG2();
+ buildMulBy024();
+ buildMulBy024Old();
+ buildMillerLoop();
+ for (let i = 0; i < 10; i++) {
+ buildFrobeniusMap(i);
+ module.exportFunction(prefix + "__frobeniusMap" + i);
+ }
+ buildFinalExponentiationOld();
+ buildFinalExponentiation();
+ for (let i = 1; i <= 5; i++) {
+ buildPairingEquation(i);
+ module.exportFunction(prefix + "_pairingEq" + i);
+ }
+ buildPairing();
+ module.exportFunction(prefix + "_pairing");
+ module.exportFunction(prefix + "_prepareG1");
+ module.exportFunction(prefix + "_prepareG2");
+ module.exportFunction(prefix + "_millerLoop");
+ module.exportFunction(prefix + "_finalExponentiation");
+ module.exportFunction(prefix + "_finalExponentiationOld");
+ module.exportFunction(prefix + "__mulBy024");
+ module.exportFunction(prefix + "__mulBy024Old");
+ module.exportFunction(prefix + "__cyclotomicSquare");
+ module.exportFunction(prefix + "__cyclotomicExp_w0");
+}
+//#endregion
+//#region src/bls12381/build_bls12381.js
+function buildBLS12381(module, _prefix) {
+ const prefix = _prefix || "bls12381";
+ if (module.modules[prefix]) return prefix;
+ const q = 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787n;
+ const r = 52435875175126190479447740508185965837690552500527637822603658699938581184513n;
+ const n64q = Math.floor((bitLength(q - 1n) - 1) / 64) + 1;
+ const n8q = n64q * 8;
+ const f1size = n8q;
+ const f2size = f1size * 2;
+ const ftsize = f1size * 12;
+ const n64r = Math.floor((bitLength(r - 1n) - 1) / 64) + 1;
+ const n8r = n64r * 8;
+ const frsize = n8r;
+ const pr = module.alloc(bigInt2BytesLE(r, frsize));
+ const f1mPrefix = buildF1m(module, q, "f1m", "intq");
+ buildF1(module, r, "fr", "frm", "intr");
+ const pG1b = module.alloc(bigInt2BytesLE(toMontgomery(4n), f1size));
+ const g1mPrefix = buildCurve(module, "g1m", "f1m", pG1b);
+ buildFFT(module, "frm", "frm", "frm", "frm_mul");
+ buildPol(module, "pol", "frm");
+ buildQAP(module, "qap", "frm");
+ const f2mPrefix = buildF2m(module, "f1m_neg", "f2m", "f1m");
+ const pG2b = module.alloc([...bigInt2BytesLE(toMontgomery(4n), f1size), ...bigInt2BytesLE(toMontgomery(4n), f1size)]);
+ const g2mPrefix = buildCurve(module, "g2m", "f2m", pG2b);
+ function buildGTimesFr(fnName, opMul) {
+ const f = module.addFunction(fnName);
+ f.addParam("pG", "i32");
+ f.addParam("pFr", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const AUX = c.i32_const(module.alloc(n8r));
+ f.addCode(c.call("frm_fromMontgomery", c.getLocal("pFr"), AUX), c.call(opMul, c.getLocal("pG"), AUX, c.i32_const(n8r), c.getLocal("pr")));
+ module.exportFunction(fnName);
+ }
+ buildGTimesFr("g1m_timesFr", "g1m_timesScalar");
+ buildFFT(module, "g1m", "g1m", "frm", "g1m_timesFr");
+ buildGTimesFr("g2m_timesFr", "g2m_timesScalar");
+ buildFFT(module, "g2m", "g2m", "frm", "g2m_timesFr");
+ buildGTimesFr("g1m_timesFrAffine", "g1m_timesScalarAffine");
+ buildGTimesFr("g2m_timesFrAffine", "g2m_timesScalarAffine");
+ buildApplyKey(module, "frm_batchApplyKey", "fmr", "frm", n8r, n8r, n8r, "frm_mul");
+ buildApplyKey(module, "g1m_batchApplyKey", "g1m", "frm", n8q * 3, n8q * 3, n8r, "g1m_timesFr");
+ buildApplyKey(module, "g1m_batchApplyKeyMixed", "g1m", "frm", n8q * 2, n8q * 3, n8r, "g1m_timesFrAffine");
+ buildApplyKey(module, "g2m_batchApplyKey", "g2m", "frm", n8q * 2 * 3, n8q * 3 * 2, n8r, "g2m_timesFr");
+ buildApplyKey(module, "g2m_batchApplyKeyMixed", "g2m", "frm", n8q * 2 * 2, n8q * 3 * 2, n8r, "g2m_timesFrAffine");
+ function toMontgomery(a) {
+ return BigInt(a) * (1n << BigInt(f1size * 8)) % q;
+ }
+ const G1gen = [
+ 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507n,
+ 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569n,
+ 1n
+ ];
+ const pG1gen = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(G1gen[0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G1gen[1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G1gen[2]), f1size)
+ ]);
+ const G1zero = [
+ 0n,
+ 1n,
+ 0n
+ ];
+ const pG1zero = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(G1zero[0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G1zero[1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G1zero[2]), f1size)
+ ]);
+ const G2gen = [
+ [352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160n, 3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758n],
+ [1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905n, 927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582n],
+ [1n, 0n]
+ ];
+ const pG2gen = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(G2gen[0][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[0][1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[1][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[1][1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[2][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2gen[2][1]), f1size)
+ ]);
+ const G2zero = [
+ [0n, 0n],
+ [1n, 0n],
+ [0n, 0n]
+ ];
+ const pG2zero = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(G2zero[0][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[0][1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[1][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[1][1]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[2][0]), f1size),
+ ...bigInt2BytesLE(toMontgomery(G2zero[2][1]), f1size)
+ ]);
+ const pOneT = module.alloc([
+ ...bigInt2BytesLE(toMontgomery(1n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size),
+ ...bigInt2BytesLE(toMontgomery(0n), f1size)
+ ]);
+ const pBls12381Twist = module.alloc([...bigInt2BytesLE(toMontgomery(1n), f1size), ...bigInt2BytesLE(toMontgomery(1n), f1size)]);
+ function build_mulNR2() {
+ const f = module.addFunction(f2mPrefix + "_mulNR");
+ f.addParam("x", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const x0c = c.i32_const(module.alloc(f1size));
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1size));
+ const r0 = c.getLocal("pr");
+ const r1 = c.i32_add(c.getLocal("pr"), c.i32_const(f1size));
+ f.addCode(c.call(f1mPrefix + "_copy", x0, x0c), c.call(f1mPrefix + "_sub", x0, x1, r0), c.call(f1mPrefix + "_add", x0c, x1, r1));
+ }
+ build_mulNR2();
+ const f6mPrefix = buildF3m(module, f2mPrefix + "_mulNR", "f6m", "f2m");
+ function build_mulNR6() {
+ const f = module.addFunction(f6mPrefix + "_mulNR");
+ f.addParam("x", "i32");
+ f.addParam("pr", "i32");
+ const c = f.getCodeBuilder();
+ const c0copy = c.i32_const(module.alloc(f1size * 2));
+ f.addCode(c.call(f2mPrefix + "_copy", c.getLocal("x"), c0copy), c.call(f2mPrefix + "_mulNR", c.i32_add(c.getLocal("x"), c.i32_const(n8q * 4)), c.getLocal("pr")), c.call(f2mPrefix + "_copy", c.i32_add(c.getLocal("x"), c.i32_const(n8q * 2)), c.i32_add(c.getLocal("pr"), c.i32_const(n8q * 4))), c.call(f2mPrefix + "_copy", c0copy, c.i32_add(c.getLocal("pr"), c.i32_const(n8q * 2))));
+ }
+ build_mulNR6();
+ const ftmPrefix = buildF2m(module, f6mPrefix + "_mulNR", "ftm", f6mPrefix);
+ const ateLoopBitBytes = bits(15132376222941642752n);
+ const pAteLoopBitBytes = module.alloc(ateLoopBitBytes);
+ const ateCoefSize = 3 * f2size;
+ const ateNDblCoefs = ateLoopBitBytes.length - 1;
+ const ateNCoefs = ateLoopBitBytes.reduce((acc, b) => acc + (b != 0 ? 1 : 0), 0) + ateNDblCoefs + 1;
+ const prePSize = 6 * n8q;
+ const preQSize = 3 * n8q * 2 + ateNCoefs * ateCoefSize;
+ const finalExpIsNegative = true;
+ const finalExpZ = 15132376222941642752n;
+ module.modules[prefix] = {
+ n64q,
+ n64r,
+ n8q,
+ n8r,
+ pG1gen,
+ pG1zero,
+ pG1b,
+ pG2gen,
+ pG2zero,
+ pG2b,
+ pq: module.modules["f1m"].pq,
+ pr,
+ pOneT,
+ r,
+ q,
+ prePSize,
+ preQSize
+ };
+ function naf(n) {
+ let E = n;
+ const res = [];
+ while (E > 0n) {
+ if (isOdd(E)) {
+ const z = 2 - Number(E % 4n);
+ res.push(z);
+ E = E - BigInt(z);
+ } else res.push(0);
+ E = E >> 1n;
+ }
+ return res;
+ }
+ function bits(n) {
+ let E = n;
+ const res = [];
+ while (E > 0n) {
+ if (isOdd(E)) res.push(1);
+ else res.push(0);
+ E = E >> 1n;
+ }
+ return res;
+ }
+ function buildPrepareG1() {
+ const f = module.addFunction(prefix + "_prepareG1");
+ f.addParam("pP", "i32");
+ f.addParam("ppreP", "i32");
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(g1mPrefix + "_normalize", c.getLocal("pP"), c.getLocal("ppreP")));
+ }
+ function buildPrepDoubleStep() {
+ const f = module.addFunction(prefix + "_prepDblStep");
+ f.addParam("R", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const Rx = c.getLocal("R");
+ const Ry = c.i32_add(c.getLocal("R"), c.i32_const(2 * n8q));
+ const Rz = c.i32_add(c.getLocal("R"), c.i32_const(4 * n8q));
+ const t0 = c.getLocal("r");
+ const t3 = c.i32_add(c.getLocal("r"), c.i32_const(2 * n8q));
+ const t6 = c.i32_add(c.getLocal("r"), c.i32_const(4 * n8q));
+ const zsquared = c.i32_const(module.alloc(f2size));
+ const t1 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const t4 = c.i32_const(module.alloc(f2size));
+ const t5 = c.i32_const(module.alloc(f2size));
+ f.addCode(c.call(f2mPrefix + "_square", Rx, t0), c.call(f2mPrefix + "_square", Ry, t1), c.call(f2mPrefix + "_square", t1, t2), c.call(f2mPrefix + "_add", t1, Rx, t3), c.call(f2mPrefix + "_square", t3, t3), c.call(f2mPrefix + "_sub", t3, t0, t3), c.call(f2mPrefix + "_sub", t3, t2, t3), c.call(f2mPrefix + "_add", t3, t3, t3), c.call(f2mPrefix + "_add", t0, t0, t4), c.call(f2mPrefix + "_add", t4, t0, t4), c.call(f2mPrefix + "_add", Rx, t4, t6), c.call(f2mPrefix + "_square", t4, t5), c.call(f2mPrefix + "_square", Rz, zsquared), c.call(f2mPrefix + "_sub", t5, t3, Rx), c.call(f2mPrefix + "_sub", Rx, t3, Rx), c.call(f2mPrefix + "_add", Rz, Ry, Rz), c.call(f2mPrefix + "_square", Rz, Rz), c.call(f2mPrefix + "_sub", Rz, t1, Rz), c.call(f2mPrefix + "_sub", Rz, zsquared, Rz), c.call(f2mPrefix + "_sub", t3, Rx, Ry), c.call(f2mPrefix + "_mul", Ry, t4, Ry), c.call(f2mPrefix + "_add", t2, t2, t2), c.call(f2mPrefix + "_add", t2, t2, t2), c.call(f2mPrefix + "_add", t2, t2, t2), c.call(f2mPrefix + "_sub", Ry, t2, Ry), c.call(f2mPrefix + "_mul", t4, zsquared, t3), c.call(f2mPrefix + "_add", t3, t3, t3), c.call(f2mPrefix + "_neg", t3, t3), c.call(f2mPrefix + "_square", t6, t6), c.call(f2mPrefix + "_sub", t6, t0, t6), c.call(f2mPrefix + "_sub", t6, t5, t6), c.call(f2mPrefix + "_add", t1, t1, t1), c.call(f2mPrefix + "_add", t1, t1, t1), c.call(f2mPrefix + "_sub", t6, t1, t6), c.call(f2mPrefix + "_mul", Rz, zsquared, t0), c.call(f2mPrefix + "_add", t0, t0, t0));
+ }
+ function buildPrepAddStep() {
+ const f = module.addFunction(prefix + "_prepAddStep");
+ f.addParam("R", "i32");
+ f.addParam("Q", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const Rx = c.getLocal("R");
+ const Ry = c.i32_add(c.getLocal("R"), c.i32_const(2 * n8q));
+ const Rz = c.i32_add(c.getLocal("R"), c.i32_const(4 * n8q));
+ const Qx = c.getLocal("Q");
+ const Qy = c.i32_add(c.getLocal("Q"), c.i32_const(2 * n8q));
+ const t10 = c.getLocal("r");
+ const t1 = c.i32_add(c.getLocal("r"), c.i32_const(2 * n8q));
+ const t9 = c.i32_add(c.getLocal("r"), c.i32_const(4 * n8q));
+ const zsquared = c.i32_const(module.alloc(f2size));
+ const ysquared = c.i32_const(module.alloc(f2size));
+ const ztsquared = c.i32_const(module.alloc(f2size));
+ const t0 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const t3 = c.i32_const(module.alloc(f2size));
+ const t4 = c.i32_const(module.alloc(f2size));
+ const t5 = c.i32_const(module.alloc(f2size));
+ const t6 = c.i32_const(module.alloc(f2size));
+ const t7 = c.i32_const(module.alloc(f2size));
+ const t8 = c.i32_const(module.alloc(f2size));
+ f.addCode(c.call(f2mPrefix + "_square", Rz, zsquared), c.call(f2mPrefix + "_square", Qy, ysquared), c.call(f2mPrefix + "_mul", zsquared, Qx, t0), c.call(f2mPrefix + "_add", Qy, Rz, t1), c.call(f2mPrefix + "_square", t1, t1), c.call(f2mPrefix + "_sub", t1, ysquared, t1), c.call(f2mPrefix + "_sub", t1, zsquared, t1), c.call(f2mPrefix + "_mul", t1, zsquared, t1), c.call(f2mPrefix + "_sub", t0, Rx, t2), c.call(f2mPrefix + "_square", t2, t3), c.call(f2mPrefix + "_add", t3, t3, t4), c.call(f2mPrefix + "_add", t4, t4, t4), c.call(f2mPrefix + "_mul", t4, t2, t5), c.call(f2mPrefix + "_sub", t1, Ry, t6), c.call(f2mPrefix + "_sub", t6, Ry, t6), c.call(f2mPrefix + "_mul", t6, Qx, t9), c.call(f2mPrefix + "_mul", t4, Rx, t7), c.call(f2mPrefix + "_square", t6, Rx), c.call(f2mPrefix + "_sub", Rx, t5, Rx), c.call(f2mPrefix + "_sub", Rx, t7, Rx), c.call(f2mPrefix + "_sub", Rx, t7, Rx), c.call(f2mPrefix + "_add", Rz, t2, Rz), c.call(f2mPrefix + "_square", Rz, Rz), c.call(f2mPrefix + "_sub", Rz, zsquared, Rz), c.call(f2mPrefix + "_sub", Rz, t3, Rz), c.call(f2mPrefix + "_add", Qy, Rz, t10), c.call(f2mPrefix + "_sub", t7, Rx, t8), c.call(f2mPrefix + "_mul", t8, t6, t8), c.call(f2mPrefix + "_mul", Ry, t5, t0), c.call(f2mPrefix + "_add", t0, t0, t0), c.call(f2mPrefix + "_sub", t8, t0, Ry), c.call(f2mPrefix + "_square", t10, t10), c.call(f2mPrefix + "_sub", t10, ysquared, t10), c.call(f2mPrefix + "_square", Rz, ztsquared), c.call(f2mPrefix + "_sub", t10, ztsquared, t10), c.call(f2mPrefix + "_add", t9, t9, t9), c.call(f2mPrefix + "_sub", t9, t10, t9), c.call(f2mPrefix + "_add", Rz, Rz, t10), c.call(f2mPrefix + "_neg", t6, t6), c.call(f2mPrefix + "_add", t6, t6, t1));
+ }
+ function buildPrepareG2() {
+ const f = module.addFunction(prefix + "_prepareG2");
+ f.addParam("pQ", "i32");
+ f.addParam("ppreQ", "i32");
+ f.addLocal("pCoef", "i32");
+ f.addLocal("i", "i32");
+ const c = f.getCodeBuilder();
+ const Q = c.getLocal("pQ");
+ const pR = module.alloc(f2size * 3);
+ const R = c.i32_const(pR);
+ const base = c.getLocal("ppreQ");
+ f.addCode(c.call(g2mPrefix + "_normalize", Q, base), c.if(c.call(g2mPrefix + "_isZero", base), c.ret([])), c.call(g2mPrefix + "_copy", base, R), c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size * 3))));
+ f.addCode(c.setLocal("i", c.i32_const(ateLoopBitBytes.length - 2)), c.block(c.loop(c.call(prefix + "_prepDblStep", R, c.getLocal("pCoef")), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.if(c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), [...c.call(prefix + "_prepAddStep", R, base, c.getLocal("pCoef")), ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize)))]), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ }
+ function buildF6Mul1() {
+ const f = module.addFunction(f6mPrefix + "_mul1");
+ f.addParam("pA", "i32");
+ f.addParam("pC1", "i32");
+ f.addParam("pR", "i32");
+ const c = f.getCodeBuilder();
+ const A_c0 = c.getLocal("pA");
+ const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 2));
+ const A_c2 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 4));
+ const c1 = c.getLocal("pC1");
+ const t1 = c.getLocal("pR");
+ const t2 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 2));
+ const b_b = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 4));
+ const Ac0_Ac1 = c.i32_const(module.alloc(f1size * 2));
+ const Ac1_Ac2 = c.i32_const(module.alloc(f1size * 2));
+ f.addCode(c.call(f2mPrefix + "_add", A_c0, A_c1, Ac0_Ac1), c.call(f2mPrefix + "_add", A_c1, A_c2, Ac1_Ac2), c.call(f2mPrefix + "_mul", A_c1, c1, b_b), c.call(f2mPrefix + "_mul", Ac1_Ac2, c1, t1), c.call(f2mPrefix + "_sub", t1, b_b, t1), c.call(f2mPrefix + "_mulNR", t1, t1), c.call(f2mPrefix + "_mul", Ac0_Ac1, c1, t2), c.call(f2mPrefix + "_sub", t2, b_b, t2));
+ }
+ buildF6Mul1();
+ function buildF6Mul01() {
+ const f = module.addFunction(f6mPrefix + "_mul01");
+ f.addParam("pA", "i32");
+ f.addParam("pC0", "i32");
+ f.addParam("pC1", "i32");
+ f.addParam("pR", "i32");
+ const c = f.getCodeBuilder();
+ const A_c0 = c.getLocal("pA");
+ const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 2));
+ const A_c2 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 4));
+ const c0 = c.getLocal("pC0");
+ const c1 = c.getLocal("pC1");
+ const t1 = c.getLocal("pR");
+ const t2 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 2));
+ const t3 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 4));
+ const a_a = c.i32_const(module.alloc(f1size * 2));
+ const b_b = c.i32_const(module.alloc(f1size * 2));
+ const Ac0_Ac1 = c.i32_const(module.alloc(f1size * 2));
+ const Ac0_Ac2 = c.i32_const(module.alloc(f1size * 2));
+ f.addCode(c.call(f2mPrefix + "_mul", A_c0, c0, a_a), c.call(f2mPrefix + "_mul", A_c1, c1, b_b), c.call(f2mPrefix + "_add", A_c0, A_c1, Ac0_Ac1), c.call(f2mPrefix + "_add", A_c0, A_c2, Ac0_Ac2), c.call(f2mPrefix + "_add", A_c1, A_c2, t1), c.call(f2mPrefix + "_mul", t1, c1, t1), c.call(f2mPrefix + "_sub", t1, b_b, t1), c.call(f2mPrefix + "_mulNR", t1, t1), c.call(f2mPrefix + "_add", t1, a_a, t1), c.call(f2mPrefix + "_add", c0, c1, t2), c.call(f2mPrefix + "_mul", t2, Ac0_Ac1, t2), c.call(f2mPrefix + "_sub", t2, a_a, t2), c.call(f2mPrefix + "_sub", t2, b_b, t2), c.call(f2mPrefix + "_mul", Ac0_Ac2, c0, t3), c.call(f2mPrefix + "_sub", t3, a_a, t3), c.call(f2mPrefix + "_add", t3, b_b, t3));
+ }
+ buildF6Mul01();
+ function buildF12Mul014() {
+ const f = module.addFunction(ftmPrefix + "_mul014");
+ f.addParam("pA", "i32");
+ f.addParam("pC0", "i32");
+ f.addParam("pC1", "i32");
+ f.addParam("pC4", "i32");
+ f.addParam("pR", "i32");
+ const c = f.getCodeBuilder();
+ const A_c0 = c.getLocal("pA");
+ const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 6));
+ const c0 = c.getLocal("pC0");
+ const c1 = c.getLocal("pC1");
+ const c4 = c.getLocal("pC4");
+ const aa = c.i32_const(module.alloc(f1size * 6));
+ const bb = c.i32_const(module.alloc(f1size * 6));
+ const o = c.i32_const(module.alloc(f1size * 2));
+ const R_c0 = c.getLocal("pR");
+ const R_c1 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 6));
+ f.addCode(c.call(f6mPrefix + "_mul01", A_c0, c0, c1, aa), c.call(f6mPrefix + "_mul1", A_c1, c4, bb), c.call(f2mPrefix + "_add", c1, c4, o), c.call(f6mPrefix + "_add", A_c1, A_c0, R_c1), c.call(f6mPrefix + "_mul01", R_c1, c0, o, R_c1), c.call(f6mPrefix + "_sub", R_c1, aa, R_c1), c.call(f6mPrefix + "_sub", R_c1, bb, R_c1), c.call(f6mPrefix + "_copy", bb, R_c0), c.call(f6mPrefix + "_mulNR", R_c0, R_c0), c.call(f6mPrefix + "_add", R_c0, aa, R_c0));
+ }
+ buildF12Mul014();
+ function buildELL() {
+ const f = module.addFunction(prefix + "_ell");
+ f.addParam("pP", "i32");
+ f.addParam("pCoefs", "i32");
+ f.addParam("pF", "i32");
+ const c = f.getCodeBuilder();
+ const Px = c.getLocal("pP");
+ const Py = c.i32_add(c.getLocal("pP"), c.i32_const(n8q));
+ const F = c.getLocal("pF");
+ const coef0_0 = c.getLocal("pCoefs");
+ const coef0_1 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size));
+ const coef1_0 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size * 2));
+ const coef1_1 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size * 3));
+ const coef2 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size * 4));
+ const pc0 = module.alloc(f1size * 2);
+ const c0 = c.i32_const(pc0);
+ const c0_c0 = c.i32_const(pc0);
+ const c0_c1 = c.i32_const(pc0 + f1size);
+ const pc1 = module.alloc(f1size * 2);
+ const c1 = c.i32_const(pc1);
+ const c1_c0 = c.i32_const(pc1);
+ const c1_c1 = c.i32_const(pc1 + f1size);
+ f.addCode(c.call(f1mPrefix + "_mul", coef0_0, Py, c0_c0), c.call(f1mPrefix + "_mul", coef0_1, Py, c0_c1), c.call(f1mPrefix + "_mul", coef1_0, Px, c1_c0), c.call(f1mPrefix + "_mul", coef1_1, Px, c1_c1), c.call(ftmPrefix + "_mul014", F, coef2, c1, c0, F));
+ }
+ buildELL();
+ function buildMillerLoop() {
+ const f = module.addFunction(prefix + "_millerLoop");
+ f.addParam("ppreP", "i32");
+ f.addParam("ppreQ", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("pCoef", "i32");
+ f.addLocal("i", "i32");
+ const c = f.getCodeBuilder();
+ const preP = c.getLocal("ppreP");
+ const coefs = c.getLocal("pCoef");
+ const F = c.getLocal("r");
+ f.addCode(c.call(ftmPrefix + "_one", F), c.if(c.call(g1mPrefix + "_isZero", preP), c.ret([])), c.if(c.call(g1mPrefix + "_isZero", c.getLocal("ppreQ")), c.ret([])), c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size * 3))), c.setLocal("i", c.i32_const(ateLoopBitBytes.length - 2)), c.block(c.loop(c.call(prefix + "_ell", preP, coefs, F), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.if(c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), [...c.call(prefix + "_ell", preP, coefs, F), ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize)))]), c.call(ftmPrefix + "_square", F, F), c.br_if(1, c.i32_eq(c.getLocal("i"), c.i32_const(1))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.call(prefix + "_ell", preP, coefs, F));
+ f.addCode(c.call(ftmPrefix + "_conjugate", F, F));
+ }
+ function buildFrobeniusMap(n) {
+ const F12 = [[
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n]
+ ], [
+ [1n, 0n],
+ [3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n, 151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n],
+ [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n, 0n],
+ [2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n, 1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n],
+ [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n, 0n],
+ [3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n, 877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n],
+ [4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n, 0n],
+ [151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n, 3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n],
+ [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n, 0n],
+ [1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n, 2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n],
+ [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n, 0n],
+ [877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n, 3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n]
+ ]];
+ const F6 = [
+ [
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n],
+ [1n, 0n]
+ ],
+ [
+ [1n, 0n],
+ [0n, 4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n],
+ [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n, 0n],
+ [0n, 1n],
+ [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n, 0n],
+ [0n, 793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n]
+ ],
+ [
+ [1n, 0n],
+ [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n, 0n],
+ [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n, 0n],
+ [4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n, 0n],
+ [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n, 0n],
+ [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n, 0n]
+ ]
+ ];
+ const f = module.addFunction(ftmPrefix + "_frobeniusMap" + n);
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ for (let i = 0; i < 6; i++) {
+ const X = i == 0 ? c.getLocal("x") : c.i32_add(c.getLocal("x"), c.i32_const(i * f2size));
+ const Xc0 = X;
+ const Xc1 = c.i32_add(c.getLocal("x"), c.i32_const(i * f2size + f1size));
+ const R = i == 0 ? c.getLocal("r") : c.i32_add(c.getLocal("r"), c.i32_const(i * f2size));
+ const Rc0 = R;
+ const Rc1 = c.i32_add(c.getLocal("r"), c.i32_const(i * f2size + f1size));
+ const coef = mul2(F12[Math.floor(i / 3)][n % 12], F6[i % 3][n % 6]);
+ const pCoef = module.alloc([...bigInt2BytesLE(toMontgomery(coef[0]), n8q), ...bigInt2BytesLE(toMontgomery(coef[1]), n8q)]);
+ if (n % 2 == 1) f.addCode(c.call(f1mPrefix + "_copy", Xc0, Rc0), c.call(f1mPrefix + "_neg", Xc1, Rc1), c.call(f2mPrefix + "_mul", R, c.i32_const(pCoef), R));
+ else f.addCode(c.call(f2mPrefix + "_mul", X, c.i32_const(pCoef), R));
+ }
+ function mul2(a, b) {
+ const ac0 = a[0];
+ const ac1 = a[1];
+ const bc0 = b[0];
+ const bc1 = b[1];
+ const res = [(ac0 * bc0 - ac1 * bc1) % q, (ac0 * bc1 + ac1 * bc0) % q];
+ if (isNegative(res[0])) res[0] = res[0] + q;
+ return res;
+ }
+ }
+ function buildCyclotomicSquare() {
+ const f = module.addFunction(prefix + "__cyclotomicSquare");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const x0 = c.getLocal("x");
+ const x4 = c.i32_add(c.getLocal("x"), c.i32_const(f2size));
+ const x3 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f2size));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(3 * f2size));
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(4 * f2size));
+ const x5 = c.i32_add(c.getLocal("x"), c.i32_const(5 * f2size));
+ const r0 = c.getLocal("r");
+ const r4 = c.i32_add(c.getLocal("r"), c.i32_const(f2size));
+ const r3 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f2size));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(3 * f2size));
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(4 * f2size));
+ const r5 = c.i32_add(c.getLocal("r"), c.i32_const(5 * f2size));
+ const t0 = c.i32_const(module.alloc(f2size));
+ const t1 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const t3 = c.i32_const(module.alloc(f2size));
+ const t4 = c.i32_const(module.alloc(f2size));
+ const t5 = c.i32_const(module.alloc(f2size));
+ const tmp = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+ f.addCode(c.call(f2mPrefix + "_mul", x0, x1, tmp), c.call(f2mPrefix + "_mulNR", x1, t0), c.call(f2mPrefix + "_add", x0, t0, t0), c.call(f2mPrefix + "_add", x0, x1, AUX), c.call(f2mPrefix + "_mul", AUX, t0, t0), c.call(f2mPrefix + "_mulNR", tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t0, AUX, t0), c.call(f2mPrefix + "_add", tmp, tmp, t1), c.call(f2mPrefix + "_mul", x2, x3, tmp), c.call(f2mPrefix + "_mulNR", x3, t2), c.call(f2mPrefix + "_add", x2, t2, t2), c.call(f2mPrefix + "_add", x2, x3, AUX), c.call(f2mPrefix + "_mul", AUX, t2, t2), c.call(f2mPrefix + "_mulNR", tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t2, AUX, t2), c.call(f2mPrefix + "_add", tmp, tmp, t3), c.call(f2mPrefix + "_mul", x4, x5, tmp), c.call(f2mPrefix + "_mulNR", x5, t4), c.call(f2mPrefix + "_add", x4, t4, t4), c.call(f2mPrefix + "_add", x4, x5, AUX), c.call(f2mPrefix + "_mul", AUX, t4, t4), c.call(f2mPrefix + "_mulNR", tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t4, AUX, t4), c.call(f2mPrefix + "_add", tmp, tmp, t5), c.call(f2mPrefix + "_sub", t0, x0, r0), c.call(f2mPrefix + "_add", r0, r0, r0), c.call(f2mPrefix + "_add", t0, r0, r0), c.call(f2mPrefix + "_add", t1, x1, r1), c.call(f2mPrefix + "_add", r1, r1, r1), c.call(f2mPrefix + "_add", t1, r1, r1), c.call(f2mPrefix + "_mul", t5, c.i32_const(pBls12381Twist), AUX), c.call(f2mPrefix + "_add", AUX, x2, r2), c.call(f2mPrefix + "_add", r2, r2, r2), c.call(f2mPrefix + "_add", AUX, r2, r2), c.call(f2mPrefix + "_sub", t4, x3, r3), c.call(f2mPrefix + "_add", r3, r3, r3), c.call(f2mPrefix + "_add", t4, r3, r3), c.call(f2mPrefix + "_sub", t2, x4, r4), c.call(f2mPrefix + "_add", r4, r4, r4), c.call(f2mPrefix + "_add", t2, r4, r4), c.call(f2mPrefix + "_add", t3, x5, r5), c.call(f2mPrefix + "_add", r5, r5, r5), c.call(f2mPrefix + "_add", t3, r5, r5));
+ }
+ function buildCyclotomicExp(exponent, isExpNegative, fnName) {
+ const exponentNafBytes = naf(exponent).map((b) => b == -1 ? 255 : b);
+ const pExponentNafBytes = module.alloc(exponentNafBytes);
+ const f = module.addFunction(prefix + "__cyclotomicExp_" + fnName);
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("bit", "i32");
+ f.addLocal("i", "i32");
+ const c = f.getCodeBuilder();
+ const x = c.getLocal("x");
+ const res = c.getLocal("r");
+ const inverse = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(ftmPrefix + "_conjugate", x, inverse), c.call(ftmPrefix + "_one", res), c.if(c.teeLocal("bit", c.i32_load8_s(c.i32_const(exponentNafBytes.length - 1), pExponentNafBytes)), c.if(c.i32_eq(c.getLocal("bit"), c.i32_const(1)), c.call(ftmPrefix + "_mul", res, x, res), c.call(ftmPrefix + "_mul", res, inverse, res))), c.setLocal("i", c.i32_const(exponentNafBytes.length - 2)), c.block(c.loop(c.call(prefix + "__cyclotomicSquare", res, res), c.if(c.teeLocal("bit", c.i32_load8_s(c.getLocal("i"), pExponentNafBytes)), c.if(c.i32_eq(c.getLocal("bit"), c.i32_const(1)), c.call(ftmPrefix + "_mul", res, x, res), c.call(ftmPrefix + "_mul", res, inverse, res))), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0))));
+ if (isExpNegative) f.addCode(c.call(ftmPrefix + "_conjugate", res, res));
+ }
+ function buildFinalExponentiation() {
+ buildCyclotomicSquare();
+ buildCyclotomicExp(finalExpZ, finalExpIsNegative, "w0");
+ const f = module.addFunction(prefix + "_finalExponentiation");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const elt = c.getLocal("x");
+ const res = c.getLocal("r");
+ const t0 = c.i32_const(module.alloc(ftsize));
+ const t1 = c.i32_const(module.alloc(ftsize));
+ const t2 = c.i32_const(module.alloc(ftsize));
+ const t3 = c.i32_const(module.alloc(ftsize));
+ const t4 = c.i32_const(module.alloc(ftsize));
+ const t5 = c.i32_const(module.alloc(ftsize));
+ const t6 = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(ftmPrefix + "_frobeniusMap6", elt, t0), c.call(ftmPrefix + "_inverse", elt, t1), c.call(ftmPrefix + "_mul", t0, t1, t2), c.call(ftmPrefix + "_copy", t2, t1), c.call(ftmPrefix + "_frobeniusMap2", t2, t2), c.call(ftmPrefix + "_mul", t2, t1, t2), c.call(prefix + "__cyclotomicSquare", t2, t1), c.call(ftmPrefix + "_conjugate", t1, t1), c.call(prefix + "__cyclotomicExp_w0", t2, t3), c.call(prefix + "__cyclotomicSquare", t3, t4), c.call(ftmPrefix + "_mul", t1, t3, t5), c.call(prefix + "__cyclotomicExp_w0", t5, t1), c.call(prefix + "__cyclotomicExp_w0", t1, t0), c.call(prefix + "__cyclotomicExp_w0", t0, t6), c.call(ftmPrefix + "_mul", t6, t4, t6), c.call(prefix + "__cyclotomicExp_w0", t6, t4), c.call(ftmPrefix + "_conjugate", t5, t5), c.call(ftmPrefix + "_mul", t4, t5, t4), c.call(ftmPrefix + "_mul", t4, t2, t4), c.call(ftmPrefix + "_conjugate", t2, t5), c.call(ftmPrefix + "_mul", t1, t2, t1), c.call(ftmPrefix + "_frobeniusMap3", t1, t1), c.call(ftmPrefix + "_mul", t6, t5, t6), c.call(ftmPrefix + "_frobeniusMap1", t6, t6), c.call(ftmPrefix + "_mul", t3, t0, t3), c.call(ftmPrefix + "_frobeniusMap2", t3, t3), c.call(ftmPrefix + "_mul", t3, t1, t3), c.call(ftmPrefix + "_mul", t3, t6, t3), c.call(ftmPrefix + "_mul", t3, t4, res));
+ }
+ function buildFinalExponentiationOld() {
+ const f = module.addFunction(prefix + "_finalExponentiationOld");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ const pExponent = module.alloc(bigInt2BytesLE(322277361516934140462891564586510139908379969514828494218366688025288661041104682794998680497580008899973249814104447692778988208376779573819485263026159588510513834876303014016798809919343532899164848730280942609956670917565618115867287399623286813270357901731510188149934363360381614501334086825442271920079363289954510565375378443704372994881406797882676971082200626541916413184642520269678897559532260949334760604962086348898118982248842634379637598665468817769075878555493752214492790122785850202957575200176084204422751485957336465472324810982833638490904279282696134323072515220044451592646885410572234451732790590013479358343841220074174848221722017083597872017638514103174122784843925578370430843522959600095676285723737049438346544753168912974976791528535276317256904336520179281145394686565050419250614107803233314658825463117900250701199181529205942363159325765991819433914303908860460720581408201373164047773794825411011922305820065611121544561808414055302212057471395719432072209245600258134364584636810093520285711072578721435517884103526483832733289802426157301542744476740008494780363354305116978805620671467071400711358839553375340724899735460480144599782014906586543813292157922220645089192130209334926661588737007768565838519456601560804957985667880395221049249803753582637708560n, 544));
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(ftmPrefix + "_exp", c.getLocal("x"), c.i32_const(pExponent), c.i32_const(544), c.getLocal("r")));
+ }
+ const pPreP = module.alloc(prePSize);
+ const pPreQ = module.alloc(preQSize);
+ function buildPairingEquation(nPairings) {
+ const f = module.addFunction(prefix + "_pairingEq" + nPairings);
+ for (let i = 0; i < nPairings; i++) {
+ f.addParam("p_" + i, "i32");
+ f.addParam("q_" + i, "i32");
+ }
+ f.addParam("c", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const resT = c.i32_const(module.alloc(ftsize));
+ const auxT = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(ftmPrefix + "_one", resT));
+ for (let i = 0; i < nPairings; i++) {
+ f.addCode(c.call(prefix + "_prepareG1", c.getLocal("p_" + i), c.i32_const(pPreP)));
+ f.addCode(c.call(prefix + "_prepareG2", c.getLocal("q_" + i), c.i32_const(pPreQ)));
+ f.addCode(c.if(c.i32_eqz(c.call(g1mPrefix + "_inGroupAffine", c.i32_const(pPreP))), c.ret(c.i32_const(0))), c.if(c.i32_eqz(c.call(g2mPrefix + "_inGroupAffine", c.i32_const(pPreQ))), c.ret(c.i32_const(0))));
+ f.addCode(c.call(prefix + "_millerLoop", c.i32_const(pPreP), c.i32_const(pPreQ), auxT));
+ f.addCode(c.call(ftmPrefix + "_mul", resT, auxT, resT));
+ }
+ f.addCode(c.call(prefix + "_finalExponentiation", resT, resT));
+ f.addCode(c.call(ftmPrefix + "_eq", resT, c.getLocal("c")));
+ }
+ function buildPairing() {
+ const f = module.addFunction(prefix + "_pairing");
+ f.addParam("p", "i32");
+ f.addParam("q", "i32");
+ f.addParam("r", "i32");
+ const c = f.getCodeBuilder();
+ const resT = c.i32_const(module.alloc(ftsize));
+ f.addCode(c.call(prefix + "_prepareG1", c.getLocal("p"), c.i32_const(pPreP)));
+ f.addCode(c.call(prefix + "_prepareG2", c.getLocal("q"), c.i32_const(pPreQ)));
+ f.addCode(c.call(prefix + "_millerLoop", c.i32_const(pPreP), c.i32_const(pPreQ), resT));
+ f.addCode(c.call(prefix + "_finalExponentiation", resT, c.getLocal("r")));
+ }
+ function buildInGroupG2() {
+ const f = module.addFunction(g2mPrefix + "_inGroupAffine");
+ f.addParam("p", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const WINV = [2001204777610833696708894912867952078278441409969503942666029068062015825245418932221343814564507832018947136279894n, 2001204777610833696708894912867952078278441409969503942666029068062015825245418932221343814564507832018947136279893n];
+ const FROB2X = 4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n;
+ const FROB3Y = [2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n, 2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n];
+ const wInv = c.i32_const(module.alloc([...bigInt2BytesLE(toMontgomery(WINV[0]), n8q), ...bigInt2BytesLE(toMontgomery(WINV[1]), n8q)]));
+ const frob2X = c.i32_const(module.alloc(bigInt2BytesLE(toMontgomery(FROB2X), n8q)));
+ const frob3Y = c.i32_const(module.alloc([...bigInt2BytesLE(toMontgomery(FROB3Y[0]), n8q), ...bigInt2BytesLE(toMontgomery(FROB3Y[1]), n8q)]));
+ const z = c.i32_const(module.alloc(bigInt2BytesLE(finalExpZ, 8)));
+ const px = c.getLocal("p");
+ const py = c.i32_add(c.getLocal("p"), c.i32_const(f2size));
+ const aux = c.i32_const(module.alloc(f1size));
+ const x_winv = c.i32_const(module.alloc(f2size));
+ const y_winv = c.i32_const(module.alloc(f2size));
+ const pf2 = module.alloc(f2size * 2);
+ const f2 = c.i32_const(pf2);
+ const f2x = c.i32_const(pf2);
+ const f2x_c1 = c.i32_const(pf2);
+ const f2x_c2 = c.i32_const(pf2 + f1size);
+ const f2y = c.i32_const(pf2 + f2size);
+ const f2y_c1 = c.i32_const(pf2 + f2size);
+ const f2y_c2 = c.i32_const(pf2 + f2size + f1size);
+ const pf3 = module.alloc(f2size * 3);
+ const f3 = c.i32_const(pf3);
+ const f3x = c.i32_const(pf3);
+ const f3x_c1 = c.i32_const(pf3);
+ const f3x_c2 = c.i32_const(pf3 + f1size);
+ const f3y = c.i32_const(pf3 + f2size);
+ const f3y_c1 = c.i32_const(pf3 + f2size);
+ const f3y_c2 = c.i32_const(pf3 + f2size + f1size);
+ const f3z = c.i32_const(pf3 + f2size * 2);
+ f.addCode(c.if(c.call(g2mPrefix + "_isZeroAffine", c.getLocal("p")), c.ret(c.i32_const(1))), c.if(c.i32_eqz(c.call(g2mPrefix + "_inCurveAffine", c.getLocal("p"))), c.ret(c.i32_const(0))), c.call(f2mPrefix + "_mul", px, wInv, x_winv), c.call(f2mPrefix + "_mul", py, wInv, y_winv), c.call(f2mPrefix + "_mul1", x_winv, frob2X, f2x), c.call(f2mPrefix + "_neg", y_winv, f2y), c.call(f2mPrefix + "_neg", x_winv, f3x), c.call(f2mPrefix + "_mul", y_winv, frob3Y, f3y), c.call(f1mPrefix + "_sub", f2x_c1, f2x_c2, aux), c.call(f1mPrefix + "_add", f2x_c1, f2x_c2, f2x_c2), c.call(f1mPrefix + "_copy", aux, f2x_c1), c.call(f1mPrefix + "_sub", f2y_c1, f2y_c2, aux), c.call(f1mPrefix + "_add", f2y_c1, f2y_c2, f2y_c2), c.call(f1mPrefix + "_copy", aux, f2y_c1), c.call(f1mPrefix + "_add", f3x_c1, f3x_c2, aux), c.call(f1mPrefix + "_sub", f3x_c1, f3x_c2, f3x_c2), c.call(f1mPrefix + "_copy", aux, f3x_c1), c.call(f1mPrefix + "_sub", f3y_c2, f3y_c1, aux), c.call(f1mPrefix + "_add", f3y_c1, f3y_c2, f3y_c2), c.call(f1mPrefix + "_copy", aux, f3y_c1), c.call(f2mPrefix + "_one", f3z), c.call(g2mPrefix + "_timesScalar", f3, z, c.i32_const(8), f3), c.call(g2mPrefix + "_addMixed", f3, f2, f3), c.ret(c.call(g2mPrefix + "_eqMixed", f3, c.getLocal("p"))));
+ const fInGroup = module.addFunction(g2mPrefix + "_inGroup");
+ fInGroup.addParam("pIn", "i32");
+ fInGroup.setReturnType("i32");
+ const c2 = fInGroup.getCodeBuilder();
+ const aux2 = c2.i32_const(module.alloc(f2size * 2));
+ fInGroup.addCode(c2.call(g2mPrefix + "_toAffine", c2.getLocal("pIn"), aux2), c2.ret(c2.call(g2mPrefix + "_inGroupAffine", aux2)));
+ }
+ function buildInGroupG1() {
+ const f = module.addFunction(g1mPrefix + "_inGroupAffine");
+ f.addParam("p", "i32");
+ f.setReturnType("i32");
+ const c = f.getCodeBuilder();
+ const BETA = 4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n;
+ const BETA2 = 793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n;
+ const Z2M1D3 = (finalExpZ * finalExpZ - 1n) / 3n;
+ const beta = c.i32_const(module.alloc(bigInt2BytesLE(toMontgomery(BETA), n8q)));
+ const beta2 = c.i32_const(module.alloc(bigInt2BytesLE(toMontgomery(BETA2), n8q)));
+ const z2m1d3 = c.i32_const(module.alloc(bigInt2BytesLE(Z2M1D3, 16)));
+ const px = c.getLocal("p");
+ const py = c.i32_add(c.getLocal("p"), c.i32_const(f1size));
+ const psp = module.alloc(f1size * 3);
+ const sp = c.i32_const(psp);
+ const spx = c.i32_const(psp);
+ const spy = c.i32_const(psp + f1size);
+ const ps2p = module.alloc(f1size * 2);
+ const s2p = c.i32_const(ps2p);
+ const s2px = c.i32_const(ps2p);
+ const s2py = c.i32_const(ps2p + f1size);
+ f.addCode(c.if(c.call(g1mPrefix + "_isZeroAffine", c.getLocal("p")), c.ret(c.i32_const(1))), c.if(c.i32_eqz(c.call(g1mPrefix + "_inCurveAffine", c.getLocal("p"))), c.ret(c.i32_const(0))), c.call(f1mPrefix + "_mul", px, beta, spx), c.call(f1mPrefix + "_copy", py, spy), c.call(f1mPrefix + "_mul", px, beta2, s2px), c.call(f1mPrefix + "_copy", py, s2py), c.call(g1mPrefix + "_doubleAffine", sp, sp), c.call(g1mPrefix + "_subMixed", sp, c.getLocal("p"), sp), c.call(g1mPrefix + "_subMixed", sp, s2p, sp), c.call(g1mPrefix + "_timesScalar", sp, z2m1d3, c.i32_const(16), sp), c.ret(c.call(g1mPrefix + "_eqMixed", sp, s2p)));
+ const fInGroup = module.addFunction(g1mPrefix + "_inGroup");
+ fInGroup.addParam("pIn", "i32");
+ fInGroup.setReturnType("i32");
+ const c2 = fInGroup.getCodeBuilder();
+ const aux2 = c2.i32_const(module.alloc(f1size * 2));
+ fInGroup.addCode(c2.call(g1mPrefix + "_toAffine", c2.getLocal("pIn"), aux2), c2.ret(c2.call(g1mPrefix + "_inGroupAffine", aux2)));
+ }
+ for (let i = 0; i < 10; i++) {
+ buildFrobeniusMap(i);
+ module.exportFunction(ftmPrefix + "_frobeniusMap" + i);
+ }
+ buildInGroupG1();
+ buildInGroupG2();
+ buildPrepAddStep();
+ buildPrepDoubleStep();
+ buildPrepareG1();
+ buildPrepareG2();
+ buildMillerLoop();
+ buildFinalExponentiationOld();
+ buildFinalExponentiation();
+ for (let i = 1; i <= 5; i++) {
+ buildPairingEquation(i);
+ module.exportFunction(prefix + "_pairingEq" + i);
+ }
+ buildPairing();
+ module.exportFunction(prefix + "_pairing");
+ module.exportFunction(prefix + "_prepareG1");
+ module.exportFunction(prefix + "_prepareG2");
+ module.exportFunction(prefix + "_millerLoop");
+ module.exportFunction(prefix + "_finalExponentiation");
+ module.exportFunction(prefix + "_finalExponentiationOld");
+ module.exportFunction(prefix + "__cyclotomicSquare");
+ module.exportFunction(prefix + "__cyclotomicExp_w0");
+ module.exportFunction(f6mPrefix + "_mul1");
+ module.exportFunction(f6mPrefix + "_mul01");
+ module.exportFunction(ftmPrefix + "_mul014");
+ module.exportFunction(g1mPrefix + "_inGroupAffine");
+ module.exportFunction(g1mPrefix + "_inGroup");
+ module.exportFunction(g2mPrefix + "_inGroupAffine");
+ module.exportFunction(g2mPrefix + "_inGroup");
+}
+//#endregion
+exports.buildBls12381 = buildBLS12381;
+exports.buildBn128 = buildBN128;
+exports.buildF1m = buildF1m;
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..6cab21c
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,38 @@
+import js from "@eslint/js";
+import globals from "globals";
+
+export default [
+ {
+ ignores: ["build/**", "tools/**"],
+ },
+ js.configs.recommended,
+ {
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: {
+ ...globals.node,
+ ...globals.es2020,
+ WebAssembly: "readonly",
+ },
+ },
+ rules: {
+ "indent": ["error", 4],
+ "linebreak-style": ["error", "unix"],
+ "quotes": ["error", "double"],
+ "semi": ["error", "always"],
+ },
+ },
+ {
+ files: ["test/**/*.js"],
+ languageOptions: {
+ globals: {
+ describe: "readonly",
+ it: "readonly",
+ beforeAll: "readonly",
+ afterAll: "readonly",
+ beforeEach: "readonly",
+ afterEach: "readonly",
+ },
+ },
+ },
+];
diff --git a/index.js b/index.js
index a5461b9..ac4c55d 100644
--- a/index.js
+++ b/index.js
@@ -17,13 +17,12 @@
along with wasmsnark. If not, see .
*/
+// export * as bn128_wasm from "./build/bn128_wasm.js";
+// export * as bls12381_wasm from "./build/bls12381_wasm.js";
+// export * as mnt6753_wasm from "./build/mnt6753_wasm.js";
-// module.exports.bn128_wasm = require("./build/bn128_wasm.js");
-// module.exports.bls12381_wasm = require("./build/bls12381_wasm.js");
-// module.exports.mnt6753_wasm = require("./build/mnt6753_wasm.js");
+export { default as buildBn128 } from "./src/bn128/build_bn128.js";
+export { default as buildBls12381 } from "./src/bls12381/build_bls12381.js";
+// export { default as buildMnt6753 } from "./src/mnt6753/build_mnt7.js";
-module.exports.buildBn128 = require("./src/bn128/build_bn128.js");
-module.exports.buildBls12381 = require("./src/bls12381/build_bls12381.js");
-// module.exports.buildMnt6753 = require("./src/mnt6753/build_mnt7.js");
-
-module.exports.buildF1m = require("./src/build_f1m");
+export { default as buildF1m } from "./src/build_f1m.js";
diff --git a/package-lock.json b/package-lock.json
index 64689e2..0c96c5f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,10 +13,53 @@
},
"devDependencies": {
"@eslint/js": "^10.0.1",
+ "@vitest/browser-playwright": "^4.1.0",
"assemblyscript": "^0.28.19",
"eslint": "^10.6.0",
"globals": "^17.7.0",
- "mocha": "^11.7.6"
+ "vite": "^8.0.0",
+ "vitest": "^4.0.18"
+ }
+ },
+ "node_modules/@blazediff/core": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@blazediff/core/-/core-1.9.1.tgz",
+ "integrity": "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@emnapi/core": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
+ "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz",
+ "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
+ "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
}
},
"node_modules/@eslint-community/eslint-utils": {
@@ -213,341 +256,680 @@
"url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
+ "license": "MIT"
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz",
+ "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==",
"dev": true,
"license": "MIT",
"optional": true,
- "engines": {
- "node": ">=14"
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.3"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1",
+ "@emnapi/runtime": "^1.7.1"
}
},
- "node_modules/@types/esrecurse": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
- "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==",
+ "node_modules/@oxc-project/types": {
+ "version": "0.137.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz",
+ "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
+ }
},
- "node_modules/@types/estree": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
- "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "node_modules/@polka/url": {
+ "version": "1.0.0-next.29",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
+ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
"dev": true,
"license": "MIT"
},
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "node_modules/@rolldown/binding-android-arm64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz",
+ "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/acorn": {
- "version": "8.17.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
- "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==",
+ "node_modules/@rolldown/binding-darwin-arm64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz",
+ "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=0.4.0"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "node_modules/@rolldown/binding-darwin-x64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz",
+ "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/ajv": {
- "version": "6.15.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
- "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
+ "node_modules/@rolldown/binding-freebsd-x64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz",
+ "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz",
+ "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz",
+ "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/assemblyscript": {
- "version": "0.28.19",
- "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.28.19.tgz",
- "integrity": "sha512-yOAlAb9EsrI00oUaf6qUTtTcYYeelG2iC3f1LnA45XUeSlMrp2O2FF5Llj4P+Y84ZiIlh/ciEEpOaPwwmOKq8g==",
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz",
+ "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "binaryen": "130.0.0-nightly.20260609",
- "long": "^5.2.4"
- },
- "bin": {
- "asc": "bin/asc.js",
- "asinit": "bin/asinit.js"
- },
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=20",
- "npm": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/assemblyscript"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "node_modules/@rolldown/binding-linux-ppc64-gnu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz",
+ "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "18 || 20 || >=22"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/binaryen": {
- "version": "130.0.0-nightly.20260609",
- "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-130.0.0-nightly.20260609.tgz",
- "integrity": "sha512-Zyl9Tw638x08LDew22YtxdYiUGxn+quzpR3ySIS4Nccv6yAiO5j1Yko9IEPNpj/aBZf71xtD/6hYXsgZ2ye3ew==",
+ "node_modules/@rolldown/binding-linux-s390x-gnu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz",
+ "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==",
+ "cpu": [
+ "s390x"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "bin": {
- "wasm-as": "bin/wasm-as",
- "wasm-ctor-eval": "bin/wasm-ctor-eval",
- "wasm-dis": "bin/wasm-dis",
- "wasm-merge": "bin/wasm-merge",
- "wasm-metadce": "bin/wasm-metadce",
- "wasm-opt": "bin/wasm-opt",
- "wasm-reduce": "bin/wasm-reduce",
- "wasm-shell": "bin/wasm-shell",
- "wasm2js": "bin/wasm2js"
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/brace-expansion": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
- "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz",
+ "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "18 || 20 || >=22"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "node_modules/@rolldown/binding-linux-x64-musl": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz",
+ "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@rolldown/binding-openharmony-arm64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz",
+ "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/chokidar": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
- "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "node_modules/@rolldown/binding-wasm32-wasi": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz",
+ "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==",
+ "cpu": [
+ "wasm32"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
"dependencies": {
- "readdirp": "^4.0.1"
+ "@emnapi/core": "1.11.1",
+ "@emnapi/runtime": "1.11.1",
+ "@napi-rs/wasm-runtime": "^1.1.6"
},
"engines": {
- "node": ">= 14.16.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz",
+ "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=12"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/cliui/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz",
+ "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=8"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/cliui/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
+ "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
"dev": true,
"license": "MIT"
},
- "node_modules/cliui/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "node_modules/@standard-schema/spec": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
+ "license": "MIT"
},
- "node_modules/cliui/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
+ "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
"dev": true,
"license": "MIT",
+ "optional": true,
"dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
+ "tslib": "^2.4.0"
}
},
- "node_modules/cliui/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "node_modules/@types/chai": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
+ "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "@types/deep-eql": "*",
+ "assertion-error": "^2.0.1"
}
},
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/@types/deep-eql": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
+ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
"dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
+ "license": "MIT"
},
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "node_modules/@types/esrecurse": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
+ "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/cross-spawn": {
+ "node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vitest/browser": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.9.tgz",
+ "integrity": "sha512-j1BKtWmPcqpMhmx/L9EPLgAJpCb0zKfwoWLmqBbxaogCXHjOwHFSEoHCBfnGtx93xKQwilZ26m+UOsHqHMkRNg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@blazediff/core": "1.9.1",
+ "@vitest/mocker": "4.1.9",
+ "@vitest/utils": "4.1.9",
+ "magic-string": "^0.30.21",
+ "pngjs": "^7.0.0",
+ "sirv": "^3.0.2",
+ "tinyrainbow": "^3.1.0",
+ "ws": "^8.19.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "vitest": "4.1.9"
+ }
+ },
+ "node_modules/@vitest/browser-playwright": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.9.tgz",
+ "integrity": "sha512-Bq1rOGf9waevzG3EOkO/dene6bvKTUsZMVg8S1i+WH3JcMjuXEjiahP9rAqZRELUqjBySOJsvvSWqK/B3wjKQw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/browser": "4.1.9",
+ "@vitest/mocker": "4.1.9",
+ "tinyrainbow": "^3.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "playwright": "*",
+ "vitest": "4.1.9"
+ },
+ "peerDependenciesMeta": {
+ "playwright": {
+ "optional": false
+ }
+ }
+ },
+ "node_modules/@vitest/expect": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz",
+ "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@standard-schema/spec": "^1.1.0",
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "4.1.9",
+ "@vitest/utils": "4.1.9",
+ "chai": "^6.2.2",
+ "tinyrainbow": "^3.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/mocker": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz",
+ "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "4.1.9",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.21"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/pretty-format": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz",
+ "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyrainbow": "^3.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz",
+ "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/utils": "4.1.9",
+ "pathe": "^2.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz",
+ "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "4.1.9",
+ "@vitest/utils": "4.1.9",
+ "magic-string": "^0.30.21",
+ "pathe": "^2.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/spy": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz",
+ "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz",
+ "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "4.1.9",
+ "convert-source-map": "^2.0.0",
+ "tinyrainbow": "^3.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
+ "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/assemblyscript": {
+ "version": "0.28.19",
+ "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.28.19.tgz",
+ "integrity": "sha512-yOAlAb9EsrI00oUaf6qUTtTcYYeelG2iC3f1LnA45XUeSlMrp2O2FF5Llj4P+Y84ZiIlh/ciEEpOaPwwmOKq8g==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "binaryen": "130.0.0-nightly.20260609",
+ "long": "^5.2.4"
+ },
+ "bin": {
+ "asc": "bin/asc.js",
+ "asinit": "bin/asinit.js"
+ },
+ "engines": {
+ "node": ">=20",
+ "npm": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/assemblyscript"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/binaryen": {
+ "version": "130.0.0-nightly.20260609",
+ "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-130.0.0-nightly.20260609.tgz",
+ "integrity": "sha512-Zyl9Tw638x08LDew22YtxdYiUGxn+quzpR3ySIS4Nccv6yAiO5j1Yko9IEPNpj/aBZf71xtD/6hYXsgZ2ye3ew==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "wasm-as": "bin/wasm-as",
+ "wasm-ctor-eval": "bin/wasm-ctor-eval",
+ "wasm-dis": "bin/wasm-dis",
+ "wasm-merge": "bin/wasm-merge",
+ "wasm-metadce": "bin/wasm-metadce",
+ "wasm-opt": "bin/wasm-opt",
+ "wasm-reduce": "bin/wasm-reduce",
+ "wasm-shell": "bin/wasm-shell",
+ "wasm2js": "bin/wasm2js"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
+ "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/chai": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
+ "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
@@ -580,18 +962,6 @@
}
}
},
- "node_modules/decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -599,40 +969,23 @@
"dev": true,
"license": "MIT"
},
- "node_modules/diff": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz",
- "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==",
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"dev": true,
- "license": "BSD-3-Clause",
+ "license": "Apache-2.0",
"engines": {
- "node": ">=0.3.1"
+ "node": ">=8"
}
},
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "node_modules/es-module-lexer": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz",
+ "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==",
"dev": true,
"license": "MIT"
},
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -790,6 +1143,16 @@
"node": ">=4.0"
}
},
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -800,6 +1163,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/expect-type": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz",
+ "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -821,18 +1194,36 @@
"dev": true,
"license": "MIT"
},
- "node_modules/file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "flat-cache": "^4.0.0"
- },
"engines": {
- "node": ">=16.0.0"
- }
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
},
"node_modules/find-up": {
"version": "5.0.0",
@@ -850,15 +1241,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
- },
"node_modules/flat-cache": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
@@ -880,53 +1262,20 @@
"dev": true,
"license": "ISC"
},
- "node_modules/foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
- "license": "ISC",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "peer": true,
"engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/glob-parent": {
@@ -942,39 +1291,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/glob/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz",
- "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.2"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/globals": {
"version": "17.7.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz",
@@ -988,24 +1304,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -1035,16 +1333,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -1057,37 +1345,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -1095,45 +1352,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/js-yaml": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
- "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/puzrin"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/nodeca"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
"node_modules/json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
@@ -1179,160 +1397,335 @@
"node": ">= 0.8.0"
}
},
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "node_modules/lightningcss": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
"dev": true,
+ "license": "MPL-2.0",
"dependencies": {
- "p-locate": "^5.0.0"
+ "detect-libc": "^2.0.3"
},
"engines": {
- "node": ">=10"
+ "node": ">= 12.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.32.0",
+ "lightningcss-darwin-arm64": "1.32.0",
+ "lightningcss-darwin-x64": "1.32.0",
+ "lightningcss-freebsd-x64": "1.32.0",
+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
+ "lightningcss-linux-arm64-gnu": "1.32.0",
+ "lightningcss-linux-arm64-musl": "1.32.0",
+ "lightningcss-linux-x64-gnu": "1.32.0",
+ "lightningcss-linux-x64-musl": "1.32.0",
+ "lightningcss-win32-arm64-msvc": "1.32.0",
+ "lightningcss-win32-x64-msvc": "1.32.0"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=10"
+ "node": ">= 12.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/long": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
- "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "Apache-2.0"
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "ISC"
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.5"
- },
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "18 || 20 || >=22"
+ "node": ">= 12.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/minipass": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
- "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "BlueOak-1.0.0",
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/mocha": {
- "version": "11.7.6",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.6.tgz",
- "integrity": "sha512-nS9xOGbw2I3cjCpxwZAEJ9xK9lmJ08vEkQvLtz4du9ZrF9UrjRpeJGiIgl2Z+Qs++pmB4ecDe48Fwsh+j+j7xA==",
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "MIT",
- "dependencies": {
- "browser-stdout": "^1.3.1",
- "chokidar": "^4.0.1",
- "debug": "^4.3.5",
- "diff": "^7.0.0",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^10.4.5",
- "he": "^1.2.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^9.0.5",
- "ms": "^2.1.3",
- "picocolors": "^1.1.1",
- "serialize-javascript": "^6.0.2",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^9.2.0",
- "yargs": "^17.7.2",
- "yargs-parser": "^21.1.1",
- "yargs-unparser": "^2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha.js"
- },
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/mocha/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "MIT"
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/mocha/node_modules/brace-expansion": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz",
- "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==",
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/mocha/node_modules/minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.2"
- },
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">= 12.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/mocha/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=10"
+ "node": ">= 12.0.0"
},
"funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/long": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
+ "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.5"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/ms": {
@@ -1342,6 +1735,25 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/nanoid": {
+ "version": "3.3.15",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
+ "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -1349,6 +1761,20 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/obug": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz",
+ "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/sxzz",
+ "https://opencollective.com/debug"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -1397,13 +1823,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
- "dev": true,
- "license": "BlueOak-1.0.0"
- },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -1423,22 +1842,12 @@
"node": ">=8"
}
},
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
"dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
+ "license": "MIT"
},
"node_modules/picocolors": {
"version": "1.1.1",
@@ -1447,6 +1856,92 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/playwright": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz",
+ "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "playwright-core": "1.61.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz",
+ "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/pngjs": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz",
+ "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.19.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.15",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
+ "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.12",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -1467,38 +1962,38 @@
"node": ">=6"
}
},
- "node_modules/readdirp": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
- "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "node_modules/rolldown": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz",
+ "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 14.18.0"
+ "dependencies": {
+ "@oxc-project/types": "=0.137.0",
+ "@rolldown/pluginutils": "^1.0.0"
+ },
+ "bin": {
+ "rolldown": "bin/cli.mjs"
},
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/serialize-javascript": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.6.tgz",
- "integrity": "sha512-ATTK5Q4gFVg0YDp1my2vqygyvhcklD/UV5GIlYHooGTn/NogJqIzpetkD6E5kmuVULqz/S9inUL25XcAgDRJQg==",
- "dev": true,
- "license": "BSD-3-Clause",
"engines": {
- "node": ">=20.0.0"
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@rolldown/binding-android-arm64": "1.1.3",
+ "@rolldown/binding-darwin-arm64": "1.1.3",
+ "@rolldown/binding-darwin-x64": "1.1.3",
+ "@rolldown/binding-freebsd-x64": "1.1.3",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.1.3",
+ "@rolldown/binding-linux-arm64-gnu": "1.1.3",
+ "@rolldown/binding-linux-arm64-musl": "1.1.3",
+ "@rolldown/binding-linux-ppc64-gnu": "1.1.3",
+ "@rolldown/binding-linux-s390x-gnu": "1.1.3",
+ "@rolldown/binding-linux-x64-gnu": "1.1.3",
+ "@rolldown/binding-linux-x64-musl": "1.1.3",
+ "@rolldown/binding-openharmony-arm64": "1.1.3",
+ "@rolldown/binding-wasm32-wasi": "1.1.3",
+ "@rolldown/binding-win32-arm64-msvc": "1.1.3",
+ "@rolldown/binding-win32-x64-msvc": "1.1.3"
}
},
"node_modules/shebang-command": {
@@ -1524,146 +2019,113 @@
"node": ">=8"
}
},
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "node_modules/siginfo": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
"dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
+ "license": "ISC"
},
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "node_modules/sirv": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
+ "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
+ "@polka/url": "^1.0.0-next.24",
+ "mrmime": "^2.0.0",
+ "totalist": "^3.0.0"
},
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=18"
}
},
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
+ "license": "BSD-3-Clause",
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/string-width-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "node_modules/stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
+ "license": "MIT"
},
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "node_modules/std-env": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz",
+ "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinybench": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
"dev": true,
"license": "MIT"
},
- "node_modules/string-width-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "node_modules/tinyexec": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz",
+ "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/strip-ansi": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
- "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "node_modules/tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-regex": "^6.2.2"
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
},
"engines": {
- "node": ">=12"
+ "node": ">=12.0.0"
},
"funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ "url": "https://github.com/sponsors/SuperchupuDev"
}
},
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "node_modules/tinyrainbow": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
+ "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
"engines": {
- "node": ">=8"
+ "node": ">=14.0.0"
}
},
- "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "node_modules/totalist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=6"
}
},
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
+ "license": "0BSD",
+ "optional": true
},
"node_modules/type-check": {
"version": "0.4.0",
@@ -1688,236 +2150,257 @@
"punycode": "^2.1.0"
}
},
- "node_modules/wasmbuilder": {
- "version": "0.0.16",
- "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz",
- "integrity": "sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA=="
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/workerpool": {
- "version": "9.3.4",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz",
- "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/wrap-ansi": {
+ "node_modules/vite": {
"version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.0.tgz",
+ "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
+ "lightningcss": "^1.32.0",
+ "picomatch": "^4.0.4",
+ "postcss": "^8.5.15",
+ "rolldown": "~1.1.2",
+ "tinyglobby": "^0.2.17"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
},
"engines": {
- "node": ">=12"
+ "node": "^20.19.0 || >=22.12.0"
},
"funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
+ "url": "https://github.com/vitejs/vite?sponsor=1"
},
- "engines": {
- "node": ">=10"
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
},
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "@vitejs/devtools": "^0.3.0",
+ "esbuild": "^0.27.0 || ^0.28.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "@vitejs/devtools": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
}
},
- "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "node_modules/vite/node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=8"
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "node_modules/vitest": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz",
+ "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
+ "@vitest/expect": "4.1.9",
+ "@vitest/mocker": "4.1.9",
+ "@vitest/pretty-format": "4.1.9",
+ "@vitest/runner": "4.1.9",
+ "@vitest/snapshot": "4.1.9",
+ "@vitest/spy": "4.1.9",
+ "@vitest/utils": "4.1.9",
+ "es-module-lexer": "^2.0.0",
+ "expect-type": "^1.3.0",
+ "magic-string": "^0.30.21",
+ "obug": "^2.1.1",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3",
+ "std-env": "^4.0.0-rc.1",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^1.0.2",
+ "tinyglobby": "^0.2.15",
+ "tinyrainbow": "^3.1.0",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
},
"engines": {
- "node": ">=8"
+ "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@opentelemetry/api": "^1.9.0",
+ "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
+ "@vitest/browser-playwright": "4.1.9",
+ "@vitest/browser-preview": "4.1.9",
+ "@vitest/browser-webdriverio": "4.1.9",
+ "@vitest/coverage-istanbul": "4.1.9",
+ "@vitest/coverage-v8": "4.1.9",
+ "@vitest/ui": "4.1.9",
+ "happy-dom": "*",
+ "jsdom": "*",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser-playwright": {
+ "optional": true
+ },
+ "@vitest/browser-preview": {
+ "optional": true
+ },
+ "@vitest/browser-webdriverio": {
+ "optional": true
+ },
+ "@vitest/coverage-istanbul": {
+ "optional": true
+ },
+ "@vitest/coverage-v8": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ },
+ "vite": {
+ "optional": false
+ }
}
},
- "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "node_modules/wasmbuilder": {
+ "version": "0.0.16",
+ "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz",
+ "integrity": "sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA=="
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "ansi-regex": "^5.0.1"
+ "isexe": "^2.0.0"
},
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
+ "bin": {
+ "node-which": "bin/node-which"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "license": "ISC",
"engines": {
- "node": ">=10"
+ "node": ">= 8"
}
},
- "node_modules/yargs": {
- "version": "17.7.3",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz",
- "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==",
+ "node_modules/why-is-node-running": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
+ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
},
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "dependencies": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
+ "bin": {
+ "why-is-node-running": "cli.js"
},
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/yargs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/yargs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "node_modules/ws": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
+ "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
"engines": {
- "node": ">=8"
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
}
},
"node_modules/yocto-queue": {
@@ -1934,6 +2417,43 @@
}
},
"dependencies": {
+ "@blazediff/core": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@blazediff/core/-/core-1.9.1.tgz",
+ "integrity": "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==",
+ "dev": true
+ },
+ "@emnapi/core": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
+ "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@emnapi/wasi-threads": "1.2.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@emnapi/runtime": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz",
+ "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@emnapi/wasi-threads": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
+ "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
"@eslint-community/eslint-utils": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
@@ -2047,27 +2567,182 @@
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"dev": true
},
- "@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true
+ },
+ "@napi-rs/wasm-runtime": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz",
+ "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@tybys/wasm-util": "^0.10.3"
+ }
+ },
+ "@oxc-project/types": {
+ "version": "0.137.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz",
+ "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==",
+ "dev": true
+ },
+ "@polka/url": {
+ "version": "1.0.0-next.29",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
+ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+ "dev": true
+ },
+ "@rolldown/binding-android-arm64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz",
+ "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-darwin-arm64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz",
+ "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-darwin-x64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz",
+ "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-freebsd-x64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz",
+ "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz",
+ "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz",
+ "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-linux-arm64-musl": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz",
+ "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-linux-ppc64-gnu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz",
+ "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-linux-s390x-gnu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz",
+ "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-linux-x64-gnu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz",
+ "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-linux-x64-musl": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz",
+ "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-openharmony-arm64": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz",
+ "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==",
"dev": true,
+ "optional": true
+ },
+ "@rolldown/binding-wasm32-wasi": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz",
+ "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==",
+ "dev": true,
+ "optional": true,
"requires": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ "@emnapi/core": "1.11.1",
+ "@emnapi/runtime": "1.11.1",
+ "@napi-rs/wasm-runtime": "^1.1.6"
}
},
- "@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz",
+ "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==",
"dev": true,
"optional": true
},
+ "@rolldown/binding-win32-x64-msvc": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz",
+ "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rolldown/pluginutils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
+ "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
+ "dev": true
+ },
+ "@standard-schema/spec": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
+ "dev": true
+ },
+ "@tybys/wasm-util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
+ "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@types/chai": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
+ "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
+ "dev": true,
+ "requires": {
+ "@types/deep-eql": "*",
+ "assertion-error": "^2.0.1"
+ }
+ },
+ "@types/deep-eql": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
+ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+ "dev": true
+ },
"@types/esrecurse": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
@@ -2086,6 +2761,106 @@
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
+ "@vitest/browser": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.9.tgz",
+ "integrity": "sha512-j1BKtWmPcqpMhmx/L9EPLgAJpCb0zKfwoWLmqBbxaogCXHjOwHFSEoHCBfnGtx93xKQwilZ26m+UOsHqHMkRNg==",
+ "dev": true,
+ "requires": {
+ "@blazediff/core": "1.9.1",
+ "@vitest/mocker": "4.1.9",
+ "@vitest/utils": "4.1.9",
+ "magic-string": "^0.30.21",
+ "pngjs": "^7.0.0",
+ "sirv": "^3.0.2",
+ "tinyrainbow": "^3.1.0",
+ "ws": "^8.19.0"
+ }
+ },
+ "@vitest/browser-playwright": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.9.tgz",
+ "integrity": "sha512-Bq1rOGf9waevzG3EOkO/dene6bvKTUsZMVg8S1i+WH3JcMjuXEjiahP9rAqZRELUqjBySOJsvvSWqK/B3wjKQw==",
+ "dev": true,
+ "requires": {
+ "@vitest/browser": "4.1.9",
+ "@vitest/mocker": "4.1.9",
+ "tinyrainbow": "^3.1.0"
+ }
+ },
+ "@vitest/expect": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz",
+ "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==",
+ "dev": true,
+ "requires": {
+ "@standard-schema/spec": "^1.1.0",
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "4.1.9",
+ "@vitest/utils": "4.1.9",
+ "chai": "^6.2.2",
+ "tinyrainbow": "^3.1.0"
+ }
+ },
+ "@vitest/mocker": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz",
+ "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==",
+ "dev": true,
+ "requires": {
+ "@vitest/spy": "4.1.9",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.21"
+ }
+ },
+ "@vitest/pretty-format": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz",
+ "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==",
+ "dev": true,
+ "requires": {
+ "tinyrainbow": "^3.1.0"
+ }
+ },
+ "@vitest/runner": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz",
+ "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==",
+ "dev": true,
+ "requires": {
+ "@vitest/utils": "4.1.9",
+ "pathe": "^2.0.3"
+ }
+ },
+ "@vitest/snapshot": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz",
+ "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==",
+ "dev": true,
+ "requires": {
+ "@vitest/pretty-format": "4.1.9",
+ "@vitest/utils": "4.1.9",
+ "magic-string": "^0.30.21",
+ "pathe": "^2.0.3"
+ }
+ },
+ "@vitest/spy": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz",
+ "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==",
+ "dev": true
+ },
+ "@vitest/utils": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz",
+ "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==",
+ "dev": true,
+ "requires": {
+ "@vitest/pretty-format": "4.1.9",
+ "convert-source-map": "^2.0.0",
+ "tinyrainbow": "^3.1.0"
+ }
+ },
"acorn": {
"version": "8.17.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
@@ -2111,27 +2886,6 @@
"uri-js": "^4.2.2"
}
},
- "ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
"assemblyscript": {
"version": "0.28.19",
"resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.28.19.tgz",
@@ -2142,6 +2896,12 @@
"long": "^5.2.4"
}
},
+ "assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+ "dev": true
+ },
"balanced-match": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
@@ -2163,106 +2923,16 @@
"balanced-match": "^4.0.2"
}
},
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "chai": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
+ "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
"dev": true
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "chokidar": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
- "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
- "dev": true,
- "requires": {
- "readdirp": "^4.0.1"
- }
- },
- "cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- }
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
"cross-spawn": {
@@ -2285,40 +2955,22 @@
"ms": "^2.1.3"
}
},
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
"deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
- "diff": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz",
- "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==",
- "dev": true
- },
- "eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"dev": true
},
- "escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "es-module-lexer": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz",
+ "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==",
"dev": true
},
"escape-string-regexp": {
@@ -2418,12 +3070,27 @@
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
},
+ "estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "^1.0.0"
+ }
+ },
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
+ "expect-type": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz",
+ "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==",
+ "dev": true
+ },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -2442,6 +3109,13 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "requires": {}
+ },
"file-entry-cache": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
@@ -2461,12 +3135,6 @@
"path-exists": "^4.0.0"
}
},
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
"flat-cache": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
@@ -2483,61 +3151,13 @@
"integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
- "foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
- "requires": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "dependencies": {
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "brace-expansion": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz",
- "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.2"
- }
- }
- }
+ "optional": true,
+ "peer": true
},
"glob-parent": {
"version": "6.0.2",
@@ -2554,18 +3174,6 @@
"integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==",
"dev": true
},
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
"ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -2584,12 +3192,6 @@
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true
},
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -2599,49 +3201,12 @@
"is-extglob": "^2.1.1"
}
},
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true
- },
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
- "jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "js-yaml": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
- "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
"json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
@@ -2679,6 +3244,103 @@
"type-check": "~0.4.0"
}
},
+ "lightningcss": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
+ "dev": true,
+ "requires": {
+ "detect-libc": "^2.0.3",
+ "lightningcss-android-arm64": "1.32.0",
+ "lightningcss-darwin-arm64": "1.32.0",
+ "lightningcss-darwin-x64": "1.32.0",
+ "lightningcss-freebsd-x64": "1.32.0",
+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
+ "lightningcss-linux-arm64-gnu": "1.32.0",
+ "lightningcss-linux-arm64-musl": "1.32.0",
+ "lightningcss-linux-x64-gnu": "1.32.0",
+ "lightningcss-linux-x64-musl": "1.32.0",
+ "lightningcss-win32-arm64-msvc": "1.32.0",
+ "lightningcss-win32-x64-msvc": "1.32.0"
+ }
+ },
+ "lightningcss-android-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-darwin-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-darwin-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-freebsd-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-linux-arm-gnueabihf": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-linux-arm64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-linux-arm64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-linux-x64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-linux-x64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-win32-arm64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
+ "dev": true,
+ "optional": true
+ },
+ "lightningcss-win32-x64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
+ "dev": true,
+ "optional": true
+ },
"locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -2688,27 +3350,20 @@
"p-locate": "^5.0.0"
}
},
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- }
- },
"long": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
"integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
"dev": true
},
- "lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true
+ "magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
},
"minimatch": {
"version": "10.2.5",
@@ -2719,88 +3374,36 @@
"brace-expansion": "^5.0.5"
}
},
- "minipass": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
- "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
"dev": true
},
- "mocha": {
- "version": "11.7.6",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.6.tgz",
- "integrity": "sha512-nS9xOGbw2I3cjCpxwZAEJ9xK9lmJ08vEkQvLtz4du9ZrF9UrjRpeJGiIgl2Z+Qs++pmB4ecDe48Fwsh+j+j7xA==",
- "dev": true,
- "requires": {
- "browser-stdout": "^1.3.1",
- "chokidar": "^4.0.1",
- "debug": "^4.3.5",
- "diff": "^8.0.3",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^10.4.5",
- "he": "^1.2.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^9.0.5",
- "ms": "^2.1.3",
- "picocolors": "^1.1.1",
- "serialize-javascript": "^7.0.5",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^9.2.0",
- "yargs": "^17.7.2",
- "yargs-parser": "^21.1.1",
- "yargs-unparser": "^2.0.0"
- },
- "dependencies": {
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "brace-expansion": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz",
- "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.2"
- }
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
+ "nanoid": {
+ "version": "3.3.15",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
+ "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
+ "dev": true
+ },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "obug": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz",
+ "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==",
+ "dev": true
+ },
"optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -2833,12 +3436,6 @@
"p-limit": "^3.0.2"
}
},
- "package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
- "dev": true
- },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -2851,15 +3448,11 @@
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
- "path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "requires": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- }
+ "pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true
},
"picocolors": {
"version": "1.1.1",
@@ -2867,6 +3460,47 @@
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true
},
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
+ },
+ "playwright": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz",
+ "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "fsevents": "2.3.2",
+ "playwright-core": "1.61.1"
+ }
+ },
+ "playwright-core": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz",
+ "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==",
+ "dev": true,
+ "peer": true
+ },
+ "pngjs": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz",
+ "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.5.15",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
+ "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.12",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ }
+ },
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -2879,23 +3513,30 @@
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true
},
- "readdirp": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
- "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
- "dev": true
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true
- },
- "serialize-javascript": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.6.tgz",
- "integrity": "sha512-ATTK5Q4gFVg0YDp1my2vqygyvhcklD/UV5GIlYHooGTn/NogJqIzpetkD6E5kmuVULqz/S9inUL25XcAgDRJQg==",
- "dev": true
+ "rolldown": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz",
+ "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==",
+ "dev": true,
+ "requires": {
+ "@oxc-project/types": "=0.137.0",
+ "@rolldown/binding-android-arm64": "1.1.3",
+ "@rolldown/binding-darwin-arm64": "1.1.3",
+ "@rolldown/binding-darwin-x64": "1.1.3",
+ "@rolldown/binding-freebsd-x64": "1.1.3",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.1.3",
+ "@rolldown/binding-linux-arm64-gnu": "1.1.3",
+ "@rolldown/binding-linux-arm64-musl": "1.1.3",
+ "@rolldown/binding-linux-ppc64-gnu": "1.1.3",
+ "@rolldown/binding-linux-s390x-gnu": "1.1.3",
+ "@rolldown/binding-linux-x64-gnu": "1.1.3",
+ "@rolldown/binding-linux-x64-musl": "1.1.3",
+ "@rolldown/binding-openharmony-arm64": "1.1.3",
+ "@rolldown/binding-wasm32-wasi": "1.1.3",
+ "@rolldown/binding-win32-arm64-msvc": "1.1.3",
+ "@rolldown/binding-win32-x64-msvc": "1.1.3",
+ "@rolldown/pluginutils": "^1.0.0"
+ }
},
"shebang-command": {
"version": "2.0.0",
@@ -2912,97 +3553,81 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "siginfo": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
"dev": true
},
- "string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "sirv": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
+ "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
"dev": true,
"requires": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
+ "@polka/url": "^1.0.0-next.24",
+ "mrmime": "^2.0.0",
+ "totalist": "^3.0.0"
}
},
- "string-width-cjs": {
- "version": "npm:string-width@4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
+ "source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true
},
- "strip-ansi": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
- "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^6.2.2"
- }
+ "stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+ "dev": true
+ },
+ "std-env": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz",
+ "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==",
+ "dev": true
+ },
+ "tinybench": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
+ "dev": true
+ },
+ "tinyexec": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz",
+ "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==",
+ "dev": true
},
- "strip-ansi-cjs": {
- "version": "npm:strip-ansi@6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
"dev": true,
"requires": {
- "ansi-regex": "^5.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- }
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
}
},
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "tinyrainbow": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
+ "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
+ "dev": true
+ },
+ "totalist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
"dev": true
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
+ "optional": true
},
"type-check": {
"version": "0.4.0",
@@ -3022,6 +3647,57 @@
"punycode": "^2.1.0"
}
},
+ "vite": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.0.tgz",
+ "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==",
+ "dev": true,
+ "requires": {
+ "fsevents": "~2.3.3",
+ "lightningcss": "^1.32.0",
+ "picomatch": "^4.0.4",
+ "postcss": "^8.5.15",
+ "rolldown": "~1.1.2",
+ "tinyglobby": "^0.2.17"
+ },
+ "dependencies": {
+ "fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "vitest": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz",
+ "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==",
+ "dev": true,
+ "requires": {
+ "@vitest/expect": "4.1.9",
+ "@vitest/mocker": "4.1.9",
+ "@vitest/pretty-format": "4.1.9",
+ "@vitest/runner": "4.1.9",
+ "@vitest/snapshot": "4.1.9",
+ "@vitest/spy": "4.1.9",
+ "@vitest/utils": "4.1.9",
+ "es-module-lexer": "^2.0.0",
+ "expect-type": "^1.3.0",
+ "magic-string": "^0.30.21",
+ "obug": "^2.1.1",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3",
+ "std-env": "^4.0.0-rc.1",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^1.0.2",
+ "tinyglobby": "^0.2.15",
+ "tinyrainbow": "^3.1.0",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
+ "why-is-node-running": "^2.3.0"
+ }
+ },
"wasmbuilder": {
"version": "0.0.16",
"resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz",
@@ -3036,154 +3712,28 @@
"isexe": "^2.0.0"
}
},
- "word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true
- },
- "workerpool": {
- "version": "9.3.4",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz",
- "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
- "dev": true
- }
- }
- },
- "wrap-ansi-cjs": {
- "version": "npm:wrap-ansi@7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yargs": {
- "version": "17.7.3",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz",
- "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==",
+ "why-is-node-running": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
+ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
"dev": true,
"requires": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
}
},
- "yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true
},
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "ws": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
+ "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
"dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- }
+ "requires": {}
},
"yocto-queue": {
"version": "0.1.0",
diff --git a/package.json b/package.json
index 1ecee6d..4d5db3f 100644
--- a/package.json
+++ b/package.json
@@ -1,17 +1,25 @@
{
"name": "wasmcurves",
+ "type": "module",
"version": "0.2.2",
"description": "elliptic curves implementations in wasm",
- "main": "index.js",
+ "main": "./build/main.cjs",
+ "module": "./index.js",
+ "exports": {
+ ".": {
+ "import": "./index.js",
+ "require": "./build/main.cjs"
+ },
+ "./build/*": "./build/*"
+ },
"scripts": {
"lint": "eslint .",
"pretest": "npm run lint",
- "test": "mocha",
- "build": "npm run build_bn128 && npm run build_mnt6753 && npm run build_bls12381 && npm run build_msm_batch",
- "build_bn128": "node tools/buildwasm_bn128.js",
- "build_mnt6753": "node tools/buildwasm_mnt6753.js",
- "build_bls12381": "node tools/buildwasm_bls12381.js",
- "build_msm_batch": "node tools/buildwasm_msm_batch.js"
+ "test": "vitest run",
+ "test:watch": "vitest",
+ "build:wasm": "node tools/buildwasm_bn128.js && node tools/buildwasm_bls12381.js && node tools/buildwasm_msm_batch.js",
+ "build:cjs": "vite build",
+ "build": "npm run build:wasm && npm run build:cjs"
},
"keywords": [
"bigint",
@@ -34,7 +42,8 @@
"assemblyscript": "^0.28.19",
"eslint": "^10.6.0",
"globals": "^17.7.0",
- "mocha": "^11.7.6"
+ "vite": "^8.0.0",
+ "vitest": "^4.0.18"
},
"dependencies": {
"wasmbuilder": "0.0.16"
diff --git a/src/bigint.js b/src/bigint.js
index 618ddfa..831bb77 100644
--- a/src/bigint.js
+++ b/src/bigint.js
@@ -110,12 +110,12 @@ function prev(n) {
function isKnownPrime(v) {
let n = abs(v);
switch (n) {
- case 21888242871839275222246405745257275088696311157297823662689037894645226208583n:
- case 21888242871839275222246405745257275088548364400416034343698204186575808495617n:
- case 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn:
- case 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001n:
- case 41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160001n:
- return true;
+ case 21888242871839275222246405745257275088696311157297823662689037894645226208583n:
+ case 21888242871839275222246405745257275088548364400416034343698204186575808495617n:
+ case 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn:
+ case 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001n:
+ case 41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160001n:
+ return true;
}
return false;
}
@@ -158,13 +158,4 @@ function isPrime(p) {
return millerRabinTest(n, a);
}
-module.exports.bitLength = bitLength;
-module.exports.isOdd = isOdd;
-module.exports.isNegative = isNegative;
-module.exports.abs = abs;
-module.exports.isUnit = isUnit;
-module.exports.compare = compare;
-module.exports.modInv = modInv;
-module.exports.modPow = modPow;
-module.exports.isPrime = isPrime;
-module.exports.square = square;
+export { bitLength, isOdd, isNegative, abs, isUnit, compare, modInv, modPow, isPrime, square };
diff --git a/src/bls12381/build_bls12381.js b/src/bls12381/build_bls12381.js
index e224d9e..7cda07a 100644
--- a/src/bls12381/build_bls12381.js
+++ b/src/bls12381/build_bls12381.js
@@ -1,19 +1,18 @@
-const utils = require("../utils");
-
-const buildF1m =require("../build_f1m.js");
-const buildF1 =require("../build_f1.js");
-const buildF2m =require("../build_f2m.js");
-const buildF3m =require("../build_f3m.js");
-const buildCurve =require("../build_curve_jacobian_a0.js");
-const buildFFT = require("../build_fft");
-const buildPol = require("../build_pol");
-const buildQAP = require("../build_qap");
-const buildApplyKey = require("../build_applykey");
-const { bitLength, isOdd, isNegative } = require("../bigint.js");
+import * as utils from "../utils.js";
+import buildF1m from "../build_f1m.js";
+import buildF1 from "../build_f1.js";
+import buildF2m from "../build_f2m.js";
+import buildF3m from "../build_f3m.js";
+import buildCurve from "../build_curve_jacobian_a0.js";
+import buildFFT from "../build_fft.js";
+import buildPol from "../build_pol.js";
+import buildQAP from "../build_qap.js";
+import buildApplyKey from "../build_applykey.js";
+import { bitLength, isOdd, isNegative } from "../bigint.js";
// Definition here: https://electriccoin.co/blog/new-snark-curve/
-module.exports = function buildBLS12381(module, _prefix) {
+export default function buildBLS12381(module, _prefix) {
const prefix = _prefix || "bls12381";
diff --git a/src/bn128/build_bn128.js b/src/bn128/build_bn128.js
index 0c5f297..8973778 100644
--- a/src/bn128/build_bn128.js
+++ b/src/bn128/build_bn128.js
@@ -1,17 +1,16 @@
-const utils = require("../utils");
-
-const buildF1m =require("../build_f1m.js");
-const buildF1 =require("../build_f1.js");
-const buildF2m =require("../build_f2m.js");
-const buildF3m =require("../build_f3m.js");
-const buildCurve =require("../build_curve_jacobian_a0.js");
-const buildFFT = require("../build_fft");
-const buildPol = require("../build_pol");
-const buildQAP = require("../build_qap");
-const buildApplyKey = require("../build_applykey");
-const { bitLength, modInv, isOdd, isNegative } = require("../bigint.js");
-
-module.exports = function buildBN128(module, _prefix) {
+import * as utils from "../utils.js";
+import buildF1m from "../build_f1m.js";
+import buildF1 from "../build_f1.js";
+import buildF2m from "../build_f2m.js";
+import buildF3m from "../build_f3m.js";
+import buildCurve from "../build_curve_jacobian_a0.js";
+import buildFFT from "../build_fft.js";
+import buildPol from "../build_pol.js";
+import buildQAP from "../build_qap.js";
+import buildApplyKey from "../build_applykey.js";
+import { bitLength, modInv, isOdd, isNegative } from "../bigint.js";
+
+export default function buildBN128(module, _prefix) {
const prefix = _prefix || "bn128";
diff --git a/src/build_applykey.js b/src/build_applykey.js
index 2cc3ef3..e7fecbb 100644
--- a/src/build_applykey.js
+++ b/src/build_applykey.js
@@ -19,7 +19,7 @@
along with wasmsnark. If not, see .
*/
-module.exports = function buildApplyKey(module, fnName, gPrefix, frPrefix, sizeGIn, sizeGOut, sizeF, opGtimesF) {
+export default function buildApplyKey(module, fnName, gPrefix, frPrefix, sizeGIn, sizeGOut, sizeF, opGtimesF) {
const f = module.addFunction(fnName);
f.addParam("pIn", "i32");
diff --git a/src/build_batchconvertion.js b/src/build_batchconvertion.js
index b4e81a1..563739c 100644
--- a/src/build_batchconvertion.js
+++ b/src/build_batchconvertion.js
@@ -1,6 +1,6 @@
-module.exports = buildBatchConvertion;
+export default buildBatchConvertion;
function buildBatchConvertion(module, fnName, internalFnName, sizeIn, sizeOut, reverse) {
if (typeof reverse === "undefined") {
diff --git a/src/build_batchinverse.js b/src/build_batchinverse.js
index 71c8214..d39f1f5 100644
--- a/src/build_batchinverse.js
+++ b/src/build_batchinverse.js
@@ -1,5 +1,5 @@
-module.exports = buildBatchInverse;
+export default buildBatchInverse;
function buildBatchInverse(module, prefix) {
diff --git a/src/build_batchop.js b/src/build_batchop.js
index f593a65..207ae2b 100644
--- a/src/build_batchop.js
+++ b/src/build_batchop.js
@@ -1,6 +1,6 @@
-module.exports = buildBatchConvertion;
+export default buildBatchConvertion;
function buildBatchConvertion(module, fnName, internalFnName, sizeIn, sizeOut, reverse) {
if (typeof reverse === "undefined") {
diff --git a/src/build_curve_jacobian_a0.js b/src/build_curve_jacobian_a0.js
index 53439b4..888bca2 100644
--- a/src/build_curve_jacobian_a0.js
+++ b/src/build_curve_jacobian_a0.js
@@ -17,12 +17,12 @@
along with wasmsnark. If not, see .
*/
-const buildTimesScalarNAF = require("./build_timesscalarnaf");
-//const buildTimesScalar = require("./build_timesscalar");
-const buildBatchConvertion = require("./build_batchconvertion");
-const buildMultiexp = require("./build_multiexp");
+import buildTimesScalarNAF from "./build_timesscalarnaf.js";
+//import buildTimesScalar from "./build_timesscalar.js";
+import buildBatchConvertion from "./build_batchconvertion.js";
+import buildMultiexp from "./build_multiexp.js";
-module.exports = function buildCurve(module, prefix, prefixField, pB) {
+export default function buildCurve(module, prefix, prefixField, pB) {
const n64 = module.modules[prefixField].n64;
diff --git a/src/build_curve_projective.js b/src/build_curve_projective.js
index 6c4c979..6912233 100644
--- a/src/build_curve_projective.js
+++ b/src/build_curve_projective.js
@@ -28,10 +28,10 @@ Operations in: http://www.hyperelliptic.org/EFD/g1p/auto-shortw-projective.html#
f
*/
-const buildTimesScalar = require("./build_timesscalar");
-const buildTimesScalarNAF = require("./build_timesscalarnaf");
+import buildTimesScalar from "./build_timesscalar.js";
+import buildTimesScalarNAF from "./build_timesscalarnaf.js";
-module.exports = function buildCurve(module, prefix, prefixField, fnMulByA) {
+export default function buildCurve(module, prefix, prefixField, fnMulByA) {
const n64 = module.modules[prefixField].n64;
diff --git a/src/build_f1.js b/src/build_f1.js
index 79db942..4d875ab 100644
--- a/src/build_f1.js
+++ b/src/build_f1.js
@@ -17,10 +17,10 @@
along with wasmsnark. If not, see .
*/
-const buildF1m =require("./build_f1m.js");
-const { bitLength } = require("./bigint.js");
+import buildF1m from "./build_f1m.js";
+import { bitLength } from "./bigint.js";
-module.exports = function buildF1(module, _q, _prefix, _f1mPrefix, _intPrefix) {
+export default function buildF1(module, _q, _prefix, _f1mPrefix, _intPrefix) {
const q = BigInt(_q);
const n64 = Math.floor((bitLength(q - 1n) - 1)/64) +1;
diff --git a/src/build_f1m.js b/src/build_f1m.js
index bcacdaf..19f3f51 100644
--- a/src/build_f1m.js
+++ b/src/build_f1m.js
@@ -17,15 +17,15 @@
along with wasmsnark. If not, see .
*/
-const buildInt = require("./build_int.js");
-const utils = require("./utils.js");
-const buildExp = require("./build_timesscalar");
-const buildBatchInverse = require("./build_batchinverse");
-const buildBatchConvertion = require("./build_batchconvertion");
-const buildBatchOp = require("./build_batchop");
-const { bitLength, modInv, modPow, isPrime, isOdd, square } = require("./bigint.js");
-
-module.exports = function buildF1m(module, _q, _prefix, _intPrefix) {
+import buildInt from "./build_int.js";
+import * as utils from "./utils.js";
+import buildExp from "./build_timesscalar.js";
+import buildBatchInverse from "./build_batchinverse.js";
+import buildBatchConvertion from "./build_batchconvertion.js";
+import buildBatchOp from "./build_batchop.js";
+import { bitLength, modInv, modPow, isPrime, isOdd, square } from "./bigint.js";
+
+export default function buildF1m(module, _q, _prefix, _intPrefix) {
const q = BigInt(_q);
const n64 = Math.floor((bitLength(q - 1n) - 1)/64) +1;
const n32 = n64*2;
diff --git a/src/build_f2m.js b/src/build_f2m.js
index b407d6e..cb94d32 100644
--- a/src/build_f2m.js
+++ b/src/build_f2m.js
@@ -16,11 +16,11 @@
You should have received a copy of the GNU General Public License
along with wasmsnark. If not, see .
*/
-const buildExp = require("./build_timesscalar");
-const buildBatchInverse = require("./build_batchinverse");
-const utils = require("./utils.js");
+import buildExp from "./build_timesscalar.js";
+import buildBatchInverse from "./build_batchinverse.js";
+import * as utils from "./utils.js";
-module.exports = function buildF2m(module, mulNonResidueFn, prefix, f1mPrefix) {
+export default function buildF2m(module, mulNonResidueFn, prefix, f1mPrefix) {
if (module.modules[prefix]) return prefix; // already builded
diff --git a/src/build_f3m.js b/src/build_f3m.js
index 08e10f2..12b2c08 100644
--- a/src/build_f3m.js
+++ b/src/build_f3m.js
@@ -16,10 +16,10 @@
You should have received a copy of the GNU General Public License
along with wasmsnark. If not, see .
*/
-const buildExp = require("./build_timesscalar");
-const buildBatchInverse = require("./build_batchinverse");
+import buildExp from "./build_timesscalar.js";
+import buildBatchInverse from "./build_batchinverse.js";
-module.exports = function buildF3m(module, mulNonResidueFn, prefix, f1mPrefix) {
+export default function buildF3m(module, mulNonResidueFn, prefix, f1mPrefix) {
if (module.modules[prefix]) return prefix; // already builded
diff --git a/src/build_fft.js b/src/build_fft.js
index d2b482d..4590d32 100644
--- a/src/build_fft.js
+++ b/src/build_fft.js
@@ -17,10 +17,10 @@
along with wasmsnark. If not, see .
*/
-const { isOdd, modInv, modPow } = require("./bigint.js");
-const utils = require("./utils.js");
+import { isOdd, modInv, modPow } from "./bigint.js";
+import * as utils from "./utils.js";
-module.exports = function buildFFT(module, prefix, gPrefix, fPrefix, opGtimesF) {
+export default function buildFFT(module, prefix, gPrefix, fPrefix, opGtimesF) {
const n64f = module.modules[fPrefix].n64;
const n8f = n64f*8;
diff --git a/src/build_int.js b/src/build_int.js
index 89e4b3b..ad10648 100644
--- a/src/build_int.js
+++ b/src/build_int.js
@@ -17,7 +17,7 @@
along with wasmsnark. If not, see .
*/
-module.exports = function buildInt(module, n64, _prefix) {
+export default function buildInt(module, n64, _prefix) {
const prefix = _prefix || "int";
if (module.modules[prefix]) return prefix; // already builded
diff --git a/src/build_mem.js b/src/build_mem.js
index d0cf98b..d4d99e2 100644
--- a/src/build_mem.js
+++ b/src/build_mem.js
@@ -17,7 +17,7 @@
along with wasmsnark. If not, see .
*/
-module.exports = function buildMem(module, prefix) {
+export default function buildMem(module, prefix) {
function buildCopy() {
const f = module.addFunction(prefix+"copy");
diff --git a/src/build_mulacc.js b/src/build_mulacc.js
index fd3b0c7..202bc81 100644
--- a/src/build_mulacc.js
+++ b/src/build_mulacc.js
@@ -17,7 +17,7 @@
along with wasmsnark. If not, see .
*/
-module.exports = function buildMulAcc(windowSize, prefix, curvePrefix, scalarPrefix) {
+export default function buildMulAcc(windowSize, prefix, curvePrefix, scalarPrefix) {
const pointN64 = module.modules[curvePrefix].n64;
const pointN8 = pointN64*8;
const scalarN64 = module.modules[scalarPrefix].n64;
diff --git a/src/build_multiexp.js b/src/build_multiexp.js
index 0e11fef..2e834c8 100644
--- a/src/build_multiexp.js
+++ b/src/build_multiexp.js
@@ -23,7 +23,7 @@
// free on the curve, a digit -m is handled by subtracting the base, so only
// 2^(c-1) buckets are needed per window instead of 2^c-1 -- halving the
// bucket-reduction cost and the bucket memory.
-module.exports = function buildMultiexp(module, prefix, fnName, opAdd, opSub, n8b) {
+export default function buildMultiexp(module, prefix, fnName, opAdd, opSub, n8b) {
const n64g = module.modules[prefix].n64;
const n8g = n64g*8;
diff --git a/src/build_pedersenhash.js b/src/build_pedersenhash.js
index 05fd5ec..75d2039 100644
--- a/src/build_pedersenhash.js
+++ b/src/build_pedersenhash.js
@@ -37,7 +37,7 @@
*/
-module.exports = function buildPedersenHash(module, prefix, curvePrefix, pointFieldPrefix, chunkSize, basesTable) {
+export default function buildPedersenHash(module, prefix, curvePrefix, pointFieldPrefix, chunkSize, basesTable) {
const pointN64 = module.modules[curvePrefix].n64;
const pointN8 = pointN64*8;
diff --git a/src/build_pol.js b/src/build_pol.js
index 938ee6c..a45cc1c 100644
--- a/src/build_pol.js
+++ b/src/build_pol.js
@@ -17,7 +17,7 @@
along with wasmsnark. If not, see .
*/
-module.exports = function buildPol(module, prefix, prefixField) {
+export default function buildPol(module, prefix, prefixField) {
const n64 = module.modules[prefixField].n64;
const n8 = n64*8;
diff --git a/src/build_qap.js b/src/build_qap.js
index a8c20cf..f78763d 100644
--- a/src/build_qap.js
+++ b/src/build_qap.js
@@ -1,5 +1,5 @@
-module.exports = function buildQAP(module, prefix, prefixField) {
+export default function buildQAP(module, prefix, prefixField) {
const n64 = module.modules[prefixField].n64;
const n8 = n64*8;
diff --git a/src/build_test.js b/src/build_test.js
index 6d078d9..ff35a25 100644
--- a/src/build_test.js
+++ b/src/build_test.js
@@ -40,5 +40,4 @@ function buildTest2(module, fn) {
module.exportFunction("test_"+fn);
}
-module.exports.buildTest1 = buildTest1;
-module.exports.buildTest2 = buildTest2;
+export { buildTest1, buildTest2 };
diff --git a/src/build_testf1.js b/src/build_testf1.js
index dc3edea..99fac45 100644
--- a/src/build_testf1.js
+++ b/src/build_testf1.js
@@ -17,7 +17,7 @@
along with wasmsnark. If not, see .
*/
-module.exports = function buildTestF1(module) {
+export default function buildTestF1(module) {
const pR2 = module.modules.f1m.pR2;
const n8 = module.modules.f1m.n64*8;
diff --git a/src/build_testg1.js b/src/build_testg1.js
index 74921c4..5627c87 100644
--- a/src/build_testg1.js
+++ b/src/build_testg1.js
@@ -17,7 +17,7 @@
along with wasmsnark. If not, see .
*/
-module.exports = function buildTestAddG1(module) {
+export default function buildTestAddG1(module) {
function buildTestAddG1() {
const f = module.addFunction("testAddG1");
diff --git a/src/build_timesscalar.js b/src/build_timesscalar.js
index 48f6fec..aa14df8 100644
--- a/src/build_timesscalar.js
+++ b/src/build_timesscalar.js
@@ -17,7 +17,7 @@
along with wasmsnark. If not, see .
*/
-module.exports = function buildTimesScalar(module, fnName, elementLen, opAB, opAA, opCopy, opInit) {
+export default function buildTimesScalar(module, fnName, elementLen, opAB, opAA, opCopy, opInit) {
const f = module.addFunction(fnName);
f.addParam("base", "i32");
diff --git a/src/build_timesscalarnaf.js b/src/build_timesscalarnaf.js
index 868b825..3f48122 100644
--- a/src/build_timesscalarnaf.js
+++ b/src/build_timesscalarnaf.js
@@ -17,7 +17,7 @@
along with wasmsnark. If not, see .
*/
-module.exports = function buildTimesScalarNAF(module, fnName, elementLen, opAB, opAA, opAmB, opCopy, opInit) {
+export default function buildTimesScalarNAF(module, fnName, elementLen, opAB, opAA, opAmB, opCopy, opInit) {
const f = module.addFunction(fnName);
f.addParam("base", "i32");
diff --git a/src/build_tomcook.js b/src/build_tomcook.js
index ab1f6b0..285a650 100644
--- a/src/build_tomcook.js
+++ b/src/build_tomcook.js
@@ -1,6 +1,5 @@
-const assert = require("assert");
-module.exports = function buildTomCook(module, _prefix) {
+export default function buildTomCook(module, _prefix) {
const prefix = _prefix || "tomcook";
const definedFunctions = {};
@@ -10,23 +9,25 @@ module.exports = function buildTomCook(module, _prefix) {
const CHUNK_BASE_MAX = "9223372036317904896";
function load(size, c, localVar, pos) {
- if (size == "l") {
- return c.i64_load(c.getLocal(localVar), pos*8);
- } else if (size=="s") {
- return c.i64_load32_s(c.getLocal(localVar), pos*4);
- } else {
- assert(false, "invalid size: "+size);
+ if (size === "l") {
+ return c.i64_load(c.getLocal(localVar), pos * 8);
}
+ if (size === "s") {
+ return c.i64_load32_s(c.getLocal(localVar), pos * 4);
+ }
+ throw new Error("invalid size: " + size);
+
}
function store(size, c, localVar, pos, value) {
- if (size == "l") {
- return c.i64_store(c.getLocal(localVar), pos*8, value);
- } else if (size == "s") {
- return c.i64_store32(c.getLocal(localVar), pos*4, value);
- } else {
- assert(false, "invalid size: "+size);
+ if (size === "l") {
+ return c.i64_store(c.getLocal(localVar), pos * 8, value);
}
+ if (size === "s") {
+ return c.i64_store32(c.getLocal(localVar), pos * 4, value);
+ }
+ throw new Error("invalid size: " + size);
+
}
function storeAdjusting(size, c, carryVar, dstVar, auxVar, pos) {
@@ -66,7 +67,7 @@ module.exports = function buildTomCook(module, _prefix) {
}
function buildMul3(sizes) {
- const fnName = prefix+"_mul3"+sizes;
+ const fnName = prefix + "_mul3" + sizes;
if (definedFunctions[fnName]) return;
definedFunctions[fnName] = true;
@@ -92,24 +93,24 @@ module.exports = function buildTomCook(module, _prefix) {
c.setLocal("a0", load(sizes[0], c, "x", 0)),
c.setLocal("b0", load(sizes[1], c, "y", 0)),
- c.setLocal("c", c.i64_mul( c.getLocal("a0"), c.getLocal("b0") )),
+ c.setLocal("c", c.i64_mul(c.getLocal("a0"), c.getLocal("b0"))),
store(sizes[2], c, "r", 0,
- c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE))
+ c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE))
),
c.setLocal("a1", load(sizes[0], c, "x", 1)),
c.setLocal("b1", load(sizes[1], c, "y", 1)),
c.setLocal("c", c.i64_add(
- c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)),
+ c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)),
c.i64_add(
- c.i64_mul( c.getLocal("a0"), c.getLocal("b1") ),
- c.i64_mul( c.getLocal("a1"), c.getLocal("b0") )
+ c.i64_mul(c.getLocal("a0"), c.getLocal("b1")),
+ c.i64_mul(c.getLocal("a1"), c.getLocal("b0"))
)
)),
store(sizes[2], c, "r", 1,
- c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE))
+ c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE))
),
c.setLocal("a2", load(sizes[0], c, "x", 2)),
@@ -117,46 +118,46 @@ module.exports = function buildTomCook(module, _prefix) {
c.setLocal("c", c.i64_add(
c.i64_add(
- c.i64_mul( c.getLocal("a0"), c.getLocal("b2") ),
- c.i64_mul( c.getLocal("a2"), c.getLocal("b0") )
+ c.i64_mul(c.getLocal("a0"), c.getLocal("b2")),
+ c.i64_mul(c.getLocal("a2"), c.getLocal("b0"))
),
c.i64_add(
- c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)),
- c.i64_mul( c.getLocal("a1"), c.getLocal("b1") ),
+ c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)),
+ c.i64_mul(c.getLocal("a1"), c.getLocal("b1")),
)
)),
store(sizes[2], c, "r", 2,
- c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE))
+ c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE))
),
c.setLocal("c", c.i64_add(
c.i64_add(
- c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)),
- c.i64_mul( c.getLocal("a1"), c.getLocal("b2"))
+ c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)),
+ c.i64_mul(c.getLocal("a1"), c.getLocal("b2"))
),
- c.i64_mul( c.getLocal("a2"), c.getLocal("b1") ),
+ c.i64_mul(c.getLocal("a2"), c.getLocal("b1")),
)),
store(sizes[2], c, "r", 3,
- c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE))
+ c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE))
),
c.setLocal("c", c.i64_add(
- c.i64_mul( c.getLocal("a2"), c.getLocal("b2") ),
- c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)),
+ c.i64_mul(c.getLocal("a2"), c.getLocal("b2")),
+ c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)),
)),
store(sizes[2], c, "r", 4,
- c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE))
+ c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE))
),
store(sizes[2], c, "r", 5,
- c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)),
+ c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)),
),
);
}
function buildAdd(n, sizes) {
- const fnName = prefix+"_add"+n+sizes;
+ const fnName = prefix + "_add" + n + sizes;
if (definedFunctions[fnName]) return;
definedFunctions[fnName] = true;
@@ -168,7 +169,7 @@ module.exports = function buildTomCook(module, _prefix) {
const c = f.getCodeBuilder();
- for (let i=0; i=0; i--) {
+ for (let i = n - 2; i >= 0; i--) {
f.addCode(
c.setLocal("c",
c.i64_add(
@@ -288,11 +289,11 @@ module.exports = function buildTomCook(module, _prefix) {
function buildRecompose(n, sizes) {
- const fnName = prefix+"_recompose"+n+sizes;
+ const fnName = prefix + "_recompose" + n + sizes;
if (definedFunctions[fnName]) return;
definedFunctions[fnName] = true;
- const sn = n/3;
+ const sn = n / 3;
const f = module.addFunction(fnName);
f.addParam("s", "i32");
f.addParam("r", "i32");
@@ -319,7 +320,7 @@ module.exports = function buildTomCook(module, _prefix) {
f.addCode(c.setLocal("c", c.i64_const(0)));
- for (let i=0; i.
*/
-const ModuleBuilder = require("wasmbuilder").ModuleBuilder;
-const buildF1 = require("./build_f1.js");
-const buildTestF1 = require("./build_testf1.js");
-const { bitLength } = require("./bigint.js");
+import { ModuleBuilder } from "wasmbuilder";
+import buildF1 from "./build_f1.js";
+import buildTestF1 from "./build_testf1.js";
+import { bitLength } from "./bigint.js";
async function build(q) {
const f1 = new F1(q);
@@ -149,4 +149,4 @@ class F1 {
*/
}
-module.exports = build;
+export default build;
diff --git a/src/mnt6753/build_mnt6753.js b/src/mnt6753/build_mnt6753.js
index 7bf0691..0458008 100644
--- a/src/mnt6753/build_mnt6753.js
+++ b/src/mnt6753/build_mnt6753.js
@@ -1,16 +1,15 @@
-const utils = require("../utils");
-
-const buildF1m =require("../build_f1m.js");
-const buildF1 =require("../build_f1.js");
-const buildF2m =require("../build_f2m.js");
-const buildF3m =require("../build_f3m.js");
-const buildCurve =require("../build_curve_projective.js");
-const { bitLength, isOdd, modInv } = require("../bigint.js");
+import * as utils from "../utils.js";
+import buildF1m from "../build_f1m.js";
+import buildF1 from "../build_f1.js";
+import buildF2m from "../build_f2m.js";
+import buildF3m from "../build_f3m.js";
+import buildCurve from "../build_curve_projective.js";
+import { bitLength, isOdd, modInv } from "../bigint.js";
//
// Curve definition: https://coinlist.co/build/coda/pages/mnt6753
//
-module.exports = function buildMNT6753(module, _prefix) {
+export default function buildMNT6753(module, _prefix) {
const prefix = _prefix || "mnt6753";
diff --git a/src/utils.js b/src/utils.js
index a3ac5b9..7edc07f 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -17,7 +17,7 @@
along with wasmsnark. If not, see .
*/
-exports.bigInt2BytesLE = function bigInt2BytesLE(_a, len) {
+export function bigInt2BytesLE(_a, len) {
const b = Array(len);
let v = BigInt(_a);
for (let i=0; i> 8n;
}
return b;
-};
+}
-exports.bigInt2U32LE = function bigInt2BytesLE(_a, len) {
+export function bigInt2U32LE(_a, len) {
const b = Array(len);
let v = BigInt(_a);
for (let i=0; i> 32n;
}
return b;
-};
+}
-exports.isOcamNum = function(a) {
+export function isOcamNum(a) {
if (!Array.isArray(a)) return false;
if (a.length != 3) return false;
if (typeof a[0] !== "number") return false;
if (typeof a[1] !== "number") return false;
if (!Array.isArray(a[2])) return false;
return true;
-};
+}
diff --git a/test/bls12381.js b/test/bls12381.js
index ba7a318..9b43110 100644
--- a/test/bls12381.js
+++ b/test/bls12381.js
@@ -1,39 +1,37 @@
-const assert = require("assert");
-const buildBls12381 = require("../src/bls12381/build_bls12381.js");
-const buildProtoboard = require("wasmbuilder").buildProtoboard;
-const {bitLength} = require("../src/bigint.js");
+import buildBls12381 from "../src/bls12381/build_bls12381.js";
+import { buildProtoboard } from "wasmbuilder";
+import { bitLength } from "../src/bigint.js";
+import { describe, assert, it, beforeAll } from "vitest";
describe("Basic tests for g1 in bls12-381", function () {
- this.timeout(10000000);
-
- const n8q=48;
- const n8r=32;
+ const n8q = 48;
+ const n8r = 32;
function getFieldElementF12(pR) {
pb.ftm_fromMontgomery(pR, pR);
- const res = [
+ const res = [
[
[
pb.get(pR),
- pb.get(pR+n8q),
- ],[
- pb.get(pR+n8q*2),
- pb.get(pR+n8q*3),
- ],[
- pb.get(pR+n8q*4),
- pb.get(pR+n8q*5),
+ pb.get(pR + n8q),
+ ], [
+ pb.get(pR + n8q * 2),
+ pb.get(pR + n8q * 3),
+ ], [
+ pb.get(pR + n8q * 4),
+ pb.get(pR + n8q * 5),
]
- ],[
+ ], [
[
- pb.get(pR+n8q*6),
- pb.get(pR+n8q*7),
- ],[
- pb.get(pR+n8q*8),
- pb.get(pR+n8q*9),
- ],[
- pb.get(pR+n8q*10),
- pb.get(pR+n8q*11),
+ pb.get(pR + n8q * 6),
+ pb.get(pR + n8q * 7),
+ ], [
+ pb.get(pR + n8q * 8),
+ pb.get(pR + n8q * 9),
+ ], [
+ pb.get(pR + n8q * 10),
+ pb.get(pR + n8q * 11),
]
]
];
@@ -42,16 +40,16 @@ describe("Basic tests for g1 in bls12-381", function () {
}
function getFieldElementF6(pR) {
pb.f6m_fromMontgomery(pR, pR);
- const res = [
+ const res = [
[
pb.get(pR),
- pb.get(pR+n8q),
- ],[
- pb.get(pR+n8q*2),
- pb.get(pR+n8q*3),
- ],[
- pb.get(pR+n8q*4),
- pb.get(pR+n8q*5),
+ pb.get(pR + n8q),
+ ], [
+ pb.get(pR + n8q * 2),
+ pb.get(pR + n8q * 3),
+ ], [
+ pb.get(pR + n8q * 4),
+ pb.get(pR + n8q * 5),
]
];
pb.f6m_toMontgomery(pR, pR);
@@ -59,18 +57,18 @@ describe("Basic tests for g1 in bls12-381", function () {
}
function getFieldElementF2(pR) {
pb.f2m_fromMontgomery(pR, pR);
- const res = [
+ const res = [
pb.get(pR),
- pb.get(pR+n8q),
+ pb.get(pR + n8q),
];
pb.f2m_toMontgomery(pR, pR);
return res;
}
function assertEqualF12(p1, p2) {
- for (let i=0; i<2; i++) {
- for (let j=0; j<3; j++) {
- for (let k=0; k<2; k++) {
+ for (let i = 0; i < 2; i++) {
+ for (let j = 0; j < 3; j++) {
+ for (let k = 0; k < 2; k++) {
assert.equal(p1[i][j][k], p2[i][j][k]);
}
}
@@ -78,15 +76,15 @@ describe("Basic tests for g1 in bls12-381", function () {
}
function assertEqualF6(p1, p2) {
- for (let j=0; j<3; j++) {
- for (let k=0; k<2; k++) {
+ for (let j = 0; j < 3; j++) {
+ for (let k = 0; k < 2; k++) {
assert.equal(BigInt(p1[j][k]), BigInt(p2[j][k]));
}
}
}
function assertEqualF2(p1, p2) {
- for (let k=0; k<2; k++) {
+ for (let k = 0; k < 2; k++) {
assert.equal(p1[k], p2[k]);
}
}
@@ -98,85 +96,91 @@ describe("Basic tests for g1 in bls12-381", function () {
return "0x" + n.toString(16);
}
+
//eslint-disable-next-line no-unused-vars
function printF1(s, p) {
console.log(s, " " + ns(p));
}
+
//eslint-disable-next-line no-unused-vars
function printF2(s, p) {
- console.log(s + " Fq2(" + ns(p) + " + " + ns(p+n8q) +"*u " );
+ console.log(s + " Fq2(" + ns(p) + " + " + ns(p + n8q) + "*u ");
}
+
//eslint-disable-next-line no-unused-vars
function printF6(s, p) {
- console.log(s + " [Fq2(\n" + ns(p) + " +\n " + ns(p+n8q) +"*u],[" );
- console.log("Fq2(\n" + ns(p+n8q*2) + " +\n " + ns(p+n8q*3) +"*u],[" );
- console.log("Fq2(\n" + ns(p+n8q*4) + " +\n " + ns(p+n8q*5) +"*u]" );
+ console.log(s + " [Fq2(\n" + ns(p) + " +\n " + ns(p + n8q) + "*u],[");
+ console.log("Fq2(\n" + ns(p + n8q * 2) + " +\n " + ns(p + n8q * 3) + "*u],[");
+ console.log("Fq2(\n" + ns(p + n8q * 4) + " +\n " + ns(p + n8q * 5) + "*u]");
}
+
//eslint-disable-next-line no-unused-vars
function printF12(s, p) {
- console.log(s + " [ [Fq2(\n" + ns(p) + " +\n " + ns(p+n8q) +"*u],[" );
- console.log("Fq2(\n" + ns(p+n8q*2) + " +\n " + ns(p+n8q*3) +"*u],[" );
- console.log("Fq2(\n" + ns(p+n8q*4) + " +\n " + ns(p+n8q*5) +"*u]]" );
- console.log("[ [Fq2(\n" + ns(p+n8q*6) + " +\n " + ns(p+n8q*7) +"*u],[" );
- console.log("Fq2(\n" + ns(p+n8q*8) + " +\n " + ns(p+n8q*9) +"*u],[" );
- console.log("Fq2(\n" + ns(p+n8q*10) + " +\n " + ns(p+n8q*11) +"*u]]" );
+ console.log(s + " [ [Fq2(\n" + ns(p) + " +\n " + ns(p + n8q) + "*u],[");
+ console.log("Fq2(\n" + ns(p + n8q * 2) + " +\n " + ns(p + n8q * 3) + "*u],[");
+ console.log("Fq2(\n" + ns(p + n8q * 4) + " +\n " + ns(p + n8q * 5) + "*u]]");
+ console.log("[ [Fq2(\n" + ns(p + n8q * 6) + " +\n " + ns(p + n8q * 7) + "*u],[");
+ console.log("Fq2(\n" + ns(p + n8q * 8) + " +\n " + ns(p + n8q * 9) + "*u],[");
+ console.log("Fq2(\n" + ns(p + n8q * 10) + " +\n " + ns(p + n8q * 11) + "*u]]");
}
+
//eslint-disable-next-line no-unused-vars
function printG1(s, p) {
- console.log(s + " G1(" + ns(p) + " , " + ns(p+n8q) + " , " + ns(p+n8q*2) + ")" );
+ console.log(s + " G1(" + ns(p) + " , " + ns(p + n8q) + " , " + ns(p + n8q * 2) + ")");
}
+
//eslint-disable-next-line no-unused-vars
function printG2(s, p) {
console.log(s + " (G2):");
- for (let i=0; i<6; i++) {
- console.log(ns(p+n8q*i));
+ for (let i = 0; i < 6; i++) {
+ console.log(ns(p + n8q * i));
}
console.log("");
}
let pb;
- before(async () => {
+ beforeAll(async () => {
pb = await buildProtoboard((module) => {
buildBls12381(module);
}, n8q);
});
it("It should do a basic point operation in F2", async () => {
- const e1 = pb.alloc(n8q*2);
+ const e1 = pb.alloc(n8q * 2);
pb.set(e1, 1n);
- pb.set(e1+n8q, 2n);
- const e2 = pb.alloc(n8q*2);
- pb.f2m_square(e1,e2);
+ pb.set(e1 + n8q, 2n);
+ const e2 = pb.alloc(n8q * 2);
+ pb.f2m_square(e1, e2);
- const e3 = pb.alloc(n8q*2);
- pb.f2m_mul(e1,e1, e3);
+ const e3 = pb.alloc(n8q * 2);
+ pb.f2m_mul(e1, e1, e3);
const res2 = getFieldElementF2(e2);
const res3 = getFieldElementF2(e3);
- assert(res2[0] = res3[0]);
- assert(res2[1] = res3[1]);
+ assert.equal(res2[0], res3[0]);
+ assert.equal(res2[1], res3[1]);
});
it("It should do a big exponentioation F2", async () => {
- const e1 = pb.alloc(n8q*2);
+ const e1 = pb.alloc(n8q * 2);
pb.set(e1, 1n);
- pb.set(e1+n8q, 2n);
+ pb.set(e1 + n8q, 2n);
const exp = pb.bls12381.q ** 2n - 1n;
- const l = (Math.floor((bitLength(exp)- 1) / 64) +1)*8;
+ const l = (Math.floor((bitLength(exp) - 1) / 64) + 1) * 8;
const ps = pb.alloc(l);
pb.set(ps, exp, l);
- const e2 = pb.alloc(n8q*2);
+ const e2 = pb.alloc(n8q * 2);
pb.f2m_exp(e1, ps, l, e2);
const res2 = getFieldElementF2(e2);
@@ -185,19 +189,19 @@ describe("Basic tests for g1 in bls12-381", function () {
assert.equal(res2[1], 0n);
});
it("It should do a basic op in f2", async () => {
- const e1 = pb.alloc(n8q*2);
+ const e1 = pb.alloc(n8q * 2);
- for (let i=0; i<2; i++) {
- pb.set(e1+n8q*i, BigInt(i+1));
+ for (let i = 0; i < 2; i++) {
+ pb.set(e1 + n8q * i, BigInt(i + 1));
}
pb.f2m_toMontgomery(e1, e1);
- const e2 = pb.alloc(n8q*2);
+ const e2 = pb.alloc(n8q * 2);
pb.f2m_square(e1, e2);
- const e3 = pb.alloc(n8q*2);
- pb.f2m_mul(e1,e1, e3);
+ const e3 = pb.alloc(n8q * 2);
+ pb.f2m_mul(e1, e1, e3);
const res2 = getFieldElementF2(e2);
const res3 = getFieldElementF2(e3);
@@ -205,23 +209,23 @@ describe("Basic tests for g1 in bls12-381", function () {
assertEqualF2(res2, res3);
});
it("It should do a basic op in f6", async () => {
- const e1 = pb.alloc(n8q*6);
+ const e1 = pb.alloc(n8q * 6);
- for (let i=0; i<6; i++) {
- if ((i==2)||(i==5)) {
- pb.set(e1+n8q*i, 1n);
+ for (let i = 0; i < 6; i++) {
+ if ((i == 2) || (i == 5)) {
+ pb.set(e1 + n8q * i, 1n);
} else {
- pb.f1m_zero(e1+n8q*i);
+ pb.f1m_zero(e1 + n8q * i);
}
}
pb.f6m_toMontgomery(e1, e1);
- const e2 = pb.alloc(n8q*6);
+ const e2 = pb.alloc(n8q * 6);
pb.f6m_square(e1, e2);
- const e3 = pb.alloc(n8q*6);
- pb.f6m_mul(e1,e1, e3);
+ const e3 = pb.alloc(n8q * 6);
+ pb.f6m_mul(e1, e1, e3);
pb.f6m_fromMontgomery(e2, e2);
pb.f6m_fromMontgomery(e3, e3);
@@ -232,23 +236,23 @@ describe("Basic tests for g1 in bls12-381", function () {
assertEqualF6(res2, res3);
});
it("It should do a basic op in f12", async () => {
- const e1 = pb.alloc(n8q*12);
+ const e1 = pb.alloc(n8q * 12);
- for (let i=0; i<12; i++) {
- if ((i==5)||(i==6)) {
- pb.set(e1+n8q*i, 1n);
+ for (let i = 0; i < 12; i++) {
+ if ((i == 5) || (i == 6)) {
+ pb.set(e1 + n8q * i, 1n);
} else {
- pb.f1m_zero(e1+n8q*i);
+ pb.f1m_zero(e1 + n8q * i);
}
}
pb.ftm_toMontgomery(e1, e1);
- const e2 = pb.alloc(n8q*12);
+ const e2 = pb.alloc(n8q * 12);
pb.ftm_square(e1, e2);
- const e3 = pb.alloc(n8q*12);
- pb.ftm_mul(e1,e1, e3);
+ const e3 = pb.alloc(n8q * 12);
+ pb.ftm_mul(e1, e1, e3);
pb.ftm_fromMontgomery(e2, e2);
pb.ftm_fromMontgomery(e3, e3);
@@ -261,21 +265,21 @@ describe("Basic tests for g1 in bls12-381", function () {
it("It should do a big exponentioation F12", async () => {
- const e1 = pb.alloc(n8q*12);
+ const e1 = pb.alloc(n8q * 12);
- for (let i=0; i<12; i++) {
- pb.set(e1+n8q*i, BigInt(i+1));
+ for (let i = 0; i < 12; i++) {
+ pb.set(e1 + n8q * i, BigInt(i + 1));
}
const exp = pb.bls12381.q ** 12n - 1n;
- const l = (Math.floor((bitLength(exp) - 1) / 64) +1)*8;
+ const l = (Math.floor((bitLength(exp) - 1) / 64) + 1) * 8;
const ps = pb.alloc(l);
pb.set(ps, exp, l);
- const e2 = pb.alloc(n8q*12);
+ const e2 = pb.alloc(n8q * 12);
pb.ftm_exp(e1, ps, l, e2);
const res2 = getFieldElementF12(e2);
@@ -296,8 +300,8 @@ describe("Basic tests for g1 in bls12-381", function () {
it("It should do a basic point doubling adding G1", async () => {
const pG1 = pb.bls12381.pG1gen;
- const p1 = pb.alloc(n8q*3);
- const p2 = pb.alloc(n8q*3);
+ const p1 = pb.alloc(n8q * 3);
+ const p2 = pb.alloc(n8q * 3);
pb.g1m_add(pG1, pG1, p1); // 2*G1
pb.g1m_add(p1, pG1, p1); // 3*G1
@@ -315,11 +319,11 @@ describe("Basic tests for g1 in bls12-381", function () {
});
it("It should timesScalar G1", async () => {
- const s=10;
+ const s = 10;
const pG1 = pb.bls12381.pG1gen;
- const p1 = pb.alloc(n8q*3);
- const p2 = pb.alloc(n8q*3);
+ const p1 = pb.alloc(n8q * 3);
+ const p2 = pb.alloc(n8q * 3);
const ps = pb.alloc(n8r);
pb.set(ps, s);
@@ -328,8 +332,8 @@ describe("Basic tests for g1 in bls12-381", function () {
pb.g1m_zero(p2);
- for (let i=0; i {
const pG2 = pb.bls12381.pG2gen;
- const p1 = pb.alloc(n8q*6);
- const p2 = pb.alloc(n8q*6);
+ const p1 = pb.alloc(n8q * 6);
+ const p2 = pb.alloc(n8q * 6);
pb.g2m_add(pG2, pG2, p1); // 2*G1
pb.g2m_add(p1, pG2, p1); // 3*G1
@@ -366,11 +370,11 @@ describe("Basic tests for g1 in bls12-381", function () {
});
it("It should timesScalar G2", async () => {
- const s=10;
+ const s = 10;
const pG2 = pb.bls12381.pG2gen;
- const p1 = pb.alloc(n8q*6);
- const p2 = pb.alloc(n8q*6);
+ const p1 = pb.alloc(n8q * 6);
+ const p2 = pb.alloc(n8q * 6);
const ps = pb.alloc(n8r);
pb.set(ps, s);
@@ -379,8 +383,8 @@ describe("Basic tests for g1 in bls12-381", function () {
pb.g2m_zero(p2);
- for (let i=0; i {
- const pA = pb.alloc(n8q*6);
- const pB = pb.alloc(n8q*6);
- const pRes1 = pb.alloc(n8q*6);
- const pRes2 = pb.alloc(n8q*6);
- const pOne = pb.alloc(n8q*6);
- const pRef = pb.alloc(n8q*6);
- for (let i=0; i<6; i++) {
- pb.set(pA + i*n8q, i+1);
- if ([2,3].indexOf(i)>=0) {
- pb.set(pB + i*n8q, i+1);
+ const pA = pb.alloc(n8q * 6);
+ const pB = pb.alloc(n8q * 6);
+ const pRes1 = pb.alloc(n8q * 6);
+ const pRes2 = pb.alloc(n8q * 6);
+ const pOne = pb.alloc(n8q * 6);
+ const pRef = pb.alloc(n8q * 6);
+ for (let i = 0; i < 6; i++) {
+ pb.set(pA + i * n8q, i + 1);
+ if ([2, 3].indexOf(i) >= 0) {
+ pb.set(pB + i * n8q, i + 1);
} else {
- pb.f1m_zero(pB + i*n8q);
+ pb.f1m_zero(pB + i * n8q);
}
}
pb.f6m_one(pOne);
- pb.f6m_toMontgomery(pA,pA);
- pb.f6m_toMontgomery(pB,pB);
- const pc1 = pb.alloc(n8q*2);
+ pb.f6m_toMontgomery(pA, pA);
+ pb.f6m_toMontgomery(pB, pB);
+ const pc1 = pb.alloc(n8q * 2);
pb.set(pc1, 3);
pb.set(pc1 + n8q, 4);
pb.f2m_toMontgomery(pc1, pc1);
@@ -429,34 +433,34 @@ describe("Basic tests for g1 in bls12-381", function () {
const res1 = getFieldElementF6(pRes1);
const res2 = getFieldElementF6(pRes2);
- assertEqualF6(ref, [[0,0], [3,4], [0,0]]);
+ assertEqualF6(ref, [[0, 0], [3, 4], [0, 0]]);
assertEqualF6(res1, res2);
});
it("Should f6_mul01", async () => {
- const pA = pb.alloc(n8q*6);
- const pB = pb.alloc(n8q*6);
- const pRes1 = pb.alloc(n8q*6);
- const pRes2 = pb.alloc(n8q*6);
- const pOne = pb.alloc(n8q*6);
- const pRef = pb.alloc(n8q*6);
- for (let i=0; i<6; i++) {
- pb.set(pA + i*n8q, i+1);
- if ([0,1,2,3].indexOf(i)>=0) {
- pb.set(pB + i*n8q, i+1);
+ const pA = pb.alloc(n8q * 6);
+ const pB = pb.alloc(n8q * 6);
+ const pRes1 = pb.alloc(n8q * 6);
+ const pRes2 = pb.alloc(n8q * 6);
+ const pOne = pb.alloc(n8q * 6);
+ const pRef = pb.alloc(n8q * 6);
+ for (let i = 0; i < 6; i++) {
+ pb.set(pA + i * n8q, i + 1);
+ if ([0, 1, 2, 3].indexOf(i) >= 0) {
+ pb.set(pB + i * n8q, i + 1);
} else {
- pb.f1m_zero(pB + i*n8q);
+ pb.f1m_zero(pB + i * n8q);
}
}
pb.f6m_one(pOne);
- pb.f6m_toMontgomery(pA,pA);
- pb.f6m_toMontgomery(pB,pB);
- const pc0 = pb.alloc(n8q*2);
+ pb.f6m_toMontgomery(pA, pA);
+ pb.f6m_toMontgomery(pB, pB);
+ const pc0 = pb.alloc(n8q * 2);
pb.set(pc0, 1);
pb.set(pc0 + n8q, 2);
pb.f2m_toMontgomery(pc0, pc0);
- const pc1 = pb.alloc(n8q*2);
+ const pc1 = pb.alloc(n8q * 2);
pb.set(pc1, 3);
pb.set(pc1 + n8q, 4);
pb.f2m_toMontgomery(pc1, pc1);
@@ -470,37 +474,37 @@ describe("Basic tests for g1 in bls12-381", function () {
const res1 = getFieldElementF6(pRes1);
const res2 = getFieldElementF6(pRes2);
- assertEqualF6(ref, [[1,2], [3,4], [0,0]]);
+ assertEqualF6(ref, [[1, 2], [3, 4], [0, 0]]);
assertEqualF6(res1, res2);
});
it("Should f12_014", async () => {
- const pA = pb.alloc(n8q*12);
- const pB = pb.alloc(n8q*12);
- const pRes1 = pb.alloc(n8q*12);
- const pRes2 = pb.alloc(n8q*12);
- const pOne = pb.alloc(n8q*12);
- const pRef = pb.alloc(n8q*12);
- for (let i=0; i<12; i++) {
- pb.set(pA + i*n8q, i+1);
- if ([0,1,2,3,8,9].indexOf(i)>=0) {
- pb.set(pB + i*n8q, i+1);
+ const pA = pb.alloc(n8q * 12);
+ const pB = pb.alloc(n8q * 12);
+ const pRes1 = pb.alloc(n8q * 12);
+ const pRes2 = pb.alloc(n8q * 12);
+ const pOne = pb.alloc(n8q * 12);
+ const pRef = pb.alloc(n8q * 12);
+ for (let i = 0; i < 12; i++) {
+ pb.set(pA + i * n8q, i + 1);
+ if ([0, 1, 2, 3, 8, 9].indexOf(i) >= 0) {
+ pb.set(pB + i * n8q, i + 1);
} else {
- pb.f1m_zero(pB + i*n8q);
+ pb.f1m_zero(pB + i * n8q);
}
}
pb.ftm_one(pOne);
- pb.ftm_toMontgomery(pA,pA);
- pb.ftm_toMontgomery(pB,pB);
- const pc0 = pb.alloc(n8q*2);
+ pb.ftm_toMontgomery(pA, pA);
+ pb.ftm_toMontgomery(pB, pB);
+ const pc0 = pb.alloc(n8q * 2);
pb.set(pc0, 1);
pb.set(pc0 + n8q, 2);
pb.ftm_toMontgomery(pc0, pc0);
- const pc1 = pb.alloc(n8q*2);
+ const pc1 = pb.alloc(n8q * 2);
pb.set(pc1, 3);
pb.set(pc1 + n8q, 4);
pb.f2m_toMontgomery(pc1, pc1);
- const pc4 = pb.alloc(n8q*2);
+ const pc4 = pb.alloc(n8q * 2);
pb.set(pc4, 9);
pb.set(pc4 + n8q, 10);
pb.f2m_toMontgomery(pc4, pc4);
@@ -514,20 +518,20 @@ describe("Basic tests for g1 in bls12-381", function () {
const res1 = getFieldElementF12(pRes1);
const res2 = getFieldElementF12(pRes2);
- assertEqualF12(ref, [[[1,2], [3,4], [0,0]],[[0,0], [9,10], [0,0]]]);
+ assertEqualF12(ref, [[[1, 2], [3, 4], [0, 0]], [[0, 0], [9, 10], [0, 0]]]);
assertEqualF12(res1, res2);
});
it("Should Test Frobenius", async () => {
- const pA = pb.alloc(n8q*12);
- const pB = pb.alloc(n8q*12);
- const pAq = pb.alloc(n8q*12);
- const pAqi = pb.alloc(n8q*12);
+ const pA = pb.alloc(n8q * 12);
+ const pB = pb.alloc(n8q * 12);
+ const pAq = pb.alloc(n8q * 12);
+ const pAqi = pb.alloc(n8q * 12);
const pq = pb.bls12381.pq;
let res1, res2;
- for (let i=0; i<12; i++) {
- pb.set(pA+n8q*i, BigInt(i+1));
+ for (let i = 0; i < 12; i++) {
+ pb.set(pA + n8q * i, BigInt(i + 1));
}
pb.ftm_toMontgomery(pA, pA);
// printF12("pA", pA);
@@ -538,10 +542,10 @@ describe("Basic tests for g1 in bls12-381", function () {
assertEqualF12(res1, res2);
- pb.ftm_exp(pA, pq, n8q,pAq);
+ pb.ftm_exp(pA, pq, n8q, pAq);
- for (let power = 1; power<10; ++power) {
- pb["ftm_frobeniusMap"+power](pA, pAqi);
+ for (let power = 1; power < 10; ++power) {
+ pb["ftm_frobeniusMap" + power](pA, pAqi);
res1 = getFieldElementF12(pAq);
res2 = getFieldElementF12(pAqi);
@@ -550,7 +554,7 @@ describe("Basic tests for g1 in bls12-381", function () {
assertEqualF12(res1, res2);
- pb.ftm_exp(pAq, pq, n8q,pAq);
+ pb.ftm_exp(pAq, pq, n8q, pAq);
}
});
@@ -566,15 +570,15 @@ describe("Basic tests for g1 in bls12-381", function () {
// FieldT aqcubed_minus1 = a.Frobenius_map(FieldT::extension_degree()/2) * a.inverse();
// assert(aqcubed_minus1.inverse() == aqcubed_minus1.unitary_inverse());
- const pA = pb.alloc(n8q*12);
- const pAf = pb.alloc(n8q*12);
- const pAInverse = pb.alloc(n8q*12);
- const pAcubedMinus1 = pb.alloc(n8q*12);
- const pAcubedMinus1Inverse = pb.alloc(n8q*12);
- const pAcubedMinus1UnitaryInverse = pb.alloc(n8q*12);
+ const pA = pb.alloc(n8q * 12);
+ const pAf = pb.alloc(n8q * 12);
+ const pAInverse = pb.alloc(n8q * 12);
+ const pAcubedMinus1 = pb.alloc(n8q * 12);
+ const pAcubedMinus1Inverse = pb.alloc(n8q * 12);
+ const pAcubedMinus1UnitaryInverse = pb.alloc(n8q * 12);
let res1, res2;
- for (let i=0; i<12; i++) {
- pb.set(pA+n8q*i, BigInt(i+1));
+ for (let i = 0; i < 12; i++) {
+ pb.set(pA + n8q * i, BigInt(i + 1));
}
pb.ftm_toMontgomery(pA, pA);
pb.ftm_frobeniusMap6(pA, pAf);
@@ -602,12 +606,12 @@ describe("Basic tests for g1 in bls12-381", function () {
// assert(beta.cyclotomic_squared() == beta.squared());
- const pA = pb.alloc(n8q*12);
- const pBeta = pb.alloc(n8q*12);
- const pCycSquare = pb.alloc(n8q*12);
- const pNormSquare = pb.alloc(n8q*12);
- const pCycExp = pb.alloc(n8q*12);
- const pNormExp = pb.alloc(n8q*12);
+ const pA = pb.alloc(n8q * 12);
+ const pBeta = pb.alloc(n8q * 12);
+ const pCycSquare = pb.alloc(n8q * 12);
+ const pNormSquare = pb.alloc(n8q * 12);
+ const pCycExp = pb.alloc(n8q * 12);
+ const pNormExp = pb.alloc(n8q * 12);
const pr = pb.alloc(n8q);
const pe = pb.alloc(544);
const peZ = pb.alloc(n8q);
@@ -617,8 +621,8 @@ describe("Basic tests for g1 in bls12-381", function () {
pb.set(peZ, 15132376222941642752n);
let res1, res2;
- for (let i=0; i<12; i++) {
- pb.set(pA+n8q*i, BigInt(i+1));
+ for (let i = 0; i < 12; i++) {
+ pb.set(pA + n8q * i, BigInt(i + 1));
}
pb.ftm_exp(pA, pe, 544, pBeta);
@@ -647,12 +651,12 @@ describe("Basic tests for g1 in bls12-381", function () {
it("Should test unitary", async () => {
const pG1 = pb.bls12381.pG1gen;
const pG2 = pb.bls12381.pG2gen;
- const pnG1 = pb.alloc(n8q*3);
- const pnG2 = pb.alloc(n8q*6);
+ const pnG1 = pb.alloc(n8q * 3);
+ const pnG2 = pb.alloc(n8q * 6);
- const pP = pb.alloc(n8q*12);
- const pQ = pb.alloc(n8q*12);
- const pR = pb.alloc(n8q*12);
+ const pP = pb.alloc(n8q * 12);
+ const pQ = pb.alloc(n8q * 12);
+ const pR = pb.alloc(n8q * 12);
pb.g1m_neg(pG1, pnG1);
pb.g2m_neg(pG2, pnG2);
@@ -676,15 +680,15 @@ describe("Basic tests for g1 in bls12-381", function () {
it("It should do a basic pairing", async () => {
const ps = pb.alloc(n8r);
- const pOne = pb.alloc(n8q*12);
+ const pOne = pb.alloc(n8q * 12);
pb.set(ps, 10n);
- const pRes1 = pb.alloc(n8q*12);
- const pRes2 = pb.alloc(n8q*12);
- const pRes3 = pb.alloc(n8q*12);
- const pRes4 = pb.alloc(n8q*12);
+ const pRes1 = pb.alloc(n8q * 12);
+ const pRes2 = pb.alloc(n8q * 12);
+ const pRes3 = pb.alloc(n8q * 12);
+ const pRes4 = pb.alloc(n8q * 12);
- const pG1s = pb.alloc(n8q*3);
- const pG2s = pb.alloc(n8q*2*3);
+ const pG1s = pb.alloc(n8q * 3);
+ const pG2s = pb.alloc(n8q * 2 * 3);
const pG1gen = pb.bls12381.pG1gen;
const pG2gen = pb.bls12381.pG2gen;
@@ -692,8 +696,8 @@ describe("Basic tests for g1 in bls12-381", function () {
pb.g1m_timesScalar(pG1gen, ps, n8r, pG1s);
pb.g2m_timesScalar(pG2gen, ps, n8r, pG2s);
- const pPreP = pb.alloc(n8q*3);
- const pPreQ = pb.alloc(n8q*2*3 + n8q*2*3*70);
+ const pPreP = pb.alloc(n8q * 3);
+ const pPreQ = pb.alloc(n8q * 2 * 3 + n8q * 2 * 3 * 70);
pb.bls12381_prepareG1(pG1s, pPreP);
pb.bls12381_prepareG2(pG2gen, pPreQ);
@@ -739,27 +743,27 @@ describe("Basic tests for g1 in bls12-381", function () {
});
it("Point in curve and not in group G1", async () => {
- const p1 = pb.alloc(n8q*3);
+ const p1 = pb.alloc(n8q * 3);
const pG1b = pb.bls12381.pG1b;
pb.set(p1, 4n, n8q);
pb.f1m_toMontgomery(p1, p1);
- pb.f1m_square(p1, p1+n8q);
- pb.f1m_mul(p1, p1+n8q, p1+n8q);
- pb.f1m_add(p1+n8q, pG1b, p1+n8q);
+ pb.f1m_square(p1, p1 + n8q);
+ pb.f1m_mul(p1, p1 + n8q, p1 + n8q);
+ pb.f1m_add(p1 + n8q, pG1b, p1 + n8q);
assert.equal(pb.g1m_inGroupAffine(p1), 0);
assert.equal(pb.g1m_inCurveAffine(p1), 0);
- pb.f1m_sqrt(p1+n8q, p1+n8q);
+ pb.f1m_sqrt(p1 + n8q, p1 + n8q);
assert.equal(pb.g1m_inGroupAffine(p1), 0);
assert.equal(pb.g1m_inCurveAffine(p1), 1);
- const ph= pb.alloc(16);
+ const ph = pb.alloc(16);
pb.set(ph, 0x396c8c005555e1568c00aaab0000aaabn, 16);
- pb.g1m_timesScalarAffine(p1, ph, 16 ,p1);
+ pb.g1m_timesScalarAffine(p1, ph, 16, p1);
assert.equal(pb.g1m_inCurve(p1), 1);
assert.equal(pb.g1m_inGroup(p1), 1);
@@ -773,28 +777,28 @@ describe("Basic tests for g1 in bls12-381", function () {
it("Point in curve and not in group G2", async () => {
- const p1 = pb.alloc(n8q*6);
+ const p1 = pb.alloc(n8q * 6);
const pG2b = pb.bls12381.pG2b;
pb.set(p1, 0n, n8q);
- pb.set(p1+n8q, 4n, n8q);
+ pb.set(p1 + n8q, 4n, n8q);
pb.f2m_toMontgomery(p1, p1);
- pb.f2m_square(p1, p1+n8q*2);
- pb.f2m_mul(p1, p1+n8q*2, p1+n8q*2);
- pb.f2m_add(p1+n8q*2, pG2b, p1+n8q*2);
+ pb.f2m_square(p1, p1 + n8q * 2);
+ pb.f2m_mul(p1, p1 + n8q * 2, p1 + n8q * 2);
+ pb.f2m_add(p1 + n8q * 2, pG2b, p1 + n8q * 2);
assert.equal(pb.g2m_inGroupAffine(p1), 0);
assert.equal(pb.g2m_inCurveAffine(p1), 0);
- pb.f2m_sqrt(p1+n8q*2, p1+n8q*2);
+ pb.f2m_sqrt(p1 + n8q * 2, p1 + n8q * 2);
assert.equal(pb.g2m_inGroupAffine(p1), 0);
assert.equal(pb.g2m_inCurveAffine(p1), 1);
- const ph= pb.alloc(64);
+ const ph = pb.alloc(64);
pb.set(ph, 0x05d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5n, 64);
- pb.g2m_timesScalarAffine(p1, ph, 64 ,p1);
+ pb.g2m_timesScalarAffine(p1, ph, 64, p1);
assert.equal(pb.g2m_inCurve(p1), 1);
assert.equal(pb.g2m_inGroup(p1), 1);
diff --git a/test/bn128.js b/test/bn128.js
index ed12262..f3b3d85 100644
--- a/test/bn128.js
+++ b/test/bn128.js
@@ -1,6 +1,7 @@
-const assert = require("assert");
-const buildBn128 = require("../src/bn128/build_bn128.js");
-const buildProtoboard = require("wasmbuilder").buildProtoboard;
+import buildBn128 from "../src/bn128/build_bn128.js";
+import { buildProtoboard } from "wasmbuilder";
+import { describe, assert, it, beforeAll } from "vitest";
+
describe("Basic tests for g1 in bn128", () => {
@@ -9,33 +10,33 @@ describe("Basic tests for g1 in bn128", () => {
[
[
pb.get(pR),
- pb.get(pR+32),
- ],[
- pb.get(pR+32*2),
- pb.get(pR+32*3),
- ],[
- pb.get(pR+32*4),
- pb.get(pR+32*5),
+ pb.get(pR + 32),
+ ], [
+ pb.get(pR + 32 * 2),
+ pb.get(pR + 32 * 3),
+ ], [
+ pb.get(pR + 32 * 4),
+ pb.get(pR + 32 * 5),
]
- ],[
+ ], [
[
- pb.get(pR+32*6),
- pb.get(pR+32*7),
- ],[
- pb.get(pR+32*8),
- pb.get(pR+32*9),
- ],[
- pb.get(pR+32*10),
- pb.get(pR+32*11),
+ pb.get(pR + 32 * 6),
+ pb.get(pR + 32 * 7),
+ ], [
+ pb.get(pR + 32 * 8),
+ pb.get(pR + 32 * 9),
+ ], [
+ pb.get(pR + 32 * 10),
+ pb.get(pR + 32 * 11),
]
]
];
}
function assertEqualF12(p1, p2) {
- for (let i=0; i<2; i++) {
- for (let j=0; j<3; j++) {
- for (let k=0; k<2; k++) {
+ for (let i = 0; i < 2; i++) {
+ for (let j = 0; j < 3; j++) {
+ for (let k = 0; k < 2; k++) {
assert.equal(p1[i][j][k], p2[i][j][k]);
}
}
@@ -49,51 +50,56 @@ describe("Basic tests for g1 in bn128", () => {
return "0x" + n.toString(16);
}
+
//eslint-disable-next-line no-unused-vars
function printF1(s, p) {
console.log(s, " " + ns(p));
}
+
//eslint-disable-next-line no-unused-vars
function printF2(s, p) {
- console.log(s + " Fq2(" + ns(p) + " + " + ns(p+32) +"*u " );
+ console.log(s + " Fq2(" + ns(p) + " + " + ns(p + 32) + "*u ");
}
+
//eslint-disable-next-line no-unused-vars
function printF6(s, p) {
- console.log(s + " [Fq2(\n" + ns(p) + " +\n " + ns(p+32) +"*u],[" );
- console.log("Fq2(\n" + ns(p+32*2) + " +\n " + ns(p+32*3) +"*u],[" );
- console.log("Fq2(\n" + ns(p+32*4) + " +\n " + ns(p+32*5) +"*u]" );
+ console.log(s + " [Fq2(\n" + ns(p) + " +\n " + ns(p + 32) + "*u],[");
+ console.log("Fq2(\n" + ns(p + 32 * 2) + " +\n " + ns(p + 32 * 3) + "*u],[");
+ console.log("Fq2(\n" + ns(p + 32 * 4) + " +\n " + ns(p + 32 * 5) + "*u]");
}
+
//eslint-disable-next-line no-unused-vars
function printF12(s, p) {
- console.log(s + " [ [Fq2(\n" + ns(p) + " +\n " + ns(p+32) +"*u],[" );
- console.log("Fq2(\n" + ns(p+32*2) + " +\n " + ns(p+32*3) +"*u],[" );
- console.log("Fq2(\n" + ns(p+32*4) + " +\n " + ns(p+32*5) +"*u]]" );
- console.log("[ [Fq2(\n" + ns(p+32*6) + " +\n " + ns(p+32*7) +"*u],[" );
- console.log("Fq2(\n" + ns(p+32*8) + " +\n " + ns(p+32*9) +"*u],[" );
- console.log("Fq2(\n" + ns(p+32*10) + " +\n " + ns(p+32*11) +"*u]]" );
+ console.log(s + " [ [Fq2(\n" + ns(p) + " +\n " + ns(p + 32) + "*u],[");
+ console.log("Fq2(\n" + ns(p + 32 * 2) + " +\n " + ns(p + 32 * 3) + "*u],[");
+ console.log("Fq2(\n" + ns(p + 32 * 4) + " +\n " + ns(p + 32 * 5) + "*u]]");
+ console.log("[ [Fq2(\n" + ns(p + 32 * 6) + " +\n " + ns(p + 32 * 7) + "*u],[");
+ console.log("Fq2(\n" + ns(p + 32 * 8) + " +\n " + ns(p + 32 * 9) + "*u],[");
+ console.log("Fq2(\n" + ns(p + 32 * 10) + " +\n " + ns(p + 32 * 11) + "*u]]");
}
- //eslint-disable-next-line no-unused-vars
+
function printG1(s, p) {
- console.log(s + " G1(" + ns(p) + " , " + ns(p+n8) + " , " + ns(p+n8*2) + ")" );
+ console.log(s + " G1(" + ns(p) + " , " + ns(p + n8) + " , " + ns(p + n8 * 2) + ")");
}
+
//eslint-disable-next-line no-unused-vars
function printG2(s, p) {
console.log(s + " (G2):");
- for (let i=0; i<6; i++) {
- console.log(ns(p+n8*i));
+ for (let i = 0; i < 6; i++) {
+ console.log(ns(p + n8 * i));
}
console.log("");
}
let pb;
- const n8=32;
- before(async () => {
+ const n8 = 32;
+ beforeAll(async () => {
pb = await buildProtoboard((module) => {
buildBn128(module);
}, n8);
@@ -102,15 +108,15 @@ describe("Basic tests for g1 in bn128", () => {
it("It should do a basic point doubling adding G1", async () => {
const pG1 = pb.bn128.pG1gen;
- const p1 = pb.alloc(n8*3);
- const p2 = pb.alloc(n8*3);
+ const p1 = pb.alloc(n8 * 3);
+ const p2 = pb.alloc(n8 * 3);
pb.g1m_add(pG1, pG1, p1); // 2*G1
// pb.g1m_normalize(p1, p1);
- printG1("2*G1=",p1);
+ printG1("2*G1=", p1);
pb.g1m_add(p1, pG1, p1); // 3*G1
// pb.g1m_normalize(p1, p1);
- printG1("3*G1=",p1);
+ printG1("3*G1=", p1);
pb.g1m_add(p1, pG1, p1); // 4*G1
pb.g1m_double(pG1, p2); // 2*G1
@@ -127,8 +133,8 @@ describe("Basic tests for g1 in bn128", () => {
it("It should do a basic doubling adding G1", async () => {
const pG1 = pb.bn128.pG1gen;
- const p1 = pb.alloc(n8*3);
- const p2 = pb.alloc(n8*3);
+ const p1 = pb.alloc(n8 * 3);
+ const p2 = pb.alloc(n8 * 3);
pb.g1m_add(pG1, pG1, p1); // 2*G1
pb.g1m_add(p1, pG1, p1); // 3*G1
@@ -146,11 +152,11 @@ describe("Basic tests for g1 in bn128", () => {
});
it("It should timesScalar G1", async () => {
- const s=2;
+ const s = 2;
const pG1 = pb.bn128.pG1gen;
- const p1 = pb.alloc(n8*3);
- const p2 = pb.alloc(n8*3);
+ const p1 = pb.alloc(n8 * 3);
+ const p2 = pb.alloc(n8 * 3);
const ps = pb.alloc(n8);
pb.set(ps, s);
@@ -159,8 +165,8 @@ describe("Basic tests for g1 in bn128", () => {
pb.g1m_zero(p2);
- for (let i=0; i {
const pG1 = pb.bn128.pG1gen;
const pr = pb.bn128.pr;
- const p1 = pb.alloc(n8*3);
+ const p1 = pb.alloc(n8 * 3);
pb.g1m_timesScalar(pG1, pr, n8, p1);
@@ -179,7 +185,7 @@ describe("Basic tests for g1 in bn128", () => {
const pG1 = pb.bn128.pG1gen;
const pr = pb.bn128.pr;
- const p1 = pb.alloc(n8*3);
+ const p1 = pb.alloc(n8 * 3);
pb.g1m_timesScalarAffine(pG1, pr, n8, p1);
@@ -189,7 +195,7 @@ describe("Basic tests for g1 in bn128", () => {
const pG2 = pb.bn128.pG2gen;
const pr = pb.bn128.pr;
- const p1 = pb.alloc(n8*3*2);
+ const p1 = pb.alloc(n8 * 3 * 2);
pb.g1m_timesScalarAffine(pG2, pr, n8, p1);
@@ -198,8 +204,8 @@ describe("Basic tests for g1 in bn128", () => {
it("It should do a basic point doubling adding G2", async () => {
const pG2 = pb.bn128.pG2gen;
- const p1 = pb.alloc(n8*6);
- const p2 = pb.alloc(n8*6);
+ const p1 = pb.alloc(n8 * 6);
+ const p2 = pb.alloc(n8 * 6);
pb.g2m_add(pG2, pG2, p1); // 2*G1
pb.g2m_add(p1, pG2, p1); // 3*G1
@@ -217,11 +223,11 @@ describe("Basic tests for g1 in bn128", () => {
});
it("It should timesScalar G2", async () => {
- const s=10;
+ const s = 10;
const pG2 = pb.bn128.pG2gen;
- const p1 = pb.alloc(n8*6);
- const p2 = pb.alloc(n8*6);
+ const p1 = pb.alloc(n8 * 6);
+ const p2 = pb.alloc(n8 * 6);
const ps = pb.alloc(n8);
pb.set(ps, s);
@@ -230,8 +236,8 @@ describe("Basic tests for g1 in bn128", () => {
pb.g2m_zero(p2);
- for (let i=0; i {
const pG2 = pb.bn128.pG2gen;
const pr = pb.bn128.pr;
- const p1 = pb.alloc(n8*6);
+ const p1 = pb.alloc(n8 * 6);
pb.g2m_timesScalar(pG2, pr, n8, p1);
@@ -248,20 +254,20 @@ describe("Basic tests for g1 in bn128", () => {
});
it("Should multiply 024", async () => {
- const pf = pb.alloc(32*12);
- for (let i=0; i<12; i++) {
- pb.set(pf + i*32, i);
+ const pf = pb.alloc(32 * 12);
+ for (let i = 0; i < 12; i++) {
+ pb.set(pf + i * 32, i);
}
- pb.ftm_toMontgomery(pf,pf);
- const pEll0 = pb.alloc(32*2);
+ pb.ftm_toMontgomery(pf, pf);
+ const pEll0 = pb.alloc(32 * 2);
pb.set(pEll0, 1);
pb.set(pEll0 + 32, 2);
- pb.f2m_toMontgomery(pEll0,pEll0);
- const pVW = pb.alloc(32*2);
+ pb.f2m_toMontgomery(pEll0, pEll0);
+ const pVW = pb.alloc(32 * 2);
pb.set(pVW, 3);
pb.set(pVW + 32, 4);
pb.f2m_toMontgomery(pVW, pVW);
- const pVV = pb.alloc(32*2);
+ const pVV = pb.alloc(32 * 2);
pb.set(pVV, 5);
pb.set(pVV + 32, 6);
pb.f2m_toMontgomery(pVV, pVV);
@@ -269,10 +275,10 @@ describe("Basic tests for g1 in bn128", () => {
pb.bn128__mulBy024(pEll0, pVW, pVV, pf);
const res1 = getFieldElementF12(pf);
- for (let i=0; i<12; i++) {
- pb.set(pf + i*32, i);
+ for (let i = 0; i < 12; i++) {
+ pb.set(pf + i * 32, i);
}
- pb.ftm_toMontgomery(pf,pf);
+ pb.ftm_toMontgomery(pf, pf);
pb.bn128__mulBy024(pEll0, pVW, pVV, pf);
const res2 = getFieldElementF12(pf);
@@ -283,14 +289,14 @@ describe("Basic tests for g1 in bn128", () => {
it("Should Test Frobenius", async () => {
- const pA = pb.alloc(32*12);
- const pB = pb.alloc(32*12);
- const pAq = pb.alloc(32*12);
- const pAqi = pb.alloc(32*12);
+ const pA = pb.alloc(32 * 12);
+ const pB = pb.alloc(32 * 12);
+ const pAq = pb.alloc(32 * 12);
+ const pAqi = pb.alloc(32 * 12);
const pq = pb.bn128.pq;
let res1, res2;
- for (let i=0; i<12; i++) {
- pb.set(pA+32*i, BigInt(i+1));
+ for (let i = 0; i < 12; i++) {
+ pb.set(pA + 32 * i, BigInt(i + 1));
}
pb.ftm_toMontgomery(pA, pA);
// printF12("pA", pA);
@@ -300,10 +306,10 @@ describe("Basic tests for g1 in bn128", () => {
res2 = getFieldElementF12(pB);
assertEqualF12(res1, res2);
- pb.ftm_exp(pA, pq, 32,pAq);
+ pb.ftm_exp(pA, pq, 32, pAq);
- for (let power = 1; power<10; ++power) {
- pb["bn128__frobeniusMap"+power](pA, pAqi);
+ for (let power = 1; power < 10; ++power) {
+ pb["bn128__frobeniusMap" + power](pA, pAqi);
res1 = getFieldElementF12(pAq);
res2 = getFieldElementF12(pAqi);
@@ -312,7 +318,7 @@ describe("Basic tests for g1 in bn128", () => {
assertEqualF12(res1, res2);
- pb.ftm_exp(pAq, pq, 32,pAq);
+ pb.ftm_exp(pAq, pq, 32, pAq);
}
});
@@ -329,15 +335,15 @@ describe("Basic tests for g1 in bn128", () => {
// assert(aqcubed_minus1.inverse() == aqcubed_minus1.unitary_inverse());
// }
- const pA = pb.alloc(32*12);
- const pAf = pb.alloc(32*12);
- const pAInverse = pb.alloc(32*12);
- const pAcubedMinus1 = pb.alloc(32*12);
- const pAcubedMinus1Inverse = pb.alloc(32*12);
- const pAcubedMinus1UnitaryInverse = pb.alloc(32*12);
+ const pA = pb.alloc(32 * 12);
+ const pAf = pb.alloc(32 * 12);
+ const pAInverse = pb.alloc(32 * 12);
+ const pAcubedMinus1 = pb.alloc(32 * 12);
+ const pAcubedMinus1Inverse = pb.alloc(32 * 12);
+ const pAcubedMinus1UnitaryInverse = pb.alloc(32 * 12);
let res1, res2;
- for (let i=0; i<12; i++) {
- pb.set(pA+32*i, BigInt(i+1));
+ for (let i = 0; i < 12; i++) {
+ pb.set(pA + 32 * i, BigInt(i + 1));
}
pb.ftm_toMontgomery(pA, pA);
pb.bn128__frobeniusMap6(pA, pAf);
@@ -365,12 +371,12 @@ describe("Basic tests for g1 in bn128", () => {
// assert(beta.cyclotomic_squared() == beta.squared());
- const pA = pb.alloc(32*12);
- const pBeta = pb.alloc(32*12);
- const pCycSquare = pb.alloc(32*12);
- const pNormSquare = pb.alloc(32*12);
- const pCycExp = pb.alloc(32*12);
- const pNormExp = pb.alloc(32*12);
+ const pA = pb.alloc(32 * 12);
+ const pBeta = pb.alloc(32 * 12);
+ const pCycSquare = pb.alloc(32 * 12);
+ const pNormSquare = pb.alloc(32 * 12);
+ const pCycExp = pb.alloc(32 * 12);
+ const pNormExp = pb.alloc(32 * 12);
const pr = pb.alloc(32);
const pe = pb.alloc(352);
const peZ = pb.alloc(32);
@@ -380,8 +386,8 @@ describe("Basic tests for g1 in bn128", () => {
pb.set(peZ, 4965661367192848881n);
let res1, res2;
- for (let i=0; i<12; i++) {
- pb.set(pA+32*i, BigInt(i+1));
+ for (let i = 0; i < 12; i++) {
+ pb.set(pA + 32 * i, BigInt(i + 1));
}
pb.ftm_exp(pA, pe, 352, pBeta);
@@ -410,15 +416,15 @@ describe("Basic tests for g1 in bn128", () => {
it("It should do a basic pairing", async () => {
const ps = pb.alloc(32);
- const pOne = pb.alloc(32*12);
+ const pOne = pb.alloc(32 * 12);
pb.set(ps, 10n);
- const pRes1 = pb.alloc(32*12);
- const pRes2 = pb.alloc(32*12);
- const pRes3 = pb.alloc(32*12);
- const pRes4 = pb.alloc(32*12);
+ const pRes1 = pb.alloc(32 * 12);
+ const pRes2 = pb.alloc(32 * 12);
+ const pRes3 = pb.alloc(32 * 12);
+ const pRes4 = pb.alloc(32 * 12);
- const pG1s = pb.alloc(32*3);
- const pG2s = pb.alloc(32*2*3);
+ const pG1s = pb.alloc(32 * 3);
+ const pG2s = pb.alloc(32 * 2 * 3);
const pG1gen = pb.bn128.pG1gen;
const pG2gen = pb.bn128.pG2gen;
@@ -426,8 +432,8 @@ describe("Basic tests for g1 in bn128", () => {
pb.g1m_timesScalar(pG1gen, ps, 32, pG1s);
pb.g2m_timesScalar(pG2gen, ps, 32, pG2s);
- const pPreP = pb.alloc(32*3);
- const pPreQ = pb.alloc(32*2*3 + 32*2*3*103);
+ const pPreP = pb.alloc(32 * 3);
+ const pPreQ = pb.alloc(32 * 2 * 3 + 32 * 2 * 3 * 103);
pb.bn128_prepareG1(pG1s, pPreP);
pb.bn128_prepareG2(pG2gen, pPreQ);
@@ -460,33 +466,33 @@ describe("Basic tests for g1 in bn128", () => {
});
it("It should test multiexp", async () => {
- const N=8;
+ const N = 8;
const pG1 = pb.bn128.pG1gen;
- const pExpected = pb.alloc(n8*3);
- const pScalarExpected = pb.alloc(n8*N);
- let acc=0;
- for (let i=0; i {
});
it("Should test compress and decompress in G1", async () => {
- const N=10;
+ const N = 10;
const pScalar = pb.alloc(n8);
- const pP1 = pb.alloc(n8*3);
- const pP1a = pb.alloc(n8*2);
- const pP2a = pb.alloc(n8*2);
+ const pP1 = pb.alloc(n8 * 3);
+ const pP1a = pb.alloc(n8 * 2);
+ const pP2a = pb.alloc(n8 * 2);
const pP1c = pb.alloc(n8);
- const pP1u = pb.alloc(n8*2);
+ const pP1u = pb.alloc(n8 * 2);
const pG1 = pb.bn128.pG1gen;
- for (let i=0; i {
});
it("Should test compress and decompress in G2", async () => {
- const N=10;
+ const N = 10;
const pScalar = pb.alloc(n8);
- const pP1 = pb.alloc(n8*2*3);
- const pP1a = pb.alloc(n8*2*2);
- const pP2a = pb.alloc(n8*2*2);
- const pP1c = pb.alloc(n8*2);
- const pP1u = pb.alloc(n8*2*2);
+ const pP1 = pb.alloc(n8 * 2 * 3);
+ const pP1a = pb.alloc(n8 * 2 * 2);
+ const pP2a = pb.alloc(n8 * 2 * 2);
+ const pP1c = pb.alloc(n8 * 2);
+ const pP1u = pb.alloc(n8 * 2 * 2);
const pG2 = pb.bn128.pG2gen;
- for (let i=0; i {
@@ -349,7 +348,7 @@ describe("Basic tests for Zq", () => {
console.log(t);
- }).timeout(10000000);
+ });
it("Should test to montgomery", async () => {
const q = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
const f1 = await buildF1(q);
@@ -769,7 +768,7 @@ describe("Basic tests for Zq", () => {
assert.equal(c1, c2);
- }).timeout(10000000);
+ });
it("It should profile int", async () => {
@@ -820,6 +819,6 @@ describe("Basic tests for Zq", () => {
//
// console.log("Mul Old Time (ms): " + time);
- }).timeout(10000000);
+ });
});
diff --git a/test/f1_critical_numbers.js b/test/f1_critical_numbers.js
index 3a650ab..7593ef7 100644
--- a/test/f1_critical_numbers.js
+++ b/test/f1_critical_numbers.js
@@ -1,8 +1,9 @@
-const assert = require("assert");
-const { bitLength } = require("../src/bigint.js");
+import assert from "assert";
+import { bitLength } from "../src/bigint.js";
-const buildF1m = require("../src/build_f1m");
-const buildProtoboard = require("wasmbuilder").buildProtoboard;
+import buildF1m from "../src/build_f1m.js";
+import { buildProtoboard } from "wasmbuilder";
+import { describe, it } from "vitest";
// bn254 base field (q) and scalar field (r) -- same moduli used throughout
// the rest of the suite (test/bn128.js, test/f1.js).
@@ -47,8 +48,7 @@ function getCriticalNumbers(q, lim) {
return Array.from(numbers);
}
-describe("f1m critical-number stress tests (limb-boundary carries)", function () {
- this.timeout(120000);
+describe("f1m critical-number stress tests (limb-boundary carries)", () => {
function generateTests(q, name) {
const nums = getCriticalNumbers(q, 2);
diff --git a/test/fft.js b/test/fft.js
index 0b87002..57cb2b0 100644
--- a/test/fft.js
+++ b/test/fft.js
@@ -1,12 +1,12 @@
-const assert = require("assert");
-const buildBn128 = require("../src/bn128/build_bn128.js");
-const buildProtoboard = require("wasmbuilder").buildProtoboard;
+import buildBn128 from "../src/bn128/build_bn128.js";
+import { buildProtoboard } from "wasmbuilder";
+import { describe, assert, it, beforeAll } from "vitest";
+
describe("FFT tests", function () {
- this.timeout(100000);
let pb;
const n8=32;
- before(async () => {
+ beforeAll(async () => {
pb = await buildProtoboard((module) => {
buildBn128(module);
}, n8);
diff --git a/test/helpers/helpers.js b/test/helpers/helpers.js
index 0ce8810..2437745 100644
--- a/test/helpers/helpers.js
+++ b/test/helpers/helpers.js
@@ -20,4 +20,4 @@ function genValues(n, neg, bitsPerWord) {
return res;
}
-module.exports.genValues = genValues;
+export { genValues };
diff --git a/test/int.js b/test/int.js
index 637f425..2e54a8f 100644
--- a/test/int.js
+++ b/test/int.js
@@ -1,16 +1,17 @@
-const assert = require("assert");
-const buildProtoboard = require("wasmbuilder").buildProtoboard;
-const buildInt = require("../src/build_int.js");
-const buildTest2 = require("../src/build_test.js").buildTest2;
+import { buildProtoboard } from "wasmbuilder";
+import buildInt from "../src/build_int.js";
+import { buildTest2 } from "../src/build_test.js";
+import { genValues } from "./helpers/helpers.js";
+import { describe, assert, it, beforeAll } from "vitest";
+
-const helpers = require("./helpers/helpers.js");
describe("Basic tests for Int", () => {
let pbInt;
- before(async () => {
+ beforeAll(async () => {
pbInt = await buildProtoboard((module) => {
buildInt(module, 4);
buildTest2(module, "int_mul");
@@ -23,10 +24,10 @@ describe("Basic tests for Int", () => {
const pB = pbInt.alloc();
const pC = pbInt.alloc(64);
- const values = helpers.genValues(8, false);
+ const values = genValues(8, false);
- for (let i=0; i {
const pA = pbInt.alloc();
const pC = pbInt.alloc(64);
- const values = helpers.genValues(8, false);
+ const values = genValues(8, false);
- for (let i=0; i {
assert.equal(c, values[i] * values[i]);
}
- }).timeout(10000000);
+ });
it("It should profile int", async () => {
@@ -96,6 +97,6 @@ describe("Basic tests for Int", () => {
// console.log("Mul Old Time (ms): " + time);
- }).timeout(10000000);
+ });
});
diff --git a/test/mnt6753.js b/test/mnt6753.js
index 7249306..78b45c4 100644
--- a/test/mnt6753.js
+++ b/test/mnt6753.js
@@ -1,15 +1,15 @@
-const assert = require("assert");
-const buildProtoboard = require("wasmbuilder").buildProtoboard;
-const buildMNT6753 = require("../src/mnt6753/build_mnt6753.js");
-const buildPedersenHash = require("../src/build_pedersenhash.js");
-const baseTables = require("../build/pedersenparams_mnt6753.js");
+import { buildProtoboard } from "wasmbuilder";
+import buildMNT6753 from "../src/mnt6753/build_mnt6753.js";
+import buildPedersenHash from "../src/build_pedersenhash.js";
+import { code as pedersenParamsCode } from "../build/pedersenparams_mnt6753.js";
+import { describe, assert, it, beforeAll } from "vitest";
+
+const baseTables = Uint8Array.from(atob(pedersenParamsCode), c => c.charCodeAt(0));
describe("Basic tests for MNT6753", function () {
let pb;
- this.timeout(100000);
-
function getPointG1(pR) {
return [
pb.get(pR),
@@ -82,23 +82,23 @@ describe("Basic tests for MNT6753", function () {
return "0x" + n.toString(16);
}
- //eslint-disable-next-line no-unused-vars
+
function printF1(s, p) {
console.log(s, " " + ns(p));
}
- //eslint-disable-next-line no-unused-vars
+
function printF3(s, p) {
console.log(s + " Fq3(" + ns(p) + " + " + ns(p+96) +"*u + "+ ns(p+96*2)+ "*u^2 )" );
}
- //eslint-disable-next-line no-unused-vars
+
function printF6(s, p) {
console.log(s + " [Fq3(\n" + ns(p) + " +\n " + ns(p+96) +"*u +\n"+ ns(p+96*2)+ "*u^2)\n],[" );
console.log("Fq3(\n" + ns(p+96*3) + " +\n " + ns(p+96*4) +"*u +\n"+ ns(p+96*5)+ "*u^2)\n]" );
}
- before(async () => {
+ beforeAll(async () => {
pb = await buildProtoboard((module) => {
buildMNT6753(module);
buildPedersenHash(module, "g1m", "g1m", "f1m", 188, baseTables);
@@ -118,7 +118,7 @@ describe("Basic tests for MNT6753", function () {
const res = getPointG1(pR);
assertEqualG1(g1gen, res);
- }).timeout(100000000);
+ });
it("Should work mixed add", async() => {
const pP1 = pb.alloc(96*3);
@@ -176,7 +176,7 @@ describe("Basic tests for MNT6753", function () {
const res2 = getPointG1(pR2);
assertEqualG1(res1, res2);
- }).timeout(100000000);
+ });
it("It should do timesScalar many times on G1", async () => {
const pRes = pb.alloc(96*3);
@@ -216,7 +216,7 @@ describe("Basic tests for MNT6753", function () {
];
assertEqualG1(res, zero);
- }).timeout(100000000);
+ });
it("It should multiply generator by 0 and return generator in G2", async () => {
@@ -232,7 +232,7 @@ describe("Basic tests for MNT6753", function () {
const res = getPointG2(pR);
assertEqualG2(g2gen, res);
- }).timeout(100000000);
+ });
it("It should give same result doubling and adding G2", async () => {
const pR1 = pb.alloc(96*3*3);
@@ -257,7 +257,7 @@ describe("Basic tests for MNT6753", function () {
const res2 = getPointG2(pR2);
assertEqualG2(res1, res2);
- }).timeout(100000000);
+ });
it("It should multiply by r and give 0 G2", async () => {
@@ -293,7 +293,7 @@ describe("Basic tests for MNT6753", function () {
];
assertEqualG2(res, zero);
- }).timeout(100000000);
+ });
it("Any number in F6 exp q^6 must be one ", async () => {
const pn = pb.alloc(96*6);
const pRes = pb.alloc(96*6);
diff --git a/test/msm_batch.js b/test/msm_batch.js
index 3946878..8a37b3a 100644
--- a/test/msm_batch.js
+++ b/test/msm_batch.js
@@ -1,8 +1,12 @@
-const assert = require("assert");
-const fs = require("fs");
-const path = require("path");
-const buildBn128 = require("../src/bn128/build_bn128.js");
-const buildProtoboard = require("wasmbuilder").buildProtoboard;
+import assert from "assert";
+import fs from "fs";
+import path from "path";
+import { fileURLToPath } from "url";
+import buildBn128 from "../src/bn128/build_bn128.js";
+import { buildProtoboard } from "wasmbuilder";
+import { describe, it, beforeAll } from "vitest";
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
// The batch-affine MSM module (src/as/msm_batch.ts -> build/msm_batch.wasm)
// is never instantiated by anything in this repo's own test suite: it's
@@ -18,14 +22,13 @@ const buildProtoboard = require("wasmbuilder").buildProtoboard;
// `multiexpAffineGLS` can be checked directly against the already-trusted
// `g1m_multiexpAffine`/`g2m_multiexpAffine` (used elsewhere in test/bn128.js)
// as ground truth.
-describe("batch-affine MSM module (msm_batch.wasm)", function () {
- this.timeout(60000);
+describe("batch-affine MSM module (msm_batch.wasm)", () => {
const n8 = 32; // Fr / bn254 base-field element size
let pb, batchG1, batchG2;
- before(async () => {
+ beforeAll(async () => {
pb = await buildProtoboard((module) => {
buildBn128(module);
}, 32);
diff --git a/test/tomcook.js b/test/tomcook.js
index 645f080..9200367 100644
--- a/test/tomcook.js
+++ b/test/tomcook.js
@@ -1,11 +1,9 @@
-const assert = require("assert");
-
-const buildProtoboard = require("wasmbuilder").buildProtoboard;
-const buildTomCook = require("../src/build_tomcook.js");
-const buildInt = require("../src/build_int.js");
-const buildTest2 = require("../src/build_test.js").buildTest2;
-
-const helpers = require("./helpers/helpers.js");
+import { buildProtoboard } from "wasmbuilder";
+import buildTomCook from "../src/build_tomcook.js";
+import buildInt from "../src/build_int.js";
+import { buildTest2 } from "../src/build_test.js";
+import { genValues } from "./helpers/helpers.js";
+import { describe, assert, it, beforeAll } from "vitest";
@@ -13,7 +11,7 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => {
let pbTC;
let pbInt;
- before(async () => {
+ beforeAll(async () => {
pbTC = await buildProtoboard((module) => {
buildTomCook(module);
buildTest2(module, "tomcook_mul9");
@@ -26,11 +24,11 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => {
it("It should divide by 3 (6)", async () => {
let c;
- const pA = pbTC.alloc(6*4);
+ const pA = pbTC.alloc(6 * 4);
- const values = helpers.genValues(6, true, 29);
+ const values = genValues(6, true, 29);
- for (let i=0; i {
it("It should doubling (6)", async () => {
let c;
- const pA = pbTC.alloc(6*4);
+ const pA = pbTC.alloc(6 * 4);
- const values = helpers.genValues(6, true, 29);
+ const values = genValues(6, true, 29);
- for (let i=0; i {
it("It should halving (6)", async () => {
let c;
- const pA = pbTC.alloc(6*4);
+ const pA = pbTC.alloc(6 * 4);
- const values = helpers.genValues(6, true, 29);
+ const values = genValues(6, true, 29);
- for (let i=0; i {
const pB = pbTC.alloc();
const pC = pbTC.alloc(24);
- const values = helpers.genValues(3, true, 29);
+ const values = genValues(3, true, 29);
- for (let i=0; i {
});
it("It should do a basic multiplication 9", async () => {
let c;
- const pA = pbTC.alloc(9*4);
- const pB = pbTC.alloc(9*4);
- const pC = pbTC.alloc(9*4*2);
+ const pA = pbTC.alloc(9 * 4);
+ const pB = pbTC.alloc(9 * 4);
+ const pC = pbTC.alloc(9 * 4 * 2);
const A = 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn;
const B = 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn;
- pbTC.set(pA, A, 9*4);
- pbTC.set(pB, B, 9*4);
+ pbTC.set(pA, A, 9 * 4);
+ pbTC.set(pB, B, 9 * 4);
console.log(A.toString(16));
console.log(B.toString(16));
@@ -118,16 +116,16 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => {
it("It should do a basic multiplication Multi values (9)", async () => {
let c;
- const pA = pbTC.alloc(9*4);
- const pB = pbTC.alloc(9*4);
- const pC = pbTC.alloc(9*4*2);
+ const pA = pbTC.alloc(9 * 4);
+ const pB = pbTC.alloc(9 * 4);
+ const pC = pbTC.alloc(9 * 4 * 2);
- const values = helpers.genValues(9, false, 29);
+ const values = genValues(9, false, 29);
- for (let i=0; i {
console.log("Refere: " + (A * B).toString(16));
console.log("Tom School (ms): " + time);
- }).timeout(10000000);
+ });
it("It should profile tomCook", async () => {
let start, end, time;
const A = (1n << 254n) - 1n;
@@ -171,9 +169,9 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => {
console.log(A.toString(16));
- const pA = pbTC.set(pbTC.alloc(9*4), A, 9*4);
- const pB = pbTC.set(pbTC.alloc(9*4), B, 9*4);
- const pC = pbTC.alloc(9*4*2);
+ const pA = pbTC.set(pbTC.alloc(9 * 4), A, 9 * 4);
+ const pB = pbTC.set(pbTC.alloc(9 * 4), B, 9 * 4);
+ const pC = pbTC.alloc(9 * 4 * 2);
// start = new Date().getTime();
// pbTC.test_tomcook_mul1(pA, pB, pC, 100000000);
@@ -186,11 +184,11 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => {
end = new Date().getTime();
time = end - start;
- const c = pbTC.get(pC, 1, 9*4*2);
+ const c = pbTC.get(pC, 1, 9 * 4 * 2);
console.log("Result: " + c.toString(16));
console.log("Refere: " + (A * B).toString(16));
console.log("Mul9 Tom Cook Time (ms): " + time);
- }).timeout(10000000);
+ });
});
diff --git a/tools/buildpedersentablebases_mnt6753.js b/tools/buildpedersentablebases_mnt6753.js
index 1ae390c..4b63d34 100644
--- a/tools/buildpedersentablebases_mnt6753.js
+++ b/tools/buildpedersentablebases_mnt6753.js
@@ -1,9 +1,10 @@
-
-const buildProtoboard = require("wasmbuilder").buildProtoboard;
-const buildMNT6753 = require("../src/mnt6753/build_mnt6753.js");
-const bigInt = require("big-integer");
-const fs = require("fs");
-const path = require("path");
+import { buildProtoboard } from "wasmbuilder";
+import buildMNT6753 from "../src/mnt6753/build_mnt6753.js";
+import bigInt from "big-integer";
+import { writeFileSync } from "fs";
+import { join, dirname } from "path";
+import { fileURLToPath } from "url";
+const __dirname = dirname(fileURLToPath(import.meta.url));
var pedersenParameters = [
["2071893303198007985737678972190309212568452221625132024511988170095494148670997278812694070338313361389889122280160253462982652030041813566301365289695187505618174204273471887226695702458395861269694368663558765191107385382142", "17187187414417664367585796530257262302159176591062800465884265459977066325098901507827719965058588341044788483232395252403515861767227243983849894797683644816538861625368393588001624014759720661490214325432345769098675755344007"],
@@ -55,12 +56,10 @@ buildProtoboard((module) => {
res.push(...pb.i8.slice(p4, p4+96*2));
}
- fs.writeFileSync(
- path.join( __dirname, "..", "build", "pedersenparams_mnt6753.js"),
-`
-// Code generated automatically by tools/buildpedersentablebases_mnt6753.js
-module.exports = Buffer.from("${Buffer.from(res).toString("base64")}", "base64");;
-`
+ writeFileSync(
+ join( __dirname, "..", "build", "pedersenparams_mnt6753.js"),
+`// Code generated automatically by tools/buildpedersentablebases_mnt6753.js
+ export const code ="${Buffer.from(res).toString("base64")}";`
);
});
diff --git a/tools/buildwasm_bls12381.js b/tools/buildwasm_bls12381.js
index 77513d6..419ae17 100644
--- a/tools/buildwasm_bls12381.js
+++ b/tools/buildwasm_bls12381.js
@@ -1,7 +1,9 @@
-const ModuleBuilder = require("wasmbuilder").ModuleBuilder;
-const buildBls12381 = require("../src/bls12381/build_bls12381.js");
-const fs = require("fs");
-const path = require("path");
+import { ModuleBuilder } from "wasmbuilder";
+import buildBls12381 from "../src/bls12381/build_bls12381.js";
+import { writeFileSync } from "fs";
+import { join, dirname } from "path";
+import { fileURLToPath } from "url";
+const __dirname = dirname(fileURLToPath(import.meta.url));
function buildWasm() {
const moduleBuilder = new ModuleBuilder();
@@ -10,30 +12,29 @@ function buildWasm() {
const code = moduleBuilder.build();
- fs.writeFileSync(
- path.join( __dirname, "..", "build", "bls12381_wasm.js"),
- `
- exports.code = "${Buffer.from(code).toString("base64")}";
- exports.pq = ${moduleBuilder.modules.f1m.pq};
- exports.pr = ${moduleBuilder.modules.frm.pq};
- exports.pG1gen = ${moduleBuilder.modules.bls12381.pG1gen};
- exports.pG1zero = ${moduleBuilder.modules.bls12381.pG1zero};
- exports.pG1b = ${moduleBuilder.modules.bls12381.pG1b};
- exports.pG2gen = ${moduleBuilder.modules.bls12381.pG2gen};
- exports.pG2zero = ${moduleBuilder.modules.bls12381.pG2zero};
- exports.pG2b = ${moduleBuilder.modules.bls12381.pG2b};
- exports.pOneT = ${moduleBuilder.modules.bls12381.pOneT};
- exports.prePSize = ${moduleBuilder.modules.bls12381.prePSize};
- exports.preQSize = ${moduleBuilder.modules.bls12381.preQSize};
- exports.n8q = 48;
- exports.n8r = 32;
- exports.q = "${moduleBuilder.modules.bls12381.q}";
- exports.r = "${moduleBuilder.modules.bls12381.r}";
- `
+ writeFileSync(
+ join( __dirname, "..", "build", "bls12381_wasm.js"),
+ `export const code = "${Buffer.from(code).toString("base64")}";
+export const pq = ${moduleBuilder.modules.f1m.pq};
+export const pr = ${moduleBuilder.modules.frm.pq};
+export const pG1gen = ${moduleBuilder.modules.bls12381.pG1gen};
+export const pG1zero = ${moduleBuilder.modules.bls12381.pG1zero};
+export const pG1b = ${moduleBuilder.modules.bls12381.pG1b};
+export const pG2gen = ${moduleBuilder.modules.bls12381.pG2gen};
+export const pG2zero = ${moduleBuilder.modules.bls12381.pG2zero};
+export const pG2b = ${moduleBuilder.modules.bls12381.pG2b};
+export const pOneT = ${moduleBuilder.modules.bls12381.pOneT};
+export const prePSize = ${moduleBuilder.modules.bls12381.prePSize};
+export const preQSize = ${moduleBuilder.modules.bls12381.preQSize};
+export const n8q = 48;
+export const n8r = 32;
+export const q = "${moduleBuilder.modules.bls12381.q}";
+export const r = "${moduleBuilder.modules.bls12381.r}";
+`
);
- fs.writeFileSync(
- path.join( __dirname, "..", "build", "bls12381.wasm"),
+ writeFileSync(
+ join( __dirname, "..", "build", "bls12381.wasm"),
Buffer.from(code)
);
}
diff --git a/tools/buildwasm_bn128.js b/tools/buildwasm_bn128.js
index b78c543..2889b94 100644
--- a/tools/buildwasm_bn128.js
+++ b/tools/buildwasm_bn128.js
@@ -1,7 +1,9 @@
-const ModuleBuilder = require("wasmbuilder").ModuleBuilder;
-const buildBn128 = require("../src/bn128/build_bn128.js");
-const fs = require("fs");
-const path = require("path");
+import { ModuleBuilder } from "wasmbuilder";
+import buildBn128 from "../src/bn128/build_bn128.js";
+import { writeFileSync } from "fs";
+import { join, dirname } from "path";
+import { fileURLToPath } from "url";
+const __dirname = dirname(fileURLToPath(import.meta.url));
async function buildWasm() {
const moduleBuilder = new ModuleBuilder();
@@ -10,30 +12,60 @@ async function buildWasm() {
const code = moduleBuilder.build();
- fs.writeFileSync(
- path.join( __dirname, "..", "build", "bn128_wasm.js"),
- `
- exports.code = "${Buffer.from(code).toString("base64")}";
- exports.pq = ${moduleBuilder.modules.f1m.pq};
- exports.pr = ${moduleBuilder.modules.frm.pq};
- exports.pG1gen = ${moduleBuilder.modules.bn128.pG1gen};
- exports.pG1zero = ${moduleBuilder.modules.bn128.pG1zero};
- exports.pG1b = ${moduleBuilder.modules.bn128.pG1b};
- exports.pG2gen = ${moduleBuilder.modules.bn128.pG2gen};
- exports.pG2zero = ${moduleBuilder.modules.bn128.pG2zero};
- exports.pG2b = ${moduleBuilder.modules.bn128.pG2b};
- exports.pOneT = ${moduleBuilder.modules.bn128.pOneT};
- exports.prePSize = ${moduleBuilder.modules.bn128.prePSize};
- exports.preQSize = ${moduleBuilder.modules.bn128.preQSize};
- exports.n8q = 32;
- exports.n8r = 32;
- exports.q = "${moduleBuilder.modules.bn128.q}";
- exports.r = "${moduleBuilder.modules.bn128.r}";
- `
+ writeFileSync(
+ join( __dirname, "..", "build", "bn128_wasm.js"),
+ `export const code = "${Buffer.from(code).toString("base64")}";
+export const pq = ${moduleBuilder.modules.f1m.pq};
+export const pr = ${moduleBuilder.modules.frm.pq};
+export const pG1gen = ${moduleBuilder.modules.bn128.pG1gen};
+export const pG1zero = ${moduleBuilder.modules.bn128.pG1zero};
+export const pG1b = ${moduleBuilder.modules.bn128.pG1b};
+export const pG2gen = ${moduleBuilder.modules.bn128.pG2gen};
+export const pG2zero = ${moduleBuilder.modules.bn128.pG2zero};
+export const pG2b = ${moduleBuilder.modules.bn128.pG2b};
+export const pOneT = ${moduleBuilder.modules.bn128.pOneT};
+export const prePSize = ${moduleBuilder.modules.bn128.prePSize};
+export const preQSize = ${moduleBuilder.modules.bn128.preQSize};
+export const n8q = 32;
+export const n8r = 32;
+export const q = "${moduleBuilder.modules.bn128.q}";
+export const r = "${moduleBuilder.modules.bn128.r}";
+`
);
- fs.writeFileSync(
- path.join( __dirname, "..", "build", "bn128.wasm"),
+ const codeBlob = new Blob([code]);
+
+ console.log(await codeBlob.stream());
+
+ const codeStream = codeBlob.stream();
+ const compressedReadableStream = codeStream.pipeThrough(
+ new CompressionStream("gzip"),
+ );
+ const compressedCode = await new Response(compressedReadableStream).bytes();
+
+ writeFileSync(
+ join( __dirname, "..", "build", "bn128_wasm_gzip.js"),
+ `export const gzipCode = "${Buffer.from(compressedCode).toString("base64")}";
+export const pq = ${moduleBuilder.modules.f1m.pq};
+export const pr = ${moduleBuilder.modules.frm.pq};
+export const pG1gen = ${moduleBuilder.modules.bn128.pG1gen};
+export const pG1zero = ${moduleBuilder.modules.bn128.pG1zero};
+export const pG1b = ${moduleBuilder.modules.bn128.pG1b};
+export const pG2gen = ${moduleBuilder.modules.bn128.pG2gen};
+export const pG2zero = ${moduleBuilder.modules.bn128.pG2zero};
+export const pG2b = ${moduleBuilder.modules.bn128.pG2b};
+export const pOneT = ${moduleBuilder.modules.bn128.pOneT};
+export const prePSize = ${moduleBuilder.modules.bn128.prePSize};
+export const preQSize = ${moduleBuilder.modules.bn128.preQSize};
+export const n8q = 32;
+export const n8r = 32;
+export const q = "${moduleBuilder.modules.bn128.q}";
+export const r = "${moduleBuilder.modules.bn128.r}";
+`
+ );
+
+ writeFileSync(
+ join( __dirname, "..", "build", "bn128.wasm"),
Buffer.from(code)
);
}
diff --git a/tools/buildwasm_mnt6753.js b/tools/buildwasm_mnt6753.js
index b38d1be..f788182 100644
--- a/tools/buildwasm_mnt6753.js
+++ b/tools/buildwasm_mnt6753.js
@@ -1,9 +1,12 @@
-const ModuleBuilder = require("wasmbuilder").ModuleBuilder;
-const buildMNT6753 = require("../src/mnt6753/build_mnt6753.js");
-const buildPedersenHash = require("../src/build_pedersenhash.js");
-const baseTables = require("../build/pedersenparams_mnt6753.js");
-const fs = require("fs");
-const path = require("path");
+import { ModuleBuilder } from "wasmbuilder";
+import buildMNT6753 from "../src/mnt6753/build_mnt6753.js";
+import buildPedersenHash from "../src/build_pedersenhash.js";
+import { code as pedersenParamsCode } from "../build/pedersenparams_mnt6753.js";
+import { writeFileSync } from "fs";
+import { join, dirname } from "path";
+import { fileURLToPath } from "url";
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
function buildWasm() {
@@ -11,24 +14,25 @@ function buildWasm() {
moduleBuilder.setMemory(1000);
buildMNT6753(moduleBuilder);
+ const baseTables = Uint8Array.from(atob(pedersenParamsCode), c => c.charCodeAt(0));
+
buildPedersenHash(moduleBuilder, "g1m", "g1m", "f1m", 188, baseTables);
const code = moduleBuilder.build();
- fs.writeFileSync(
- path.join( __dirname, "..", "build", "mnt6753_wasm.js"),
- `
- exports.code = "${Buffer.from(code).toString("base64")}";
- exports.pq = ${moduleBuilder.modules.mnt6753.pq};
- exports.pr = ${moduleBuilder.modules.mnt6753.pq};
- exports.pG1gen = ${moduleBuilder.modules.mnt6753.pG1gen};
- exports.pG1zero = ${moduleBuilder.modules.mnt6753.pG1zero};
- exports.pG2gen = ${moduleBuilder.modules.mnt6753.pG2gen};
- exports.pG2zero = ${moduleBuilder.modules.mnt6753.pG2zero};
- exports.pOneT = ${moduleBuilder.modules.mnt6753.pOneT};
- exports.prePSize = ${moduleBuilder.modules.mnt6753.prePSize};
- exports.preQSize = ${moduleBuilder.modules.mnt6753.preQSize};
- `
+ writeFileSync(
+ join(__dirname, "..", "build", "mnt6753_wasm.js"),
+ `export const code = "${Buffer.from(code).toString("base64")}";
+export const pq = ${moduleBuilder.modules.mnt6753.pq};
+export const pr = ${moduleBuilder.modules.mnt6753.pq};
+export const pG1gen = ${moduleBuilder.modules.mnt6753.pG1gen};
+export const pG1zero = ${moduleBuilder.modules.mnt6753.pG1zero};
+export const pG2gen = ${moduleBuilder.modules.mnt6753.pG2gen};
+export const pG2zero = ${moduleBuilder.modules.mnt6753.pG2zero};
+export const pOneT = ${moduleBuilder.modules.mnt6753.pOneT};
+export const prePSize = ${moduleBuilder.modules.mnt6753.prePSize};
+export const preQSize = ${moduleBuilder.modules.mnt6753.preQSize};
+`
);
}
diff --git a/tools/buildwasm_msm_batch.js b/tools/buildwasm_msm_batch.js
index 0098bcb..f175363 100644
--- a/tools/buildwasm_msm_batch.js
+++ b/tools/buildwasm_msm_batch.js
@@ -2,8 +2,10 @@
// to build/msm_batch.wasm. The module is curve-independent: it imports the
// base-field/group ops and shares the main module's linear memory, so the
// same binary serves bn128 and bls12381 (G1 and G2).
-const { execFileSync } = require("child_process");
-const path = require("path");
+import { execFileSync } from "child_process";
+import path from "path";
+import { fileURLToPath } from "url";
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
const asc = path.join(__dirname, "..", "node_modules", ".bin", "asc");
const src = path.join(__dirname, "..", "src", "as", "msm_batch.ts");
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..5bb8964
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,43 @@
+import { defineConfig } from "vite";
+import { builtinModules } from "module";
+import { readFileSync } from "fs";
+
+const pkg = JSON.parse(readFileSync("./package.json", "utf8"));
+const external = [
+ ...builtinModules,
+ ...Object.keys(pkg.dependencies || {}),
+];
+
+export default defineConfig({
+ build: {
+ lib: {
+ entry: "./index.js",
+ formats: ["cjs"],
+ fileName: () => "main.cjs",
+ },
+ outDir: "build",
+ emptyOutDir: false,
+ minify: false,
+ rollupOptions: {
+ external,
+ },
+ },
+ test: {
+ projects: [
+ {
+ test: {
+ globals: true,
+ testTimeout: 10000000,
+ include: ["test/**/*.js"],
+ // mnt6753 is a legacy curve unused by the iden3 stack; its
+ // pedersen-table / base64 build tooling needs a separate ESM
+ // pass. wasmcurves is a codegen library validated in Node, so
+ // there is no separate browser project (it would be redundant).
+ exclude: ["**/node_modules/**", "test/helpers/**", "test/mnt6753.js"],
+ name: "unit",
+ environment: "node",
+ },
+ },
+ ],
+ },
+});