diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..807faff --- /dev/null +++ b/.gitignore @@ -0,0 +1,77 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +# +# + +dist + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage +junit.xml + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +*.r1cs +*.sym +*.ptau +*.zkey + +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +packages/circuits/proofs/ +out/ +circuits/circuit*zkey* +circuits/email/ +circuits/proofs/ +cache/ +test.log +packages/contracts/out/ +packages/contracts/lib/ +packages/contracts/broadcast +.next +node_modules.nosync +*Wallet* +*wallet* +circuits/regexes/subject_regex* + +*_email.txt +*email_cache.json +*input.json +*email_proof.json +*.debug +*.env +.vscode + +.vite +**/.vite + +tsbuildinfo + +**/node_modules +**/build +**/dist +tsconfig.tsbuildinfo + +.idea/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a1c6d7a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 zk-email + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8a02183 --- /dev/null +++ b/README.md @@ -0,0 +1,156 @@ +# Proof of Twitter + +Prove ownership of a X (Twitter) account using an email from Twitter, and mint an NFT with your Twitter username. + +This project is a demonstration of ZK Email. You can fork it to build other projects using ZK Email. + +Try it here: https://twitter.prove.email/ + +## How it works + +You can use an email from Twitter that contains `email was meant for @username` to generate a ZK proof that you own the Twitter account `@username`. + +This ZK proof can be used to mint an NFT corresponding to your username in the `ProofOfTwitter` contract. + +## Running locally + +#### Install dependencies + +```bash +yarn +``` + +#### Start the web app. In `packages/app` directory, run + +```bash +yarn start +``` + +This will start the UI at `http://localhost:3000/` where you can paste the email, generate proof and mint the NFT. + +The UI works against the generated zkeys downloaded from AWS and the deployed contract on Sepolia. + +## Manual Proof Generation + +If you want to generate the proof locally outside browser, follow the instructions below. + +### Circuits + +Circom circuits are located in `packages/circuits`, the main circuit being [twitter.circom](packages/circuits/twitter.circom). TwitterVerifier circuit use [EmailVerifier](https://github.com/zkemail/zk-email-verify/blob/main/packages/circuits/email-verifier.circom) circuit from `@zk-email/circuits`. + +The regex circuit required to parse/extract Twitter username can be generated using [https://github.com/zkemail/zk-regex](zk-regex) package. + +#### » Generate Twitter Regex Circuit + +```bash +# CWD = packages/circuits +yarn generate-regex +``` + +This will generate `components/twitter_reset.circom` using the config in `components/twitter_reset.json`. This `twitter_reset.circom` is imported in `twitter.circom`. + +Note that `twitter_reset.circom` is already in repo, so this step is optional. + +#### » Build the circuit + +```bash +# CWD = packages/circuits +yarn build +``` + +This will create `twitter.wasm` and other files in `packages/circuits/build` directory. + +You can test the circuit using + +```bash +# CWD = packages/circuits +yarn test +``` + +#### » Generating Zkey + +You can generate proving and verification keys using + +```bash +# CWD = packages/circuits/scripts +ZKEY_ENTROPY= ZKEY_BEACON= ts-node dev-setup.ts +``` + +This will generate `zkey` files, `vkey.json` in `build` directory, and Solidity verifier in `packages/contracts/src/Verifier.sol` (You might need to manually update the solidity pragma version). + +> Note: We are using a custom fork of `snarkjs` which generated **chunked zkeys**. Chunked zkeys make it easier to use in browser, especially since we have large circuit. You can switch to regular `snarkjs` in `package.json` if you don't want to use chunked zkeys. + + +For browser use, the script also compresses the chunked zkeys. + +**The compressed zkeys, vkey, wasm are copied to /build/artifacts` directory. This directory can be served using a local server or uploaded to S3 for use in the browser. + +To upload to S3, the below script can be used. +```bash +python3 upload_to_s3.py --build-dir /proof-of-twitter/packages/circuits/build --circuit-name twitter +``` + +There are helper functions in `@zk-email/helpers` package to download and decompress the zkeys in the browser. + + +#### » Generate Input and Proof + +```bash +# CWD = packages/circuits/scripts +ts-node generate-proof.ts --email-file ../tests/emls/twitter-test.eml --ethereum-address +``` + +This will generate input + witness using the given email file and Ethereum address, and prove using the generated zkey. + +The script will save `inputs.json`, `input.wtns`, `proof.json`, and `public.json` in `proof` directory. + +The script also verify the generated proof are correct. You can use the proof and public inputs to verify in the Solidity verifier as well. + +### Contracts + +The solidity contracts can be found in `packages/contracts`. The main contract is [ProofOfTwitter.sol](packages/contracts/src/ProofOfTwitter.sol). + +#### You can build the contracts using + +```bash +# CWD = packages/contracts +yarn build # Assume you have foundry installed +``` + +#### Run tests + +```bash +# CWD = packages/contracts +yarn test +``` + +Note that the tests will not pass if you have generated your own zkeys and `Verifier.sol` as you would have used a different Entropy. + +To fix, update the `publicSignals` and `proof` in `test/TestTwitter.t.sol` with the values from `input.json` and `public.json` generated from the above steps. (Remember that you need to flip items in the nested array of `pi_b`). + +#### Deploy contracts + +```bash +# CWD = packages/contracts +PRIVATE_KEY= forge script script/DeployTwitter.s.sol:Deploy -vvvv --rpc-url https://rpc2.sepolia.org --broadcast +``` + +Currently deployed contracts on Sepolia: + +``` + Deployed Verifier at address: 0x6096601EB33d636b0e21593469920d06647FA955 + Deployed DKIMRegistry at address: 0x993873c1b46c756b60089cBbE3baEEC9Fa292e9f + Deployed ProofOfTwitter at address: 0x86D390fDed54447fD244eD0718dbFCFCcbbA7edc +``` + +### UI + +If you want to update the UI based on your own zkeys and contracts, please make the below changes: + +- Set the `VITE_CONTRACT_ADDRESS` in `packages/app/.env`. This is the address of the `ProofOfTwitter` contract. +- Set `VITE_CIRCUIT_ARTIFACTS_URL` in `packages/app/.env` to the URL of the directory containing circuit artifacts (compressed partial zkeys, wasm, verifier, etc). You can run a local server in `circuits/build/artifacts` directory and use that URL or upload to S3 (or similar) and use that public URL/ + + +## History + +This repo was originally part of the [zk-email-verify](https://github.com/zkemail/zk-email-verify). Please refer there for the commit history and original contributors. diff --git a/package.json b/package.json new file mode 100644 index 0000000..9bfea0d --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "version": "4.0.0", + "description": "Proof of twitter username using ZK Email", + "private": true, + "workspaces": [ + "packages/*" + ], + "keywords": [], + "author": "", + "license": "MIT", + "packageManager": "yarn@3.2.3" +} diff --git a/packages/app/babel.config.js b/packages/app/babel.config.js new file mode 100644 index 0000000..0ef0e69 --- /dev/null +++ b/packages/app/babel.config.js @@ -0,0 +1,19 @@ +module.exports = { + plugins: [ + function () { + return { + visitor: { + MetaProperty(path) { + path.replaceWithSourceString('process') + }, + }, + } + }, + ], + presets: [ + ['@babel/preset-env', { targets: { node: 'current' } }], + '@babel/preset-typescript', + ['@babel/preset-react', { "runtime": "automatic" }], + ['jest'], + ], +}; diff --git a/packages/app/index.css b/packages/app/index.css new file mode 100644 index 0000000..4bf1c5d --- /dev/null +++ b/packages/app/index.css @@ -0,0 +1,17 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} \ No newline at end of file diff --git a/packages/app/index.html b/packages/app/index.html new file mode 100644 index 0000000..10746d0 --- /dev/null +++ b/packages/app/index.html @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + Proof of Twitter: ZK Email + + + + + + + +
+ + + + diff --git a/packages/app/package.json b/packages/app/package.json new file mode 100644 index 0000000..627c55d --- /dev/null +++ b/packages/app/package.json @@ -0,0 +1,91 @@ +{ + "name": "@zk-email/twitter-verifier-app", + "version": "4.0.0", + "dependencies": { + "@proof-of-twitter/circuits": "workspace:^", + "@proof-of-twitter/contracts": "workspace:^", + "@rainbow-me/rainbowkit": "^1.3.3", + "@zk-email/helpers": "4.0.0", + "lodash": "^4.17.21", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-is": "^18.2.0", + "react-router-dom": "^6.2.2", + "react-use": "^17.3.2", + "snarkjs": "https://github.com/sampritipanda/snarkjs.git#fef81fc51d17a734637555c6edbd585ecda02d9e", + "styled-components": "^6.1.8", + "viem": "^2.2.0", + "wagmi": "^1.3.10" + }, + "scripts": { + "start": "vite", + "build": "yarn tsc && vite build", + "serve": "PORT=3000 vite preview", + "test": "jest --runInBand --testPathIgnorePatterns='e2e' --reporters=default --reporters=jest-junit", + "start-e2e-test-server": "yarn serve", + "test:e2e-ui": "CI=true jest ./tests/e2e-ui*.test.*", + "test:e2e-dl": "CI=true jest ./tests/e2e-dl*.test.*", + "test:full-e2e": "bash scripts/test-e2e.sh", + "test:e2e-zkp": "CI=true jest ./tests/e2e-dl-zkp.test.ts" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not ie <= 99", + "not android <= 4.4.4", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@babel/preset-react": "^7.23.3", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "@testing-library/jest-dom": "^5.16.3", + "@testing-library/react": "^12.1.4", + "@types/jest": "^29.5.11", + "@types/lodash": "^4.14.202", + "@types/mocha": "^10.0.6", + "@types/node": "^20.11.5", + "@types/node-forge": "^1.3.11", + "@types/styled-components": "^5.1.34", + "@vitejs/plugin-react": "^4.2.1", + "crypto-browserify": "^3.12.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-fetch-mock": "^3.0.3", + "jest-junit": "^16.0.0", + "jsdom-worker": "^0.3.0", + "madge": "^6.0.0", + "puppeteer": "18.1", + "rollup-plugin-node-polyfills": "^0.2.1", + "selenium-webdriver": "^4.16.0", + "stream-browserify": "^3.0.0", + "typescript": "^5.3.2", + "vite": "^5.0.8", + "vite-plugin-commonjs": "^0.10.1", + "vite-tsconfig-paths": "^4.3.1" + }, + "jest": { + "transformIgnorePatterns": [ + "node_modules/(?!@rainbow-me/rainbowkit|@zk-email|ffjavascript)" + ], + "testEnvironment": "jsdom", + "setupFilesAfterEnv": [ + "./setupTests.js", + "jsdom-worker" + ] + }, + "packageManager": "yarn@3.2.3" +} diff --git a/packages/app/public/_redirects b/packages/app/public/_redirects new file mode 100644 index 0000000..90fce56 --- /dev/null +++ b/packages/app/public/_redirects @@ -0,0 +1,3 @@ +/rsa_group_sig_verify_0000.zkey https://dl.dropboxusercontent.com/s/xsjli37cr44o82a/rsa_group_sig_verify_0000.zkey 200 +/* /index.html 200 + diff --git a/packages/app/public/docs b/packages/app/public/docs new file mode 100644 index 0000000..e69de29 diff --git a/packages/app/public/favicon.ico b/packages/app/public/favicon.ico new file mode 100644 index 0000000..391542e Binary files /dev/null and b/packages/app/public/favicon.ico differ diff --git a/packages/app/public/manifest.json b/packages/app/public/manifest.json new file mode 100644 index 0000000..81bd936 --- /dev/null +++ b/packages/app/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "ZK Email Verifier", + "name": "Twitter ZK Email Verifier", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/packages/app/public/robots.txt b/packages/app/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/packages/app/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/packages/app/public/zk_email_optim.jpg b/packages/app/public/zk_email_optim.jpg new file mode 100644 index 0000000..37aecf1 Binary files /dev/null and b/packages/app/public/zk_email_optim.jpg differ diff --git a/packages/app/scripts/test-e2e.sh b/packages/app/scripts/test-e2e.sh new file mode 100644 index 0000000..691aa51 --- /dev/null +++ b/packages/app/scripts/test-e2e.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# Execute E2E test +# This file is required in the CI +yarn start-e2e-test-server & (yarn test:e2e-zkp && yarn test:e2e-ui) \ No newline at end of file diff --git a/packages/app/setupTests.js b/packages/app/setupTests.js new file mode 100644 index 0000000..0f0c652 --- /dev/null +++ b/packages/app/setupTests.js @@ -0,0 +1,6 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; +require('jest-fetch-mock').enableMocks() diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx new file mode 100644 index 0000000..29676be --- /dev/null +++ b/packages/app/src/App.tsx @@ -0,0 +1,75 @@ +import { MainPage } from "./pages/MainPage"; +import "./styles.css"; +import { + BrowserRouter as Router, + Route, + Routes, + Link, +} from "react-router-dom"; +import { useLocation } from "react-use"; +import styled from "styled-components"; +import { ConnectButton } from "@rainbow-me/rainbowkit"; + +const NavSection = () => { + const { pathname } = useLocation(); + + return ( + + ); +}; + +const App = () => { + return ( + +
+ + + + } /> + Not found} /> + +
+
+ ); +}; + +export default App; + +const Logo = styled(Link)` + text-transform: uppercase; + letter-spacing: 0.04em; + color: #fff; + text-decoration: none; + font-size: 1.2rem; +`; + +const Nav = styled.nav` + display: flex; + align-items: center; + justify-content: space-between; + margin: 12px; +`; + +const DocsLink = styled.a` + color: rgba(255, 255, 255, 0.8); + text-decoration: none; + underline: none; + transition: all 0.2s ease-in-out; + &:hover { + color: rgba(255, 255, 255, 1); + } +`; diff --git a/packages/app/src/abi.json b/packages/app/src/abi.json new file mode 100644 index 0000000..f5a61bd --- /dev/null +++ b/packages/app/src/abi.json @@ -0,0 +1,6065 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "contract Verifier", + "name": "v", + "type": "address" + }, + { + "internalType": "contract DKIMRegistry", + "name": "d", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "headerSignals", + "type": "uint256[]" + } + ], + "name": "_domainCheck", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "addressIndexInSignals", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bytesInPackedBytes", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[8]", + "name": "proof", + "type": "uint256[8]" + }, + { + "internalType": "uint256[3]", + "name": "signals", + "type": "uint256[3]" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pubKeyHashIndexInSignals", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenDesc", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "tokenIDToName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "usernameIndexInSignals", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "usernameLengthInSignals", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "verifier", + "outputs": [ + { + "internalType": "contract Verifier", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": { + "object": "0x60a0346200036157601f6001600160401b03601f196200513a38819003848101831686019190848311878410176200034b578087926040948552833981010312620003615783516001600160a01b03939092908484168403620003615760208096015194851680950362000361576200007762000366565b926200008262000366565b908451908482116200034b576000918254966001978881811c9116801562000340575b8c8210146200032c57908b8288859411620002d6575b50508b908783116001146200027157859262000265575b5050600019600383901b1c191690871b1782555b8251948511620002515785548681811c9116801562000246575b8a8210146200023257848111620001ea575b50889385116001146200018457508394959697509262000178575b5050600019600383901b1c191690821b1790555b608052600b80546001600160a01b031916919091179055604051614d999081620003a1823960805181818161311a01526133600152f35b0151905038806200012d565b8493929193169785845280842093905b898210620001d2575050838596979810620001b8575b505050811b01905562000141565b015160001960f88460031b161c19169055388080620001aa565b80878596829496860151815501950193019062000194565b8683528983208580880160051c8201928c891062000228575b0160051c019087905b8281106200021c57505062000112565b8481550187906200020c565b9250819262000203565b634e487b7160e01b83526022600452602483fd5b90607f169062000100565b634e487b7160e01b82526041600452602482fd5b015190503880620000d2565b908c91858b95168780528388209388905b828210620002bc5750508411620002a2575b505050811b018255620000e6565b015160001960f88460031b161c1916905538808062000294565b8484015186558d9790950194938401939081019062000282565b90919250858052878287209181860160051c830193861062000322575b918b91869594930160051c01915b8281106200031357508d9150620000bb565b8781558594508b910162000301565b92508192620002f3565b634e487b7160e01b85526022600452602485fd5b90607f1690620000a5565b634e487b7160e01b600052604160045260246000fd5b600080fd5b60408051919082016001600160401b038111838210176200034b57604052600d82526c15995c9a599a5959115b585a5b609a1b602083015256fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714613cf05750806306fdde0314613c46578063081812fc14613c28578063095ea7b314613aae57806314c5225114613a9257806316eb903b1461319057806318160ddd1461317257806323b872dd146131495780632b7ac3f3146131045780632f745c5914613052578063312033bf146130365780633827fc6f14612bed5780633e09849014612a0357806342842e0e146129db5780634f6ccce71461294a5780634f79d38a1461291e57806361e80718146101985780636352211e146128ee57806370a08231146128c357806395d89b41146127e5578063a22cb46514612713578063b88d4fde14612689578063bec47aea1461266d578063c87b56dd1461019d578063c9929db9146101985763e985e9c51461013d57600080fd5b3461019357604036600319011261019357610156613dbd565b61015e613dd3565b9060018060a01b03809116600052600560205260406000209116600052602052602060ff604060002054166040519015158152f35b600080fd5b613f8a565b3461019357602036600319011261019357600435600052600c6020526101c66040600020613ee6565b6101d1600435614786565b906101e46001600160a01b0383166145dc565b916101f76001600160a01b0382166145dc565b6102096001600160a01b038316614666565b9361021c6001600160a01b038416614666565b60ff8460101c1660ff6102528161024c6102428261023c60043588614026565b06614334565b9460043590614026565b06613ff8565b046064810181116125c4576000906064810190819072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b821015612642575b50806d04ee2d6d415b85acef8100000000600a921015612627575b662386f26fc10000811015612613575b6305f5e100811015612602575b6127108110156125f3575b60648110156125e5575b10156125da575b600a60216102ea60018501614053565b938401015b60001901916f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304801561031e57600a90916102ef565b505061033660ff61023c600435828a60201c16614026565b61035260ff61034c600435828b60201c16614026565b0661448b565b9160ff6103708161036a600435828d60301c16614026565b0661400f565b04936010850185116125c4576000946010810190819072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b821015612599575b50806d04ee2d6d415b85acef8100000000600a92101561257e575b662386f26fc1000081101561256a575b6305f5e100811015612559575b61271081101561254a575b606481101561253c575b1015612531575b600a602161040960018901614053565b978801015b60001901916f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304801561043d57600a909161040e565b505061045560ff61034c600435828d60301c16614026565b956040519b8c6001600160401b0361018082818101109201111761251b576105a89960608e8e6101808201604052815260043560208201528b6040820152015260808d015260a08c015260c08b015260e08a01526101008901526101208801526101408701526101608601526105a360aa60405180937f3c7376672077696474683d2732393027206865696768743d273530302720766960208301527f6577426f783d2730203020323930203530302720786d6c6e733d27687474703a60408301527f2f2f7777772e77332e6f72672f323030302f737667273e3c726563742077696460608301527f74683d27323930707827206865696768743d273530307078272066696c6c3d276080830152602360f81b60a083015261058181518092602060a186019101613d75565b81016813979f1e17b9bb339f60b91b60a182015203608a810184520182613e56565b614160565b61144a6109ea61065c60206105a3602260c08a015160e08b015160608c0151906040519586936105e96105dc8387016142b3565b9182815194859201613d75565b0165272063793d2760d01b815261060a825180936020600685019101613d75565b01722720723d273132307078272066696c6c3d272360681b600682015261063b825180936020601985019101613d75565b016813979f1e17b9bb339f60b91b6019820152036002810184520182613e56565b9261068d60206105a360226101008b01516101208c015160808d0151906040519586936105e96105dc8387016142b3565b61071060206105a360226101408c01518c60a0610160820151910151906040519586936106be6105dc8387016142b3565b0165272063793d2760d01b81526106df825180936020600685019101613d75565b01722720723d273130307078272066696c6c3d272360681b600682015261063b825180936020601985019101613d75565b907f22202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e3d2260408a0151916040519788957f3c7376672077696474683d2232393022206865696768743d223530302220766960208801527f6577426f783d2230203020323930203530302220786d6c6e733d22687474703a6040880152751797bbbbbb973b999737b933979918181817b9bb339160511b60608801527f20786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f60768801526b189c9c9c97bc3634b735939f60a11b6096880152651e3232b3399f60d11b60a28801527f3c66696c7465722069643d226631223e3c6665496d61676520726573756c743d60a88801527f2270302220786c696e6b3a687265663d22646174613a696d6167652f7376672b60c88801526a1e1b5b0ed8985cd94d8d0b60aa1b60e888015261086781518092602060f38b019101613d75565b7f222f3e3c6665496d61676520726573756c743d2270312220786c696e6b3a687260f382890101527f65663d22646174613a696d6167652f7376672b786d6c3b6261736536342c000061011382890101526108cf825180936020610131858c01019101613d75565b7f222f3e3c6665496d61676520726573756c743d2270322220786c696e6b3a687287820183016101318101919091527f65663d22646174613a696d6167652f7376672b786d6c3b6261736536342c000061015182015283519361093d91859161016f90910190602001613d75565b8601010192631110179f60e11b61016f8501527f3c6665496d61676520726573756c743d2270332220786c696e6b3a687265663d6101738501527f22646174613a696d6167652f7376672b786d6c3b6261736536342c00000000006101938501526101ae936109b58251809360208885019101613d75565b01928301527f70302220696e323d22703122202f3e3c6665426c656e64206d6f64653d2265786101ce8301527f636c7573696f6e2220696e323d22703222202f3e3c6665426c656e64206d6f646101ee8301527f653d226f7665726c61792220696e323d2270332220726573756c743d22626c6561020e8301527f6e644f757422202f3e3c6665476175737369616e426c7572200000000000000061022e8301527f696e3d22626c656e644f75742220737464446576696174696f6e3d22343222206102478301527f2f3e3c2f66696c7465723e203c636c6970506174682069643d22636f726e65726102678301527f73223e3c726563742077696474683d2232393022206865696768743d223530306102878301527f222072783d223432222072793d22343222202f3e3c2f636c6970506174683e006102a78301527f3c706174682069643d22746578742d706174682d612220643d224d34302031326102c68301527f20483235302041323820323820302030203120323738203430205634363020416102e68301527f32382032382030203020312032353020343838204834302041323820323820306103068301527f2030203120313220343630205634302041323820323820302030203120343020610326830152671899103d1110179f60c11b6103468301527f3c706174682069643d226d696e696d61702220643d224d32333420343434433261034e8301527f3334203435372e393439203234322e323120343633203235332034363322202f61036e830152601f60f91b61038e83018190527f3c66696c7465722069643d22746f702d726567696f6e2d626c7572223e3c666561038f8401527f476175737369616e426c757220696e3d22536f757263654772617068696322206103af8401527f737464446576696174696f6e3d22323422202f3e3c2f66696c7465723e0000006103cf8401527f3c6c696e6561724772616469656e742069643d22677261642d7570222078313d6103ec8401527f2231222078323d2230222079313d2231222079323d2230223e3c73746f70206f61040c8401527f66667365743d22302e30222073746f702d636f6c6f723d22776869746522207361042c840152713a37b816b7b830b1b4ba3c9e91189110179f60711b61044c8401527f3c73746f70206f66667365743d222e39222073746f702d636f6c6f723d22776861045e8401527f697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e65617261047e8401526823b930b234b2b73a1f60b91b61049e8401527f3c6c696e6561724772616469656e742069643d22677261642d646f776e2220786104a78401527f313d2230222078323d2231222079313d2230222079323d2231223e3c73746f706104c78401527f206f66667365743d22302e30222073746f702d636f6c6f723d227768697465226104e78401527f2073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365746105078401527f3d22302e39222073746f702d636f6c6f723d227768697465222073746f702d6f6105278401527f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e00006105478401527f3c6d61736b2069643d22666164652d757022206d61736b436f6e74656e74556e6105658401527f6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696105858401527f6474683d223122206865696768743d2231222066696c6c3d2275726c282367726105a58401527030b216bab8149110179f1e17b6b0b9b59f60791b6105c58401527f3c6d61736b2069643d22666164652d646f776e22206d61736b436f6e74656e746105d68401527f556e6974733d226f626a656374426f756e64696e67426f78223e3c72656374206105f68401527f77696474683d223122206865696768743d2231222066696c6c3d2275726c28236106168401527433b930b216b237bbb7149110179f1e17b6b0b9b59f60591b6106368401527f3c6d61736b2069643d226e6f6e6522206d61736b436f6e74656e74556e69747361064b8401527f3d226f626a656374426f756e64696e67426f78223e3c7265637420776964746861066b8401527f3d223122206865696768743d2231222066696c6c3d22776869746522202f3e3c61068b8401526517b6b0b9b59f60d11b6106ab8401527f3c6c696e6561724772616469656e742069643d22677261642d73796d626f6c226106b18401527f3e3c73746f70206f66667365743d22302e37222073746f702d636f6c6f723d226106d18401527f7768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206106f18401527f6f66667365743d222e3935222073746f702d636f6c6f723d22776869746522206107118401527f73746f702d6f7061636974793d223022202f3e3c2f6c696e65617247726164696107318401526332b73a1f60e11b6107518401527f3c6d61736b2069643d22666164652d73796d626f6c22206d61736b436f6e74656107558401527f6e74556e6974733d227573657253706163654f6e557365223e3c7265637420776107758401527f696474683d22323930707822206865696768743d223330307078222066696c6c6107958401527f3d2275726c2823677261642d73796d626f6c2922202f3e3c2f6d61736b3e3c2f6107b5840152643232b3399f60d91b6107d58401527f3c6720636c69702d706174683d2275726c2823636f726e65727329223e0000006107da8401526b1e3932b1ba103334b6361e9160a11b6107f784015281516108039391927f2220783d223070782220793d22307078222077696474683d223239307078222092906111eb90839087840190602001613d75565b0192830152703432b4b3b43a1e911a9818383c1110179f60791b6108238301527f3c72656374207374796c653d2266696c7465723a2075726c28236631292220786108348301527f3d223070782220793d22307078222077696474683d22323930707822206865696108548301526d33b43a1e911a9818383c1110179f60911b6108748301527f203c67207374796c653d2266696c7465723a75726c2823746f702d726567696f6108828301527f6e2d626c7572293b207472616e73666f726d3a7363616c6528312e35293b20746108a28301527f72616e73666f726d2d6f726967696e3a63656e74657220746f703b223e0000006108c28301527f3c726563742066696c6c3d226e6f6e652220783d223070782220793d223070786108df8301527f222077696474683d22323930707822206865696768743d22353030707822202f6108ff83015261091f8201527f3c656c6c697073652063783d22353025222063793d22307078222072783d22316109208201527f38307078222072793d223132307078222066696c6c3d222330343143333222206109408201527437b830b1b4ba3c9e9118171c1a9110179f1e17b39f60591b6109608201527f3c7265637420783d22302220793d2230222077696474683d22323930222068656109758201527f696768743d22353030222072783d223432222072793d223432222066696c6c3d6109958201527f227267626128302c302c302c302922207374726f6b653d2272676261283235356109b58201527416191a9a96191a9a96181719149110179f1e17b39f60591b6109d5820152036109ca810184520182613e56565b8351936116f761024d60405180977f3c7465787420746578742d72656e646572696e673d226f7074696d697a65537060208301526432b2b2111f60d91b60408301527f3c74657874506174682073746172744f66667365743d222d313030252220666960458301527f6c6c3d2277686974652220666f6e742d66616d696c793d2227436f757269657260658301527f204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231307060858301527f782220786c696e6b3a687265663d2223746578742d706174682d61223e00000060a5830152805160208201906115398160c2860184613d75565b8301907f203c616e696d6174652061646469746976653d2273756d2220617474726962758060c28401527f74654e616d653d2273746172744f6666736574222066726f6d3d223025222074918260e28501527f6f3d22313030252220626567696e3d22307322206475723d223330732220726593846101028201527f70656174436f756e743d22696e646566696e69746522202f3e000000000000006101228201527f3c2f74657874506174683e203c74657874506174682073746172744f6666736561013b8201527f743d223025222066696c6c3d2277686974652220666f6e742d66616d696c793d61015b8201527f2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d61017b8201527f73697a653d22313070782220786c696e6b3a687265663d2223746578742d706161019b820152653a3416b0911f60d11b6101bb82015261169a6101c19651809388840190613d75565b01938401526101e18301526102018201527f70656174436f756e743d22696e646566696e69746522202f3e203c2f746578746102218201526b2830ba341f1e17ba32bc3a1f60a11b6102418201520361022d810188520186613e56565b51611ac46102ec60405180937f3c67206d61736b3d2275726c2823666164652d73796d626f6c29223e3c72656360208301527f742066696c6c3d226e6f6e652220783d223070782220793d223070782220776960408301527f6474683d22323930707822206865696768743d22343030707822202f3e203c7460608301527f65787420793d22373070782220783d2233327078222066696c6c3d227768697460808301527f652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d60a08301527f6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e7460c08301526c16b9b4bd329e91199b383c111f60991b60e08301526a135e481d995c9a599a595960aa1b60ed8301527f3c2f746578743e3c7465787420793d2231313570782220783d2233327078222060f88301527f66696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696101188301527f6572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d610138830152761119181811103337b73a16b9b4bd329e91199b383c111f60491b6101588301526e151dda5d1d195c881858d8dbdd5b9d608a1b61016f8301527f3c2f746578743e3c7465787420793d2231363070782220783d2233327078222061017e8301527f66696c6c3d2277686974652220666f6e742d66616d696c793d2227436f75726961019e8301527f6572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d6101be830152761119181811103337b73a16b9b4bd329e91199b383c111f60491b6101de83015261697360f01b6101f58301527f3c2f746578743e3c7465787420793d2232303570782220783d223332707822206101f78301527f66696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696102178301527f6572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d610237830152761119181811103337b73a16b9b4bd329e91199b383c111f60491b6102578301526a1e17ba32bc3a1f1e17b39f60a91b61026e91611a1d8151809260208688019101613d75565b8301918201527f3c7265637420783d2231362220793d223136222077696474683d2232353822206102798201527f6865696768743d22343638222072783d223236222072793d223236222066696c6102998201527f6c3d227267626128302c302c302c302922207374726f6b653d227267626128326102b9820152721a9a96191a9a96191a9a96181719149110179f60691b6102d9820152036102cc810184520182613e56565b604051947f3c67207374796c653d227472616e73666f726d3a7472616e736c61746528383460208701527f70782c20333030707829207363616c65283529223e3c673e3c7061746820643d60408701527f224d342e34303433342031332e3630393943332e35313531372031332e31343460608701527f3820332031322e35393234203320313243332031302e3334333120372e30323960808701527f3434203920313220394331362e3937303620392032312031302e33343331203260a08701527f312031324332312031322e373134342032302e323530382031332e333730352060c08701527f31392031332e3838353822207374726f6b653d2277686974652220207374726f60e08701527f6b652d6c696e656361703d22726f756e6422207374726f6b652d6c696e656a6f6101008701527f696e3d22726f756e64222066696c6c3d226e6f6e65222f3e00000000000000006101208701527f3c7061746820643d224d323420342e353537632d2e3838332e3339322d312e386101388701527f33322e3635362d322e3832382e37373520312e3031372d2e36303920312e37396101588701527f382d312e35373420322e3136352d322e3732342d2e3935312e3536342d322e306101788701527f30352e3937342d332e31323720312e3139352d2e3839372d2e3935372d322e316101988701527f37382d312e3535352d332e3539342d312e3535352d332e31373920302d352e356101b88701527f313520322e3936362d342e37393720362e3034352d342e3039312d2e3230352d6101d88701527f372e3731392d322e3136352d31302e3134382d352e3134342d312e323920322e6101f88701527f3231332d2e36363920352e31303820312e35323320362e3537342d2e3830362d6102188701527f2e3032362d312e3536362d2e3234372d322e3232392d2e3631362d2e303534206102388701527f322e32383120312e35383120342e34313520332e39343920342e38392d2e36396102588701527f332e3138382d312e3435322e3233322d322e3232342e3038342e36323620312e6102788701527f39353620322e34343420332e33373920342e3620332e3431392d322e303720316102988701527f2e3632332d342e36373820322e3334382d372e323920322e303420322e3137396102b88701527f20312e33393720342e37363820322e32313220372e35343820322e32313220396102d88701527f2e31343220302031342e3330372d372e3732312031332e3939352d31342e36346102f88701527f362e3936322d2e36393520312e3739372d312e35363220322e3435372d322e35610318870152651a1cbd11179f60d11b6103388701527f3c616e696d6174655472616e73666f726d206174747269627574654e616d653d61033e8701527f227472616e73666f726d2220747970653d22726f74617465222066726f6d3d2261035e8701527f302031322031322220746f3d2233363020313220313222206475723d2231307361037e8701527f2220726570656174436f756e743d22696e646566696e697465222f3e3c2f673e61039e870152631e17b39f60e11b6103be8701526103a28652856103e08101106001600160401b036103e08801111761251b57611ff99286926103e09283850160405261040092611f90815180926020878a019101613d75565b8501611fa58251809360208785019101613d75565b01611fb98251809360208685019101613d75565b01611fcc84518093830160208701613d75565b0101651e17b9bb339f60d11b6020820152036103d91981016103e08601526103b919016103e08501613e56565b60405191906001600160a01b0316608083016001600160401b0381118482101761251b5760405260568352602083019060603683378351156125055760308253835160011015612505576078602185015360555b600181116124c3575061247f576102b86124149361211c936105a3936120796103e061247b9901614160565b916040519687946f03d9130ba3a3934b13aba32b9911d2d960851b6020870152751ec89d1c985a5d17dd1e5c19488e880893985b59488b60521b603087015269113b30b63ab2911d101160b11b928360468801526120e181518092602060508b019101613d75565b8601927f227d2c207b2274726169745f74797065223a20224f776e6572222c00000000006050850152606b8401525180936075840190613d75565b01907f227d5d2c20226465736372697074696f6e223a20225a4b20566572696669656460758301527f456d61696c7320617265205a4b2076657269666965642070726f6f6673206f6660958301527f20656d61696c20726563696576696e67206f6e20457468657265756d2e20546860b58301527f6579206f6e6c792072657665616c207061727473206f662074686520656d616960d58301527f6c206865616465727320616e6420626f647920626f64792c20616e642061726560f58301527f20766572696669656420766961206d61696c736572766572207369676e6174756101158301527f726520766572696669636174696f6e3a20746865726520617265206e6f2073706101358301527f656369616c207061727479206174746573746572732e2057652061726520776f6101558301527f726b696e6720746f2073686970206d6f72652076657269666961626c652070726101758301527f6f6f6673206f66207369676e6564206461746120696e636c7564696e67207a6b6101958301527f20626c696e642c20616e642061766f6964207465727269626c652074726167656101b58301527f6479206f662074686520636f6d6d6f6e73207363656e6172696f7320776865726101d58301527f6520696e73746974756974696f6e2072657075746174696f6e20697320736c6f6101f58301527f776c79207370656e7420627920697473206d656d626572732e205665726966696102158301527f6564456d61696c2075736573205a4b20534e41524b7320746f20696e73696e756102358301527f617465207468697320736f6369616c2064796e616d69632c20776974682061206102558301527f66697273742064656d6f206174207a6b656d61696c2e78797a2e222c2022696d6102758301527f616765223a2022646174613a696d6167652f7376672b786d6c3b626173653634610295830152600b60fa1b6102b58301526102b6916123f98251809360208685019101613d75565b019061227d60f01b9082015203610298810184520182613e56565b612467603d60405180937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000060208301526124578151809260208686019101613d75565b810103601d810184520182613e56565b604051918291602083526020830190613d98565b0390f35b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b90600f811690601082101561250557612500916f181899199a1a9b1b9c1cb0b131b232b360811b901a6124f68488614085565b5360041c916142a6565b61204d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001909501946103f9565b6064600291049701966103f2565b612710600491049701966103e8565b6305f5e100600891049701966103dd565b662386f26fc10000601091049701966103d0565b6d04ee2d6d415b85acef8100000000602091049701966103c0565b6040975072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b601091909101049050600a6103a5565b634e487b7160e01b600052601160045260246000fd5b6001909101906102da565b6064600291049301926102d3565b612710600491049301926102c9565b6305f5e100600891049301926102be565b662386f26fc10000601091049301926102b1565b6d04ee2d6d415b85acef8100000000602091049301926102a1565b6040935072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b606491909101049050600a610286565b34610193576000366003190112610193576020604051601f8152f35b34610193576080366003190112610193576126a2613dbd565b6126aa613dd3565b606435916001600160401b0383116101935736602384011215610193578260040135916126d683613fa6565b926126e46040519485613e56565b8084523660248287010111610193576020816000926024612711980183880137850101526044359161484c565b005b346101935760403660031901126101935761272c613dbd565b60243590811515809203610193576001600160a01b0316903382146127a057336000526005602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b3461019357600036600319011261019357604051600060018281549261280a84613eac565b928383526020948582821691826000146128a3575050600114612849575b5061283592500383613e56565b61247b604051928284938452830190613d98565b6000818152859250907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b85831061288b575050612835935082010185612828565b80548389018501528794508693909201918101612874565b60ff19168582015261283595151560051b85010192508791506128289050565b346101935760203660031901126101935760206128e66128e1613dbd565b6146c3565b604051908152f35b3461019357602036600319011261019357602061290c600435614786565b6040516001600160a01b039091168152f35b3461019357602036600319011261019357600435600052600c60205261247b6124676040600020613ee6565b346101935760203660031901126101935760043560085481101561298157612973602091613fc1565b90546040519160031b1c8152f35b60405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608490fd5b34610193576127116129ec36613e77565b90604051926129fa84613e3b565b6000845261484c565b3461019357602080600319360112610193576004359081600052600c8152612a37612a316040600020613ee6565b92614786565b91604051926001600160601b03199060601b168284015260148352612a5b83613de9565b60405192612a6884613de9565b601084526f181899199a1a9b1b9c1cb0b131b232b360811b838501528051600181811b6002928082048414901517156125c45782018083116125c457612aad90614053565b928351156125055785840196603088538451831015612505578290607860218701536000915b612b47575b612b3888612835603b8a8d8b6040519687936f5477697474657220757365726e616d6560801b88860152612b15815180928a603089019101613d75565b8401916a6973206f776e656420627960a81b603084015251809386840190613d75565b0103601b810185520183613e56565b8251821015612be8576001600160f81b03199182612b72612b688387614085565b5160fc1c84614085565b51169281861b938285048814831517156125c457848801908189116125c457612b9f9060001a918a614085565b53612bba600f612baf8488614085565b5160f81c1684614085565b51169060039384018094116125c4578593612bdc612be29360001a918a614085565b53614096565b91612ad3565b612ad8565b3461019357602080600319360112610193576004356001600160401b03918282116101935736602383011215610193578160040135916024938311613021578260051b60405193612c4084830186613e56565b84528483850191830101913683116101935785849101915b8383106130115750505050600090825191601f9283810290808204851490151715612ffc57612c8690614053565b6000805b865161ffff821690811015612ddc57612ca390886140fa565b5160405190612cb182613e1f565b8782526103e0368884013760005b888110612d9657509060005b888110612cff5750505061ffff809116908114612cea57600101612c8a565b87634e487b7160e01b60005260116004526000fd5b909193612d0c82846140fa565b5160ff811615612d6b57612d35919060f81b6001600160f81b03191660001a612bdc8289614085565b936001871615612d56575b612d4e905b60081c91614096565b919091612ccb565b95612d63612d4e9161410e565b969050612d40565b5093600180881614612d81575b612d4e90612d45565b95612d8e612d4e9161410e565b969050612d78565b8060031b9080820460081481151715612dc75760ff83612dc2931c16612dbc82866140fa565b52614096565b612cbf565b8b634e487b7160e01b60005260116004526000fd5b838660018b8660ff8a168311612f7257601210612f1157508251906000815b612ed0575b5050612e0b81614053565b9060005b818110612ea557505060405190612e2582613de9565b604051612e3181613de9565b600c81526b76657269667940782e636f6d60a01b848201528252612e7e60405192612e5b84613de9565b600a845269696e666f40782e636f6d60b01b8585015284810193845251826140a5565b918215612e92575b50506040519015158152f35b612e9e925051906140a5565b8280612e86565b612ecb906001600160f81b0319612ebc8288614085565b511660001a612bdc8286614085565b612e0f565b8451811015612f0c576001600160f81b0319612eec8287614085565b511615612f0257612efc90614096565b81612dfb565b9150508380612e00565b612e00565b8260356084926040519262461bcd60e51b845260048401528201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152fd5b60405162461bcd60e51b8152600481018590526057818401527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527661696c3b2076616c7565206973206c696b656c7920302160481b608482015260a490fd5b85634e487b7160e01b60005260116004526000fd5b8235815291810191849101612c58565b83634e487b7160e01b60005260416004526000fd5b3461019357600036600319011261019357602060405160028152f35b346101935760403660031901126101935761306b613dbd565b60243590613078816146c3565b8210156130ab5760018060a01b031660005260066020526040600020906000526020526020604060002054604051908152f35b60405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608490fd5b34610193576000366003190112610193576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101935761271161315a36613e77565b9161316d61316884336148e7565b6147ea565b6149fb565b34610193576000366003190112610193576020600854604051908152f35b34610193576101603660031901126101935736602312156101935760405161010081018181106001600160401b0382111761251b57604052803661010411610193576004905b6101048210613a82578236610123121561019357604051906131f782613e04565b6101648236821161019357610104905b828210613a725750508251602061326360018060a01b03600b541660405161322e81613de9565b6005815264782e636f6d60d81b848201526040518095819482936373d3cbbd60e11b8452604060048501526044840190613d98565b90602483015203915afa9081156139d157600091613a53575b5015613a15576040519161328f83613de9565b80518352602081015160208401526040516132a981613de9565b6040516132b581613de9565b604083015181526060830151602082015281526040516132d481613de9565b6080830151815260a08301516020820152602082015260e0604051926132f984613de9565b60c08101518452015160208301526040516308a3cff560e11b815293613323906004860190614138565b6000604485015b600282106139f7575050506133439060c4840190614138565b8183600061010483015b600382106139dd575060209391508290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156139d1576000916139a2575b501561396d57604051906133ac82613de9565b600182526020368184013760015b6002811061393d5782600a546001810181116125c45760008251601f810290808204601f14901517156125c4576133f090614053565b9060009260005b855161ffff82169081101561351c5761341090876140fa565b516040519061341e82613e1f565b601f82526103e036602084013760005b601f81106134f157509060005b601f811061345b5750505061ffff8091169081146125c4576001016133f7565b90919661346882846140fa565b5160ff8116156134c657613491919060f81b6001600160f81b03191660001a612bdc828a614085565b9660018616156134b1575b6134a99060081c91614096565b91909161343b565b946134be6134a99161410e565b95905061349c565b50966001808716146134dc575b6134a990612d45565b946134e96134a99161410e565b9590506134d3565b8060031b90808204600814811517156125c45760ff83613517931c16612dbc82866140fa565b61342e565b848387600160ff8816106138b257601f1061384f5781519060005b8351811015613848576001600160f81b03196135538286614085565b5116156135685761356390614096565b613537565b9091505b61357581614053565b9260005b82811061381d5750505060018101600052600c602052604060002082516001600160401b03811161251b576135ae8254613eac565b601f81116137d5575b506020601f821160011461376f5781929394600092613764575b50508160011b916000199060031b1c19161790555b33156137205760018101600090815260026020526040902054613615906001600160a01b031615155b15614955565b6008549060018101600052600960205281604060002055600160401b82101561251b5761366661364c836001809501600855613fc1565b8484019082549060031b91821b91600019901b1916179055565b61366f336146c3565b336000908152600660209081526040808320848452825280832085870190819055835260078252808320939093556002905220546136b7906001600160a01b0316151561360f565b336000526003602052604060002082815401905581810160005260026020526040600020336001600160601b0360a01b825416179055013360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600a80546001019055005b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b0151905084806135d1565b601f198216908360005260206000209160005b8181106137bd575095836001959697106137a4575b505050811b0190556135e6565b015160001960f88460031b161c19169055848080613797565b9192602060018192868b015181550194019201613782565b826000526020600020601f830160051c81019160208410613813575b601f0160051c01905b81811061380757506135b7565b600081556001016137fa565b90915081906137f1565b613843906001600160f81b03196138348285614085565b511660001a612bdc8288614085565b613579565b509061356c565b60405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608490fd5b60405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527661696c3b2076616c7565206973206c696b656c7920302160481b608482015260a490fd5b6003811015612505578060051b820151906000198101918183116125c457612dbc61396893866140fa565b6133ba565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606490fd5b6139c4915060203d6020116139ca575b6139bc8183613e56565b810190614120565b82613399565b503d6139b2565b6040513d6000823e3d90fd5b82935060208091600193945181520193019101849261334d565b6020604082613a096001948751614138565b0193019101909161332a565b60405162461bcd60e51b8152602060048201526016602482015275696e76616c696420646b696d207369676e617475726560501b6044820152606490fd5b613a6c915060203d6020116139ca576139bc8183613e56565b8461327c565b8135815260209182019101613207565b81358152602091820191016131d6565b3461019357600036600319011261019357602060405160008152f35b3461019357604036600319011261019357613ac7613dbd565b602435906001600160a01b038080613ade85614786565b16921691808314613bd957803314908115613bb4575b5015613b4957600083815260046020526040902080546001600160a01b03191683179055613b2183614786565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608490fd5b9050600052600560205260406000203360005260205260ff6040600020541684613af4565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b3461019357602036600319011261019357602061290c6004356147ac565b3461019357600036600319011261019357604051600080549082613c6983613eac565b918282526020936001908582821691826000146128a3575050600114613c96575061283592500383613e56565b6000808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310613cd8575050612835935082010185612828565b80548389018501528794508693909201918101613cc1565b34610193576020366003190112610193576004359063ffffffff60e01b82168092036101935760209163780e9d6360e01b8114908115613d32575b5015158152f35b6380ac58cd60e01b811491508115613d64575b8115613d53575b5083613d2b565b6301ffc9a760e01b14905083613d4c565b635b5e139f60e01b81149150613d45565b60005b838110613d885750506000910152565b8181015183820152602001613d78565b90602091613db181518092818552858086019101613d75565b601f01601f1916010190565b600435906001600160a01b038216820361019357565b602435906001600160a01b038216820361019357565b604081019081106001600160401b0382111761251b57604052565b606081019081106001600160401b0382111761251b57604052565b61040081019081106001600160401b0382111761251b57604052565b602081019081106001600160401b0382111761251b57604052565b90601f801991011681019081106001600160401b0382111761251b57604052565b6060906003190112610193576001600160a01b0390600435828116810361019357916024359081168103610193579060443590565b90600182811c92168015613edc575b6020831014613ec657565b634e487b7160e01b600052602260045260246000fd5b91607f1691613ebb565b90604051918260008254613ef981613eac565b908184526020946001918281169081600014613f685750600114613f29575b505050613f2792500383613e56565b565b600090815285812095935091905b818310613f50575050613f279350820101388080613f18565b85548884018501529485019487945091830191613f37565b92505050613f2794925060ff191682840152151560051b820101388080613f18565b3461019357600036600319011261019357602060405160018152f35b6001600160401b03811161251b57601f01601f191660200190565b6008548110156125055760086000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30190600090565b90610180918281029281840414901517156125c457565b90610102918281029281840414901517156125c457565b818102929181159184041417156125c457565b6040519061404682613de9565b6006825260203681840137565b9061405d82613fa6565b61406a6040519182613e56565b828152809261407b601f1991613fa6565b0190602036910137565b908151811015612505570160200190565b60001981146125c45760010190565b90604051916020926140d38482816140c68183019687815193849201613d75565b8101038084520182613e56565b519020916140f36040519182816140c68183019687815193849201613d75565b5190201490565b80518210156125055760209160051b010190565b60ff60019116019060ff82116125c457565b90816020910312610193575180151581036101935790565b6000915b6002831061414957505050565b60019082518152602080910192019201919061413c565b8051156142925760405161417381613e04565b604081527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f604082015281516002928382018092116125c4576003918290046001600160fe1b03811681036125c4576141f5908594951b614053565b936020850193829183518401925b838110614241575050505051068060011461422e57600214614223575090565b603d90600019015390565b50603d9081600019820153600119015390565b85600491979293949701918251600190603f9082828260121c16880101518453828282600c1c16880101518385015382828260061c1688010151888501531685010151878201530195929190614203565b5060405161429f81613e3b565b6000815290565b80156125c4576000190190565b7f3c7376672077696474683d2732393027206865696768743d273530302720766981527f6577426f783d2730203020323930203530302720786d6c6e733d27687474703a60208201527f2f2f7777772e77332e6f72672f323030302f737667273e3c636972636c652063604082015262783d2760e81b606082015260630190565b61433f60ff9161400f565b04601081018091116125c4576000908072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b818181101561447d575b50506d04ee2d6d415b85acef81000000008083101561446e575b50662386f26fc100008083101561445f575b506305f5e10080831015614450575b5061271080831015614441575b506064821015614431575b600a80921015614427575b6001908160216143df828701614053565b95860101905b6143f1575b5050505090565b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304918215614422579190826143e5565b6143ea565b91600101916143ce565b91906064600291049101916143c3565b600491939204910191386143b8565b600891939204910191386143ab565b6010919392049101913861439c565b6020919392049101913861438a565b604094500491503880614370565b61449660ff91613ff8565b04606481018091116125c4576000908072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b81818110156145ce575b50506d04ee2d6d415b85acef8100000000808310156145bf575b50662386f26fc10000808310156145b0575b506305f5e100808310156145a1575b5061271080831015614592575b506064821015614582575b600a80921015614578575b600190816021614536828701614053565b95860101905b614547575050505090565b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049182156144225791908261453c565b9160010191614525565b919060646002910491019161451a565b6004919392049101913861450f565b60089193920491019138614502565b601091939204910191386144f3565b602091939204910191386144e1565b6040945004915038806144c7565b60881c6145e7614039565b90815190815b6145f657505090565b600f811690601082101561465157600019830183811161463c57614635926f181899199a1a9b1b9c1cb0b131b232b360811b901a906124f69086614085565b90816145ed565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b61466e614039565b90815190815b61467d57505090565b600f811690601082101561465157600019830183811161463c576146bc926f181899199a1a9b1b9c1cb0b131b232b360811b901a906124f69086614085565b9081614674565b6001600160a01b031680156146e357600052600360205260406000205490565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b1561474157565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152600260205260409020546001600160a01b03166147a981151561473a565b90565b6000818152600260205260409020546147cf906001600160a01b0316151561473a565b6000908152600460205260409020546001600160a01b031690565b156147f157565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b9061487093929161486061316884336148e7565b61486b8383836149fb565b614c40565b1561487757565b60405162461bcd60e51b81528061489060048201614894565b0390fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b906001600160a01b0380806148fb84614786565b1693169183831493841561492e575b508315614918575b50505090565b614924919293506147ac565b1614388080614912565b909350600052600560205260406000208260005260205260ff60406000205416923861490a565b1561495c57565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b156149a857565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b614a1f91614a0884614786565b6001600160a01b03938484169391851684146149a1565b838216938415614bef57839182614b4c575090506008549085600052600960205281604060002055600160401b82101561251b57614a9e92614a8587614a6c856001899701600855613fc1565b90919082549060031b91821b91600019901b1916179055565b828603614b19575b50614a9786614786565b16146149a1565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60008481526004602052604081206001600160601b0360a01b9081815416905583825260036020526040822060001981540190558482526040822060018154019055858252600260205284604083209182541617905580a4565b614b22906146c3565b60406000878152600660205281812083825260205288828220558881526007602052205538614a8d565b858303614b5e575b50614a9e92614a85565b614b699192506146c3565b6000198101919082116125c457614a9e9284926000908882526020906007825260409182842054828103614bb8575b508a84528383812055868452600681528284209184525281205592614b54565b8785526006825283852083865282528385205488865260068352848620828752835280858720558552600782528385205538614b98565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b9293919290803b15614d5957614c949460018060a01b039460405192839187630a85bd0160e11b9687855233600486015216602484015260448301526080606483015281806020998a956084830190613d98565b03916000988991165af1849181614d15575b50614d04575050503d600014614cfc573d614cc081613fa6565b90614cce6040519283613e56565b81528091833d92013e5b80519182614cf95760405162461bcd60e51b81528061489060048201614894565b01fd5b506060614cd8565b6001600160e01b0319161492509050565b9091508581813d8311614d52575b614d2d8183613e56565b81010312614d4e57516001600160e01b031981168103614d4e579038614ca6565b8480fd5b503d614d23565b505091505060019056fea2646970667358221220ec171a38aa184904a3708fe7426c9d60d356e113b6786fb155f9f8084c0a679164736f6c63430008150033", + "sourceMap": "414:5169:72:-:0;;;;;-1:-1:-1;;;;;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;;-1:-1:-1;;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;414:5169:72;;;;;;;;;;;;;;1346:12;;1368:16;414:5169;;-1:-1:-1;;;;;;414:5169:72;;;;;;;;;;;;;;;1346:12;414:5169;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;-1:-1:-1;414:5169:72;;-1:-1:-1;414:5169:72;;;;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;:::o", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714613cf05750806306fdde0314613c46578063081812fc14613c28578063095ea7b314613aae57806314c5225114613a9257806316eb903b1461319057806318160ddd1461317257806323b872dd146131495780632b7ac3f3146131045780632f745c5914613052578063312033bf146130365780633827fc6f14612bed5780633e09849014612a0357806342842e0e146129db5780634f6ccce71461294a5780634f79d38a1461291e57806361e80718146101985780636352211e146128ee57806370a08231146128c357806395d89b41146127e5578063a22cb46514612713578063b88d4fde14612689578063bec47aea1461266d578063c87b56dd1461019d578063c9929db9146101985763e985e9c51461013d57600080fd5b3461019357604036600319011261019357610156613dbd565b61015e613dd3565b9060018060a01b03809116600052600560205260406000209116600052602052602060ff604060002054166040519015158152f35b600080fd5b613f8a565b3461019357602036600319011261019357600435600052600c6020526101c66040600020613ee6565b6101d1600435614786565b906101e46001600160a01b0383166145dc565b916101f76001600160a01b0382166145dc565b6102096001600160a01b038316614666565b9361021c6001600160a01b038416614666565b60ff8460101c1660ff6102528161024c6102428261023c60043588614026565b06614334565b9460043590614026565b06613ff8565b046064810181116125c4576000906064810190819072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b821015612642575b50806d04ee2d6d415b85acef8100000000600a921015612627575b662386f26fc10000811015612613575b6305f5e100811015612602575b6127108110156125f3575b60648110156125e5575b10156125da575b600a60216102ea60018501614053565b938401015b60001901916f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304801561031e57600a90916102ef565b505061033660ff61023c600435828a60201c16614026565b61035260ff61034c600435828b60201c16614026565b0661448b565b9160ff6103708161036a600435828d60301c16614026565b0661400f565b04936010850185116125c4576000946010810190819072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b821015612599575b50806d04ee2d6d415b85acef8100000000600a92101561257e575b662386f26fc1000081101561256a575b6305f5e100811015612559575b61271081101561254a575b606481101561253c575b1015612531575b600a602161040960018901614053565b978801015b60001901916f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304801561043d57600a909161040e565b505061045560ff61034c600435828d60301c16614026565b956040519b8c6001600160401b0361018082818101109201111761251b576105a89960608e8e6101808201604052815260043560208201528b6040820152015260808d015260a08c015260c08b015260e08a01526101008901526101208801526101408701526101608601526105a360aa60405180937f3c7376672077696474683d2732393027206865696768743d273530302720766960208301527f6577426f783d2730203020323930203530302720786d6c6e733d27687474703a60408301527f2f2f7777772e77332e6f72672f323030302f737667273e3c726563742077696460608301527f74683d27323930707827206865696768743d273530307078272066696c6c3d276080830152602360f81b60a083015261058181518092602060a186019101613d75565b81016813979f1e17b9bb339f60b91b60a182015203608a810184520182613e56565b614160565b61144a6109ea61065c60206105a3602260c08a015160e08b015160608c0151906040519586936105e96105dc8387016142b3565b9182815194859201613d75565b0165272063793d2760d01b815261060a825180936020600685019101613d75565b01722720723d273132307078272066696c6c3d272360681b600682015261063b825180936020601985019101613d75565b016813979f1e17b9bb339f60b91b6019820152036002810184520182613e56565b9261068d60206105a360226101008b01516101208c015160808d0151906040519586936105e96105dc8387016142b3565b61071060206105a360226101408c01518c60a0610160820151910151906040519586936106be6105dc8387016142b3565b0165272063793d2760d01b81526106df825180936020600685019101613d75565b01722720723d273130307078272066696c6c3d272360681b600682015261063b825180936020601985019101613d75565b907f22202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e3d2260408a0151916040519788957f3c7376672077696474683d2232393022206865696768743d223530302220766960208801527f6577426f783d2230203020323930203530302220786d6c6e733d22687474703a6040880152751797bbbbbb973b999737b933979918181817b9bb339160511b60608801527f20786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f60768801526b189c9c9c97bc3634b735939f60a11b6096880152651e3232b3399f60d11b60a28801527f3c66696c7465722069643d226631223e3c6665496d61676520726573756c743d60a88801527f2270302220786c696e6b3a687265663d22646174613a696d6167652f7376672b60c88801526a1e1b5b0ed8985cd94d8d0b60aa1b60e888015261086781518092602060f38b019101613d75565b7f222f3e3c6665496d61676520726573756c743d2270312220786c696e6b3a687260f382890101527f65663d22646174613a696d6167652f7376672b786d6c3b6261736536342c000061011382890101526108cf825180936020610131858c01019101613d75565b7f222f3e3c6665496d61676520726573756c743d2270322220786c696e6b3a687287820183016101318101919091527f65663d22646174613a696d6167652f7376672b786d6c3b6261736536342c000061015182015283519361093d91859161016f90910190602001613d75565b8601010192631110179f60e11b61016f8501527f3c6665496d61676520726573756c743d2270332220786c696e6b3a687265663d6101738501527f22646174613a696d6167652f7376672b786d6c3b6261736536342c00000000006101938501526101ae936109b58251809360208885019101613d75565b01928301527f70302220696e323d22703122202f3e3c6665426c656e64206d6f64653d2265786101ce8301527f636c7573696f6e2220696e323d22703222202f3e3c6665426c656e64206d6f646101ee8301527f653d226f7665726c61792220696e323d2270332220726573756c743d22626c6561020e8301527f6e644f757422202f3e3c6665476175737369616e426c7572200000000000000061022e8301527f696e3d22626c656e644f75742220737464446576696174696f6e3d22343222206102478301527f2f3e3c2f66696c7465723e203c636c6970506174682069643d22636f726e65726102678301527f73223e3c726563742077696474683d2232393022206865696768743d223530306102878301527f222072783d223432222072793d22343222202f3e3c2f636c6970506174683e006102a78301527f3c706174682069643d22746578742d706174682d612220643d224d34302031326102c68301527f20483235302041323820323820302030203120323738203430205634363020416102e68301527f32382032382030203020312032353020343838204834302041323820323820306103068301527f2030203120313220343630205634302041323820323820302030203120343020610326830152671899103d1110179f60c11b6103468301527f3c706174682069643d226d696e696d61702220643d224d32333420343434433261034e8301527f3334203435372e393439203234322e323120343633203235332034363322202f61036e830152601f60f91b61038e83018190527f3c66696c7465722069643d22746f702d726567696f6e2d626c7572223e3c666561038f8401527f476175737369616e426c757220696e3d22536f757263654772617068696322206103af8401527f737464446576696174696f6e3d22323422202f3e3c2f66696c7465723e0000006103cf8401527f3c6c696e6561724772616469656e742069643d22677261642d7570222078313d6103ec8401527f2231222078323d2230222079313d2231222079323d2230223e3c73746f70206f61040c8401527f66667365743d22302e30222073746f702d636f6c6f723d22776869746522207361042c840152713a37b816b7b830b1b4ba3c9e91189110179f60711b61044c8401527f3c73746f70206f66667365743d222e39222073746f702d636f6c6f723d22776861045e8401527f697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e65617261047e8401526823b930b234b2b73a1f60b91b61049e8401527f3c6c696e6561724772616469656e742069643d22677261642d646f776e2220786104a78401527f313d2230222078323d2231222079313d2230222079323d2231223e3c73746f706104c78401527f206f66667365743d22302e30222073746f702d636f6c6f723d227768697465226104e78401527f2073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365746105078401527f3d22302e39222073746f702d636f6c6f723d227768697465222073746f702d6f6105278401527f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e00006105478401527f3c6d61736b2069643d22666164652d757022206d61736b436f6e74656e74556e6105658401527f6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696105858401527f6474683d223122206865696768743d2231222066696c6c3d2275726c282367726105a58401527030b216bab8149110179f1e17b6b0b9b59f60791b6105c58401527f3c6d61736b2069643d22666164652d646f776e22206d61736b436f6e74656e746105d68401527f556e6974733d226f626a656374426f756e64696e67426f78223e3c72656374206105f68401527f77696474683d223122206865696768743d2231222066696c6c3d2275726c28236106168401527433b930b216b237bbb7149110179f1e17b6b0b9b59f60591b6106368401527f3c6d61736b2069643d226e6f6e6522206d61736b436f6e74656e74556e69747361064b8401527f3d226f626a656374426f756e64696e67426f78223e3c7265637420776964746861066b8401527f3d223122206865696768743d2231222066696c6c3d22776869746522202f3e3c61068b8401526517b6b0b9b59f60d11b6106ab8401527f3c6c696e6561724772616469656e742069643d22677261642d73796d626f6c226106b18401527f3e3c73746f70206f66667365743d22302e37222073746f702d636f6c6f723d226106d18401527f7768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206106f18401527f6f66667365743d222e3935222073746f702d636f6c6f723d22776869746522206107118401527f73746f702d6f7061636974793d223022202f3e3c2f6c696e65617247726164696107318401526332b73a1f60e11b6107518401527f3c6d61736b2069643d22666164652d73796d626f6c22206d61736b436f6e74656107558401527f6e74556e6974733d227573657253706163654f6e557365223e3c7265637420776107758401527f696474683d22323930707822206865696768743d223330307078222066696c6c6107958401527f3d2275726c2823677261642d73796d626f6c2922202f3e3c2f6d61736b3e3c2f6107b5840152643232b3399f60d91b6107d58401527f3c6720636c69702d706174683d2275726c2823636f726e65727329223e0000006107da8401526b1e3932b1ba103334b6361e9160a11b6107f784015281516108039391927f2220783d223070782220793d22307078222077696474683d223239307078222092906111eb90839087840190602001613d75565b0192830152703432b4b3b43a1e911a9818383c1110179f60791b6108238301527f3c72656374207374796c653d2266696c7465723a2075726c28236631292220786108348301527f3d223070782220793d22307078222077696474683d22323930707822206865696108548301526d33b43a1e911a9818383c1110179f60911b6108748301527f203c67207374796c653d2266696c7465723a75726c2823746f702d726567696f6108828301527f6e2d626c7572293b207472616e73666f726d3a7363616c6528312e35293b20746108a28301527f72616e73666f726d2d6f726967696e3a63656e74657220746f703b223e0000006108c28301527f3c726563742066696c6c3d226e6f6e652220783d223070782220793d223070786108df8301527f222077696474683d22323930707822206865696768743d22353030707822202f6108ff83015261091f8201527f3c656c6c697073652063783d22353025222063793d22307078222072783d22316109208201527f38307078222072793d223132307078222066696c6c3d222330343143333222206109408201527437b830b1b4ba3c9e9118171c1a9110179f1e17b39f60591b6109608201527f3c7265637420783d22302220793d2230222077696474683d22323930222068656109758201527f696768743d22353030222072783d223432222072793d223432222066696c6c3d6109958201527f227267626128302c302c302c302922207374726f6b653d2272676261283235356109b58201527416191a9a96191a9a96181719149110179f1e17b39f60591b6109d5820152036109ca810184520182613e56565b8351936116f761024d60405180977f3c7465787420746578742d72656e646572696e673d226f7074696d697a65537060208301526432b2b2111f60d91b60408301527f3c74657874506174682073746172744f66667365743d222d313030252220666960458301527f6c6c3d2277686974652220666f6e742d66616d696c793d2227436f757269657260658301527f204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231307060858301527f782220786c696e6b3a687265663d2223746578742d706174682d61223e00000060a5830152805160208201906115398160c2860184613d75565b8301907f203c616e696d6174652061646469746976653d2273756d2220617474726962758060c28401527f74654e616d653d2273746172744f6666736574222066726f6d3d223025222074918260e28501527f6f3d22313030252220626567696e3d22307322206475723d223330732220726593846101028201527f70656174436f756e743d22696e646566696e69746522202f3e000000000000006101228201527f3c2f74657874506174683e203c74657874506174682073746172744f6666736561013b8201527f743d223025222066696c6c3d2277686974652220666f6e742d66616d696c793d61015b8201527f2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d61017b8201527f73697a653d22313070782220786c696e6b3a687265663d2223746578742d706161019b820152653a3416b0911f60d11b6101bb82015261169a6101c19651809388840190613d75565b01938401526101e18301526102018201527f70656174436f756e743d22696e646566696e69746522202f3e203c2f746578746102218201526b2830ba341f1e17ba32bc3a1f60a11b6102418201520361022d810188520186613e56565b51611ac46102ec60405180937f3c67206d61736b3d2275726c2823666164652d73796d626f6c29223e3c72656360208301527f742066696c6c3d226e6f6e652220783d223070782220793d223070782220776960408301527f6474683d22323930707822206865696768743d22343030707822202f3e203c7460608301527f65787420793d22373070782220783d2233327078222066696c6c3d227768697460808301527f652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d60a08301527f6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e7460c08301526c16b9b4bd329e91199b383c111f60991b60e08301526a135e481d995c9a599a595960aa1b60ed8301527f3c2f746578743e3c7465787420793d2231313570782220783d2233327078222060f88301527f66696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696101188301527f6572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d610138830152761119181811103337b73a16b9b4bd329e91199b383c111f60491b6101588301526e151dda5d1d195c881858d8dbdd5b9d608a1b61016f8301527f3c2f746578743e3c7465787420793d2231363070782220783d2233327078222061017e8301527f66696c6c3d2277686974652220666f6e742d66616d696c793d2227436f75726961019e8301527f6572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d6101be830152761119181811103337b73a16b9b4bd329e91199b383c111f60491b6101de83015261697360f01b6101f58301527f3c2f746578743e3c7465787420793d2232303570782220783d223332707822206101f78301527f66696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696102178301527f6572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d610237830152761119181811103337b73a16b9b4bd329e91199b383c111f60491b6102578301526a1e17ba32bc3a1f1e17b39f60a91b61026e91611a1d8151809260208688019101613d75565b8301918201527f3c7265637420783d2231362220793d223136222077696474683d2232353822206102798201527f6865696768743d22343638222072783d223236222072793d223236222066696c6102998201527f6c3d227267626128302c302c302c302922207374726f6b653d227267626128326102b9820152721a9a96191a9a96191a9a96181719149110179f60691b6102d9820152036102cc810184520182613e56565b604051947f3c67207374796c653d227472616e73666f726d3a7472616e736c61746528383460208701527f70782c20333030707829207363616c65283529223e3c673e3c7061746820643d60408701527f224d342e34303433342031332e3630393943332e35313531372031332e31343460608701527f3820332031322e35393234203320313243332031302e3334333120372e30323960808701527f3434203920313220394331362e3937303620392032312031302e33343331203260a08701527f312031324332312031322e373134342032302e323530382031332e333730352060c08701527f31392031332e3838353822207374726f6b653d2277686974652220207374726f60e08701527f6b652d6c696e656361703d22726f756e6422207374726f6b652d6c696e656a6f6101008701527f696e3d22726f756e64222066696c6c3d226e6f6e65222f3e00000000000000006101208701527f3c7061746820643d224d323420342e353537632d2e3838332e3339322d312e386101388701527f33322e3635362d322e3832382e37373520312e3031372d2e36303920312e37396101588701527f382d312e35373420322e3136352d322e3732342d2e3935312e3536342d322e306101788701527f30352e3937342d332e31323720312e3139352d2e3839372d2e3935372d322e316101988701527f37382d312e3535352d332e3539342d312e3535352d332e31373920302d352e356101b88701527f313520322e3936362d342e37393720362e3034352d342e3039312d2e3230352d6101d88701527f372e3731392d322e3136352d31302e3134382d352e3134342d312e323920322e6101f88701527f3231332d2e36363920352e31303820312e35323320362e3537342d2e3830362d6102188701527f2e3032362d312e3536362d2e3234372d322e3232392d2e3631362d2e303534206102388701527f322e32383120312e35383120342e34313520332e39343920342e38392d2e36396102588701527f332e3138382d312e3435322e3233322d322e3232342e3038342e36323620312e6102788701527f39353620322e34343420332e33373920342e3620332e3431392d322e303720316102988701527f2e3632332d342e36373820322e3334382d372e323920322e303420322e3137396102b88701527f20312e33393720342e37363820322e32313220372e35343820322e32313220396102d88701527f2e31343220302031342e3330372d372e3732312031332e3939352d31342e36346102f88701527f362e3936322d2e36393520312e3739372d312e35363220322e3435372d322e35610318870152651a1cbd11179f60d11b6103388701527f3c616e696d6174655472616e73666f726d206174747269627574654e616d653d61033e8701527f227472616e73666f726d2220747970653d22726f74617465222066726f6d3d2261035e8701527f302031322031322220746f3d2233363020313220313222206475723d2231307361037e8701527f2220726570656174436f756e743d22696e646566696e697465222f3e3c2f673e61039e870152631e17b39f60e11b6103be8701526103a28652856103e08101106001600160401b036103e08801111761251b57611ff99286926103e09283850160405261040092611f90815180926020878a019101613d75565b8501611fa58251809360208785019101613d75565b01611fb98251809360208685019101613d75565b01611fcc84518093830160208701613d75565b0101651e17b9bb339f60d11b6020820152036103d91981016103e08601526103b919016103e08501613e56565b60405191906001600160a01b0316608083016001600160401b0381118482101761251b5760405260568352602083019060603683378351156125055760308253835160011015612505576078602185015360555b600181116124c3575061247f576102b86124149361211c936105a3936120796103e061247b9901614160565b916040519687946f03d9130ba3a3934b13aba32b9911d2d960851b6020870152751ec89d1c985a5d17dd1e5c19488e880893985b59488b60521b603087015269113b30b63ab2911d101160b11b928360468801526120e181518092602060508b019101613d75565b8601927f227d2c207b2274726169745f74797065223a20224f776e6572222c00000000006050850152606b8401525180936075840190613d75565b01907f227d5d2c20226465736372697074696f6e223a20225a4b20566572696669656460758301527f456d61696c7320617265205a4b2076657269666965642070726f6f6673206f6660958301527f20656d61696c20726563696576696e67206f6e20457468657265756d2e20546860b58301527f6579206f6e6c792072657665616c207061727473206f662074686520656d616960d58301527f6c206865616465727320616e6420626f647920626f64792c20616e642061726560f58301527f20766572696669656420766961206d61696c736572766572207369676e6174756101158301527f726520766572696669636174696f6e3a20746865726520617265206e6f2073706101358301527f656369616c207061727479206174746573746572732e2057652061726520776f6101558301527f726b696e6720746f2073686970206d6f72652076657269666961626c652070726101758301527f6f6f6673206f66207369676e6564206461746120696e636c7564696e67207a6b6101958301527f20626c696e642c20616e642061766f6964207465727269626c652074726167656101b58301527f6479206f662074686520636f6d6d6f6e73207363656e6172696f7320776865726101d58301527f6520696e73746974756974696f6e2072657075746174696f6e20697320736c6f6101f58301527f776c79207370656e7420627920697473206d656d626572732e205665726966696102158301527f6564456d61696c2075736573205a4b20534e41524b7320746f20696e73696e756102358301527f617465207468697320736f6369616c2064796e616d69632c20776974682061206102558301527f66697273742064656d6f206174207a6b656d61696c2e78797a2e222c2022696d6102758301527f616765223a2022646174613a696d6167652f7376672b786d6c3b626173653634610295830152600b60fa1b6102b58301526102b6916123f98251809360208685019101613d75565b019061227d60f01b9082015203610298810184520182613e56565b612467603d60405180937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000060208301526124578151809260208686019101613d75565b810103601d810184520182613e56565b604051918291602083526020830190613d98565b0390f35b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b90600f811690601082101561250557612500916f181899199a1a9b1b9c1cb0b131b232b360811b901a6124f68488614085565b5360041c916142a6565b61204d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001909501946103f9565b6064600291049701966103f2565b612710600491049701966103e8565b6305f5e100600891049701966103dd565b662386f26fc10000601091049701966103d0565b6d04ee2d6d415b85acef8100000000602091049701966103c0565b6040975072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b601091909101049050600a6103a5565b634e487b7160e01b600052601160045260246000fd5b6001909101906102da565b6064600291049301926102d3565b612710600491049301926102c9565b6305f5e100600891049301926102be565b662386f26fc10000601091049301926102b1565b6d04ee2d6d415b85acef8100000000602091049301926102a1565b6040935072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b606491909101049050600a610286565b34610193576000366003190112610193576020604051601f8152f35b34610193576080366003190112610193576126a2613dbd565b6126aa613dd3565b606435916001600160401b0383116101935736602384011215610193578260040135916126d683613fa6565b926126e46040519485613e56565b8084523660248287010111610193576020816000926024612711980183880137850101526044359161484c565b005b346101935760403660031901126101935761272c613dbd565b60243590811515809203610193576001600160a01b0316903382146127a057336000526005602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b3461019357600036600319011261019357604051600060018281549261280a84613eac565b928383526020948582821691826000146128a3575050600114612849575b5061283592500383613e56565b61247b604051928284938452830190613d98565b6000818152859250907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b85831061288b575050612835935082010185612828565b80548389018501528794508693909201918101612874565b60ff19168582015261283595151560051b85010192508791506128289050565b346101935760203660031901126101935760206128e66128e1613dbd565b6146c3565b604051908152f35b3461019357602036600319011261019357602061290c600435614786565b6040516001600160a01b039091168152f35b3461019357602036600319011261019357600435600052600c60205261247b6124676040600020613ee6565b346101935760203660031901126101935760043560085481101561298157612973602091613fc1565b90546040519160031b1c8152f35b60405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608490fd5b34610193576127116129ec36613e77565b90604051926129fa84613e3b565b6000845261484c565b3461019357602080600319360112610193576004359081600052600c8152612a37612a316040600020613ee6565b92614786565b91604051926001600160601b03199060601b168284015260148352612a5b83613de9565b60405192612a6884613de9565b601084526f181899199a1a9b1b9c1cb0b131b232b360811b838501528051600181811b6002928082048414901517156125c45782018083116125c457612aad90614053565b928351156125055785840196603088538451831015612505578290607860218701536000915b612b47575b612b3888612835603b8a8d8b6040519687936f5477697474657220757365726e616d6560801b88860152612b15815180928a603089019101613d75565b8401916a6973206f776e656420627960a81b603084015251809386840190613d75565b0103601b810185520183613e56565b8251821015612be8576001600160f81b03199182612b72612b688387614085565b5160fc1c84614085565b51169281861b938285048814831517156125c457848801908189116125c457612b9f9060001a918a614085565b53612bba600f612baf8488614085565b5160f81c1684614085565b51169060039384018094116125c4578593612bdc612be29360001a918a614085565b53614096565b91612ad3565b612ad8565b3461019357602080600319360112610193576004356001600160401b03918282116101935736602383011215610193578160040135916024938311613021578260051b60405193612c4084830186613e56565b84528483850191830101913683116101935785849101915b8383106130115750505050600090825191601f9283810290808204851490151715612ffc57612c8690614053565b6000805b865161ffff821690811015612ddc57612ca390886140fa565b5160405190612cb182613e1f565b8782526103e0368884013760005b888110612d9657509060005b888110612cff5750505061ffff809116908114612cea57600101612c8a565b87634e487b7160e01b60005260116004526000fd5b909193612d0c82846140fa565b5160ff811615612d6b57612d35919060f81b6001600160f81b03191660001a612bdc8289614085565b936001871615612d56575b612d4e905b60081c91614096565b919091612ccb565b95612d63612d4e9161410e565b969050612d40565b5093600180881614612d81575b612d4e90612d45565b95612d8e612d4e9161410e565b969050612d78565b8060031b9080820460081481151715612dc75760ff83612dc2931c16612dbc82866140fa565b52614096565b612cbf565b8b634e487b7160e01b60005260116004526000fd5b838660018b8660ff8a168311612f7257601210612f1157508251906000815b612ed0575b5050612e0b81614053565b9060005b818110612ea557505060405190612e2582613de9565b604051612e3181613de9565b600c81526b76657269667940782e636f6d60a01b848201528252612e7e60405192612e5b84613de9565b600a845269696e666f40782e636f6d60b01b8585015284810193845251826140a5565b918215612e92575b50506040519015158152f35b612e9e925051906140a5565b8280612e86565b612ecb906001600160f81b0319612ebc8288614085565b511660001a612bdc8286614085565b612e0f565b8451811015612f0c576001600160f81b0319612eec8287614085565b511615612f0257612efc90614096565b81612dfb565b9150508380612e00565b612e00565b8260356084926040519262461bcd60e51b845260048401528201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152fd5b60405162461bcd60e51b8152600481018590526057818401527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527661696c3b2076616c7565206973206c696b656c7920302160481b608482015260a490fd5b85634e487b7160e01b60005260116004526000fd5b8235815291810191849101612c58565b83634e487b7160e01b60005260416004526000fd5b3461019357600036600319011261019357602060405160028152f35b346101935760403660031901126101935761306b613dbd565b60243590613078816146c3565b8210156130ab5760018060a01b031660005260066020526040600020906000526020526020604060002054604051908152f35b60405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608490fd5b34610193576000366003190112610193576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101935761271161315a36613e77565b9161316d61316884336148e7565b6147ea565b6149fb565b34610193576000366003190112610193576020600854604051908152f35b34610193576101603660031901126101935736602312156101935760405161010081018181106001600160401b0382111761251b57604052803661010411610193576004905b6101048210613a82578236610123121561019357604051906131f782613e04565b6101648236821161019357610104905b828210613a725750508251602061326360018060a01b03600b541660405161322e81613de9565b6005815264782e636f6d60d81b848201526040518095819482936373d3cbbd60e11b8452604060048501526044840190613d98565b90602483015203915afa9081156139d157600091613a53575b5015613a15576040519161328f83613de9565b80518352602081015160208401526040516132a981613de9565b6040516132b581613de9565b604083015181526060830151602082015281526040516132d481613de9565b6080830151815260a08301516020820152602082015260e0604051926132f984613de9565b60c08101518452015160208301526040516308a3cff560e11b815293613323906004860190614138565b6000604485015b600282106139f7575050506133439060c4840190614138565b8183600061010483015b600382106139dd575060209391508290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156139d1576000916139a2575b501561396d57604051906133ac82613de9565b600182526020368184013760015b6002811061393d5782600a546001810181116125c45760008251601f810290808204601f14901517156125c4576133f090614053565b9060009260005b855161ffff82169081101561351c5761341090876140fa565b516040519061341e82613e1f565b601f82526103e036602084013760005b601f81106134f157509060005b601f811061345b5750505061ffff8091169081146125c4576001016133f7565b90919661346882846140fa565b5160ff8116156134c657613491919060f81b6001600160f81b03191660001a612bdc828a614085565b9660018616156134b1575b6134a99060081c91614096565b91909161343b565b946134be6134a99161410e565b95905061349c565b50966001808716146134dc575b6134a990612d45565b946134e96134a99161410e565b9590506134d3565b8060031b90808204600814811517156125c45760ff83613517931c16612dbc82866140fa565b61342e565b848387600160ff8816106138b257601f1061384f5781519060005b8351811015613848576001600160f81b03196135538286614085565b5116156135685761356390614096565b613537565b9091505b61357581614053565b9260005b82811061381d5750505060018101600052600c602052604060002082516001600160401b03811161251b576135ae8254613eac565b601f81116137d5575b506020601f821160011461376f5781929394600092613764575b50508160011b916000199060031b1c19161790555b33156137205760018101600090815260026020526040902054613615906001600160a01b031615155b15614955565b6008549060018101600052600960205281604060002055600160401b82101561251b5761366661364c836001809501600855613fc1565b8484019082549060031b91821b91600019901b1916179055565b61366f336146c3565b336000908152600660209081526040808320848452825280832085870190819055835260078252808320939093556002905220546136b7906001600160a01b0316151561360f565b336000526003602052604060002082815401905581810160005260026020526040600020336001600160601b0360a01b825416179055013360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600a80546001019055005b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b0151905084806135d1565b601f198216908360005260206000209160005b8181106137bd575095836001959697106137a4575b505050811b0190556135e6565b015160001960f88460031b161c19169055848080613797565b9192602060018192868b015181550194019201613782565b826000526020600020601f830160051c81019160208410613813575b601f0160051c01905b81811061380757506135b7565b600081556001016137fa565b90915081906137f1565b613843906001600160f81b03196138348285614085565b511660001a612bdc8288614085565b613579565b509061356c565b60405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608490fd5b60405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527661696c3b2076616c7565206973206c696b656c7920302160481b608482015260a490fd5b6003811015612505578060051b820151906000198101918183116125c457612dbc61396893866140fa565b6133ba565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606490fd5b6139c4915060203d6020116139ca575b6139bc8183613e56565b810190614120565b82613399565b503d6139b2565b6040513d6000823e3d90fd5b82935060208091600193945181520193019101849261334d565b6020604082613a096001948751614138565b0193019101909161332a565b60405162461bcd60e51b8152602060048201526016602482015275696e76616c696420646b696d207369676e617475726560501b6044820152606490fd5b613a6c915060203d6020116139ca576139bc8183613e56565b8461327c565b8135815260209182019101613207565b81358152602091820191016131d6565b3461019357600036600319011261019357602060405160008152f35b3461019357604036600319011261019357613ac7613dbd565b602435906001600160a01b038080613ade85614786565b16921691808314613bd957803314908115613bb4575b5015613b4957600083815260046020526040902080546001600160a01b03191683179055613b2183614786565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608490fd5b9050600052600560205260406000203360005260205260ff6040600020541684613af4565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b3461019357602036600319011261019357602061290c6004356147ac565b3461019357600036600319011261019357604051600080549082613c6983613eac565b918282526020936001908582821691826000146128a3575050600114613c96575061283592500383613e56565b6000808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310613cd8575050612835935082010185612828565b80548389018501528794508693909201918101613cc1565b34610193576020366003190112610193576004359063ffffffff60e01b82168092036101935760209163780e9d6360e01b8114908115613d32575b5015158152f35b6380ac58cd60e01b811491508115613d64575b8115613d53575b5083613d2b565b6301ffc9a760e01b14905083613d4c565b635b5e139f60e01b81149150613d45565b60005b838110613d885750506000910152565b8181015183820152602001613d78565b90602091613db181518092818552858086019101613d75565b601f01601f1916010190565b600435906001600160a01b038216820361019357565b602435906001600160a01b038216820361019357565b604081019081106001600160401b0382111761251b57604052565b606081019081106001600160401b0382111761251b57604052565b61040081019081106001600160401b0382111761251b57604052565b602081019081106001600160401b0382111761251b57604052565b90601f801991011681019081106001600160401b0382111761251b57604052565b6060906003190112610193576001600160a01b0390600435828116810361019357916024359081168103610193579060443590565b90600182811c92168015613edc575b6020831014613ec657565b634e487b7160e01b600052602260045260246000fd5b91607f1691613ebb565b90604051918260008254613ef981613eac565b908184526020946001918281169081600014613f685750600114613f29575b505050613f2792500383613e56565b565b600090815285812095935091905b818310613f50575050613f279350820101388080613f18565b85548884018501529485019487945091830191613f37565b92505050613f2794925060ff191682840152151560051b820101388080613f18565b3461019357600036600319011261019357602060405160018152f35b6001600160401b03811161251b57601f01601f191660200190565b6008548110156125055760086000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30190600090565b90610180918281029281840414901517156125c457565b90610102918281029281840414901517156125c457565b818102929181159184041417156125c457565b6040519061404682613de9565b6006825260203681840137565b9061405d82613fa6565b61406a6040519182613e56565b828152809261407b601f1991613fa6565b0190602036910137565b908151811015612505570160200190565b60001981146125c45760010190565b90604051916020926140d38482816140c68183019687815193849201613d75565b8101038084520182613e56565b519020916140f36040519182816140c68183019687815193849201613d75565b5190201490565b80518210156125055760209160051b010190565b60ff60019116019060ff82116125c457565b90816020910312610193575180151581036101935790565b6000915b6002831061414957505050565b60019082518152602080910192019201919061413c565b8051156142925760405161417381613e04565b604081527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f604082015281516002928382018092116125c4576003918290046001600160fe1b03811681036125c4576141f5908594951b614053565b936020850193829183518401925b838110614241575050505051068060011461422e57600214614223575090565b603d90600019015390565b50603d9081600019820153600119015390565b85600491979293949701918251600190603f9082828260121c16880101518453828282600c1c16880101518385015382828260061c1688010151888501531685010151878201530195929190614203565b5060405161429f81613e3b565b6000815290565b80156125c4576000190190565b7f3c7376672077696474683d2732393027206865696768743d273530302720766981527f6577426f783d2730203020323930203530302720786d6c6e733d27687474703a60208201527f2f2f7777772e77332e6f72672f323030302f737667273e3c636972636c652063604082015262783d2760e81b606082015260630190565b61433f60ff9161400f565b04601081018091116125c4576000908072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b818181101561447d575b50506d04ee2d6d415b85acef81000000008083101561446e575b50662386f26fc100008083101561445f575b506305f5e10080831015614450575b5061271080831015614441575b506064821015614431575b600a80921015614427575b6001908160216143df828701614053565b95860101905b6143f1575b5050505090565b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304918215614422579190826143e5565b6143ea565b91600101916143ce565b91906064600291049101916143c3565b600491939204910191386143b8565b600891939204910191386143ab565b6010919392049101913861439c565b6020919392049101913861438a565b604094500491503880614370565b61449660ff91613ff8565b04606481018091116125c4576000908072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b81818110156145ce575b50506d04ee2d6d415b85acef8100000000808310156145bf575b50662386f26fc10000808310156145b0575b506305f5e100808310156145a1575b5061271080831015614592575b506064821015614582575b600a80921015614578575b600190816021614536828701614053565b95860101905b614547575050505090565b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049182156144225791908261453c565b9160010191614525565b919060646002910491019161451a565b6004919392049101913861450f565b60089193920491019138614502565b601091939204910191386144f3565b602091939204910191386144e1565b6040945004915038806144c7565b60881c6145e7614039565b90815190815b6145f657505090565b600f811690601082101561465157600019830183811161463c57614635926f181899199a1a9b1b9c1cb0b131b232b360811b901a906124f69086614085565b90816145ed565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b61466e614039565b90815190815b61467d57505090565b600f811690601082101561465157600019830183811161463c576146bc926f181899199a1a9b1b9c1cb0b131b232b360811b901a906124f69086614085565b9081614674565b6001600160a01b031680156146e357600052600360205260406000205490565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b1561474157565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152600260205260409020546001600160a01b03166147a981151561473a565b90565b6000818152600260205260409020546147cf906001600160a01b0316151561473a565b6000908152600460205260409020546001600160a01b031690565b156147f157565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b9061487093929161486061316884336148e7565b61486b8383836149fb565b614c40565b1561487757565b60405162461bcd60e51b81528061489060048201614894565b0390fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b906001600160a01b0380806148fb84614786565b1693169183831493841561492e575b508315614918575b50505090565b614924919293506147ac565b1614388080614912565b909350600052600560205260406000208260005260205260ff60406000205416923861490a565b1561495c57565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b156149a857565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b614a1f91614a0884614786565b6001600160a01b03938484169391851684146149a1565b838216938415614bef57839182614b4c575090506008549085600052600960205281604060002055600160401b82101561251b57614a9e92614a8587614a6c856001899701600855613fc1565b90919082549060031b91821b91600019901b1916179055565b828603614b19575b50614a9786614786565b16146149a1565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60008481526004602052604081206001600160601b0360a01b9081815416905583825260036020526040822060001981540190558482526040822060018154019055858252600260205284604083209182541617905580a4565b614b22906146c3565b60406000878152600660205281812083825260205288828220558881526007602052205538614a8d565b858303614b5e575b50614a9e92614a85565b614b699192506146c3565b6000198101919082116125c457614a9e9284926000908882526020906007825260409182842054828103614bb8575b508a84528383812055868452600681528284209184525281205592614b54565b8785526006825283852083865282528385205488865260068352848620828752835280858720558552600782528385205538614b98565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b9293919290803b15614d5957614c949460018060a01b039460405192839187630a85bd0160e11b9687855233600486015216602484015260448301526080606483015281806020998a956084830190613d98565b03916000988991165af1849181614d15575b50614d04575050503d600014614cfc573d614cc081613fa6565b90614cce6040519283613e56565b81528091833d92013e5b80519182614cf95760405162461bcd60e51b81528061489060048201614894565b01fd5b506060614cd8565b6001600160e01b0319161492509050565b9091508581813d8311614d52575b614d2d8183613e56565b81010312614d4e57516001600160e01b031981168103614d4e579038614ca6565b8480fd5b503d614d23565b505091505060019056fea2646970667358221220ec171a38aa184904a3708fe7426c9d60d356e113b6786fb155f9f8084c0a679164736f6c63430008150033", + "sourceMap": "414:5169:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;4508:18:1;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;1904:13;414:5169;;;;;;;:::i;:::-;1952:16;414:5169;;1952:16;:::i;:::-;414:5169;10813:45:74;-1:-1:-1;;;;;414:5169:72;;10813:45:74;:::i;:::-;414:5169:72;10880:45:74;-1:-1:-1;;;;;414:5169:72;;10880:45:74;:::i;:::-;10947:43;-1:-1:-1;;;;;414:5169:72;;10947:43:74;:::i;:::-;414:5169:72;11012:43:74;-1:-1:-1;;;;;414:5169:72;;11012:43:74;:::i;:::-;414:5169:72;;11119:2:74;414:5169:72;;;10267:28:74;414:5169:72;9870:45:74;11073:76;414:5169:72;9870:45:74;414:5169:72;;9870:45:74;;:::i;:::-;414:5169:72;11073:76:74;:::i;:::-;414:5169:72;;;9870:45:74;;:::i;:::-;414:5169:72;10267:28:74;:::i;:::-;345:66:8;11235:3:74;414:5169:72;;;;;;;;11235:3:74;414:5169:72;;;;;-1:-1:-1;;;10267:17:14;;;10263:103;;414:5169:72;10383:17:14;;10392:8;10963:7;10383:17;;;10379:103;;414:5169:72;10508:8:14;10499:17;;;10495:103;;414:5169:72;10624:7:14;10615:16;;;10611:100;;414:5169:72;10737:7:14;10728:16;;;10724:100;;414:5169:72;11235:3:74;10841:16:14;;;10837:100;;414:5169:72;10954:16:14;;10950:66;;414:5169:72;10963:7:14;731:76:11;627:18;589:1;414:5169:72;;627:18:11;:::i;:::-;659:11;731:76;;;820:280;-1:-1:-1;;414:5169:72;;-1:-1:-1;;;925:93:11;;;;414:5169:72;925:93:11;345:66:8;1068:10:11;;1064:21;;10963:7:14;820:280:11;;;;1064:21;1080:5;;11262:76:74;414:5169:72;9870:45:74;414:5169:72;;;;;;;9870:45:74;:::i;11262:76::-;11356:77;414:5169:72;9870:45:74;414:5169:72;;;;;;;9870:45:74;:::i;:::-;414:5169:72;11356:77:74;:::i;:::-;414:5169:72;;10267:28:74;414:5169:72;9870:45:74;414:5169:72;;;;11497:2:74;414:5169:72;;9870:45:74;:::i;:::-;414:5169:72;10267:28:74;:::i;:::-;345:66:8;414:5169:72;11119:2:74;414:5169:72;;;;;;;;11119:2:74;414:5169:72;;;;;-1:-1:-1;;;10267:17:14;;;10263:103;;820:280:11;10383:17:14;;10392:8;10963:7;10383:17;;;10379:103;;820:280:11;10508:8:14;10499:17;;;10495:103;;820:280:11;10624:7:14;10615:16;;;10611:100;;820:280:11;10737:7:14;10728:16;;;10724:100;;820:280:11;11235:3:74;10841:16:14;;;10837:100;;820:280:11;10954:16:14;;10950:66;;820:280:11;10963:7:14;731:76:11;627:18;589:1;414:5169:72;;627:18:11;:::i;:::-;659:11;731:76;;;820:280;-1:-1:-1;;414:5169:72;;-1:-1:-1;;;925:93:11;;;;414:5169:72;925:93:11;345:66:8;1068:10:11;;1064:21;;10963:7:14;820:280:11;;;;1064:21;1080:5;;11545:77:74;414:5169:72;9870:45:74;414:5169:72;;;;11497:2:74;414:5169:72;;9870:45:74;:::i;11545:77::-;414:5169:72;;;;;-1:-1:-1;;;;;636:7:72;414:5169;;;;;;;;;;;1663:393:74;414:5169:72;10719:914:74;414:5169:72;;636:7;414:5169;;;;;;;;;10719:914:74;;414:5169:72;10719:914:74;414:5169:72;10719:914:74;;414:5169:72;10719:914:74;414:5169:72;10719:914:74;;;414:5169:72;10719:914:74;;;414:5169:72;10719:914:74;;;414:5169:72;;10719:914:74;;414:5169:72;10719:914:74;;;414:5169:72;10719:914:74;;;414:5169:72;10719:914:74;;;414:5169:72;10719:914:74;;;414:5169:72;1729:287:74;;414:5169:72;;1729:287:74;;414:5169:72;;1729:287:74;;414:5169:72;;;;;;;10719:914:74;414:5169:72;;;;10719:914:74;414:5169:72;;;-1:-1:-1;;;10719:914:74;414:5169:72;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;414:5169:72;;;;1729:287:74;;;;;;;;;:::i;:::-;1663:393;:::i;:::-;1338:5202;;2156:530;414:5169:72;2222:424:74;;10719:914;;;2399:9;414:5169:72;10719:914:74;;2476:9;10719:914;;;2566:13;414:5169:72;;;2222:424:74;;;414:5169:72;;2222:424:74;;;414:5169:72;:::i;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;414:5169:72;;;;2222:424:74;;;;;;;;;:::i;2156:530::-;10719:914;2786:530;414:5169:72;2852:424:74;2222;10719:914;;;3029:9;10719:914;;;3106:9;10719:914;;;3196:13;414:5169:72;;;2852:424:74;;;414:5169:72;;2852:424:74;;;414:5169:72;:::i;2786:530:74:-;3437;414:5169:72;3503:424:74;2222;10719:914;;;3680:9;10719:914;;;;;3757:9;10719:914;;3847:13;414:5169:72;;;3503:424:74;;;414:5169:72;;3503:424:74;;;414:5169:72;:::i;:::-;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;:::i;3437:530:74:-;10719:914;414:5169:72;;10719:914:74;;5906:13;414:5169:72;;;1338:5202:74;;;414:5169:72;;1338:5202:74;;414:5169:72;;;;;;;;;10719:914:74;414:5169:72;;;;;;;;-1:-1:-1;;;414:5169:72;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;1338:5202:74;;;;;;;;;:::i;:::-;1041:15;;414:5169:72;6695:743:74;;414:5169:72;;6695:743:74;;414:5169:72;;6695:743:74;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;636:7;414:5169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;6695:743:74;;;;;;;;;:::i;:::-;1097:15;7593:960;;414:5169:72;;7593:960:74;;414:5169:72;;7593:960:74;;414:5169:72;;;;;;;10719:914:74;414:5169:72;;;;10719:914:74;414:5169:72;;;;10719:914:74;414:5169:72;;;;10719:914:74;414:5169:72;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7593:960:74;;;;;;;;;:::i;:::-;414:5169:72;;8680:1020:74;414:5169:72;;8680:1020:74;;414:5169:72;;;;;;;10719:914:74;414:5169:72;;;;10719:914:74;414:5169:72;;;;10719:914:74;414:5169:72;;;;10719:914:74;414:5169:72;;;;;;;;;10719:914:74;414:5169:72;;;;10719:914:74;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;8680:1020:74;;;414:5169:72;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;944:244:74;414:5169:72;;;;;;;;;;944:244:74;414:5169:72;;;;944:244:74;;414:5169:72;944:244:74;;;1338:5202;;414:5169:72;:::i;:::-;;;;;;;;;;;;6695:743:74;;414:5169:72;:::i;:::-;;;;;;;;;;;7593:960:74;;414:5169:72;:::i;:::-;;;;;;;;;;8680:1020:74;;414:5169:72;:::i;:::-;;;-1:-1:-1;;;414:5169:72;;;;944:244:74;;;;;414:5169:72;;;944:244:74;;;;414:5169:72;;;944:244:74;:::i;:::-;414:5169:72;;;;-1:-1:-1;;;;;414:5169:72;10719:914:74;414:5169:72;;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;;;;;;;;10719:914:74;414:5169:72;;;;;;;;11497:2:74;745:15:18;;414:5169:72;;589:1:11;414:5169:72;;;;770:15:18;731:76:11;414:5169:72;;770:15:18;414:5169:72;828:5:18;589:1:11;828:5:18;;;;940:10;216:18;;414:5169:72;11723:1187:74;414:5169:72;;;11801:1067:74;414:5169:72;12785:31:74;414:5169:72;;;;12785:31:74;:::i;:::-;414:5169:72;;;;;;;;;;11801:1067:74;;414:5169:72;;;;11497:2:74;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11801:1067:74;414:5169:72;11801:1067:74;;;;;;;:::i;11723:1187::-;12950:55;414:5169:72;;;12950:55:74;;414:5169:72;;12950:55:74;;414:5169:72;;;;;;;;;;;;;:::i;:::-;;;12950:55:74;;;;;;;;;:::i;:::-;414:5169:72;;;;;;;;;;;;;:::i;:::-;;;;216:18:18;11235:3:74;414:5169:72;;;;;216:18:18;;414:5169:72;;216:18:18;;;414:5169:72;;216:18:18;;414:5169:72;216:18:18;414:5169:72;;;216:18:18;;835:3;875:11;414:5169:72;875:11:18;;866:21;11119:2:74;866:21:18;;;;;835:3;;-1:-1:-1;;;866:21:18;;854:33;;;;:::i;:::-;;414:5169:72;;835:3:18;;:::i;:::-;800:26;;866:21;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;10950:66:14;589:1:11;414:5169:72;;;;10950:66:14;;10837:100;11235:3:74;10921:1:14;345:66:8;;414:5169:72;;10837:100:14;;;10724;10737:7;414:5169:72;345:66:8;;414:5169:72;;10724:100:14;;;10611;10624:7;10695:1;345:66:8;;414:5169:72;;10611:100:14;;;10495:103;10508:8;11119:2:74;345:66:8;;414:5169:72;;10495:103:14;;;10379;10392:8;414:5169:72;345:66:8;;414:5169:72;;10379:103:14;;;10263;414:5169:72;;-1:-1:-1;;;;11119:2:74;414:5169:72;;;;345:66:8;;-1:-1:-1;10963:7:14;10263:103;;414:5169:72;;;;;;;;;;;;10950:66:14;11000:1;414:5169:72;;;;10950:66:14;;10837:100;11235:3:74;10921:1:14;345:66:8;;414:5169:72;;10837:100:14;;;10724;10737:7;414:5169:72;345:66:8;;414:5169:72;;10724:100:14;;;10611;10624:7;10695:1;345:66:8;;414:5169:72;;10611:100:14;;;10495:103;10508:8;11119:2:74;345:66:8;;414:5169:72;;10495:103:14;;;10379;10392:8;414:5169:72;345:66:8;;414:5169:72;;10379:103:14;;;10263;414:5169:72;;-1:-1:-1;;;;11235:3:74;414:5169:72;;;;345:66:8;;-1:-1:-1;10963:7:14;10263:103;;414:5169:72;;;;;;-1:-1:-1;;414:5169:72;;;;;;;603:2;414:5169;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;414:5169:72;;719:10:9;12990:17:1;;414:5169:72;;719:10:9;414:5169:72;;13047:18:1;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13108:41:1;414:5169:72;719:10:9;13108:41:1;;414:5169:72;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;2721:7:1;414:5169:72;;;;;;;:::i;:::-;;;;;;;;;;;2721:7:1;;414:5169:72;2721:7:1;;;414:5169:72;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;-1:-1:-1;414:5169:72;;-1:-1:-1;414:5169:72;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;1201:47;414:5169;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;414:5169:72;;;;;;1717:10:4;414:5169:72;1915:38:4;;414:5169:72;;;2019:17:4;414:5169:72;2019:17:4;;:::i;:::-;414:5169:72;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;5077:39:1;414:5169:72;;;:::i;:::-;;;;;;;;:::i;:::-;;;;5077:39:1;:::i;414:5169:72:-;;;;;;;;;;;;;;;;;;;1512:13;414:5169;;1568:16;414:5169;;;;;:::i;:::-;1568:16;;:::i;:::-;414:5169;;;;-1:-1:-1;;;;;414:5169:72;;;;;1733:25:18;;;414:5169:72;1733:25:18;;;;;;:::i;:::-;414:5169:72;;;;;;:::i;:::-;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;2114:1:18;414:5169:72;;;;;;;;;;;;;;;;;;;2104:30:18;;;:::i;:::-;414:5169:72;;;;;;;;;2144:12:18;;;;414:5169:72;;;;;;;;;2166:12:18;414:5169:72;;;2166:12:18;414:5169:72;2188:193:18;414:5169:72;;;2188:193:18;414:5169:72;;1637:106;414:5169;;;;;;1637:106;;;-1:-1:-1;;;1637:106:72;;;414:5169;;;;;;;2144:12:18;414:5169:72;;;;;:::i;:::-;;;;-1:-1:-1;;;2144:12:18;414:5169:72;;;;;;;;;;;:::i;:::-;;1637:106;;;;;;;;;:::i;2225:3:18:-;414:5169:72;;2208:15:18;;;;;-1:-1:-1;;;;;;414:5169:72;;2261:38:18;2284:7;;;;:::i;:::-;414:5169:72;;;2261:38:18;;:::i;:::-;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;2244:55:18;;414:5169:72;2244:55:18;;;;:::i;:::-;;2330:40;2363:4;2353:7;;;;:::i;:::-;414:5169:72;;;;2330:40:18;;:::i;:::-;414:5169:72;;2317:1:18;;414:5169:72;;;;;;;;2313:57:18;;;2225:3;2313:57;414:5169:72;2313:57:18;;;;:::i;:::-;;2225:3;:::i;:::-;2193:13;;;2208:15;;;414:5169:72;;;;;;;;;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4038:15:18;;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;4184:40:18;;;:::i;:::-;414:5169:72;;4321:3:18;414:5169:72;;;;;4297:22:18;;;;;;4361:14;;;;:::i;:::-;414:5169:72;;;;;;;:::i;:::-;;;;;;;;;;;4475:12:18;;;;;;4592:13;;414:5169:72;4607:12:18;;;;;;4321:3;;;414:5169:72;;;;;;;;;;;4283:12:18;;414:5169:72;;;;;;;;;;;;4621:3:18;4667:16;;;;;;;:::i;:::-;414:5169:72;;;;4725:17:18;414:5169:72;;4859:24:18;;414:5169:72;;;-1:-1:-1;;;;;;414:5169:72;;4766:71:18;;414:5169:72;4766:71:18;;:::i;4859:24::-;414:5169:72;;;;4909:14:18;4905:79;;4721:406;4621:3;4721:406;;4556:1;414:5169:72;4621:3:18;;:::i;:::-;4592:13;;;;;4905:79;4951:10;;4621:3;4951:10;;:::i;:::-;4905:79;;;;;4721:406;414:5169:72;;;;;;5034:14:18;5030:79;;4721:406;4621:3;4721:406;;;5030:79;5076:10;;4621:3;5076:10;;:::i;:::-;5030:79;;;;;4489:3;414:5169:72;;;;;;;4556:1:18;414:5169:72;;;;;;;;;4489:3:18;414:5169:72;;;4512:47:18;;;;:::i;:::-;414:5169:72;4489:3:18;:::i;:::-;4460:13;;414:5169:72;;;;;;;;;;;;4297:22:18;;;414:5169:72;4297:22:18;;414:5169:72;;;5674:10:18;-1:-1:-1;414:5169:72;;2225:2;-1:-1:-1;414:5169:72;;-1:-1:-1;414:5169:72;;;;8430:13:18;414:5169:72;;;8425:164:18;8626:19;;;;;:::i;:::-;8660:13;414:5169:72;8675:12:18;;;;;;414:5169:72;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;-1:-1:-1;;;414:5169:72;;;;;;2350:51;414:5169;;;;;;:::i;:::-;;;;-1:-1:-1;;;414:5169:72;;;;2291:30;;;414:5169;;;2384:16;2350:51;;:::i;:::-;:106;;;;;8655:94:18;414:5169:72;;;;;;;;;;2350:106;2405:51;2439:16;;;2405:51;;:::i;:::-;2350:106;;;;8689:3:18;;;-1:-1:-1;;;;;;8725:13:18;414:5169:72;8725:13:18;;:::i;:::-;414:5169:72;;;8708:30:18;;;;;:::i;8689:3::-;8660:13;;8468:3;414:5169:72;;8445:21:18;;;;;-1:-1:-1;;;;;;8491:13:18;;;;:::i;:::-;414:5169:72;;8491:18:18;8487:92;;8468:3;;;:::i;:::-;8430:13;;;8487:92;8529:12;;;8559:5;;;;8445:21;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;1032:1;414:5169;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;:::i;:::-;;;1438:23:4;;;;:::i;:::-;1430:31;;414:5169:72;;;;;;;;;;;1526:12:4;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;1160:34;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;4893:7:1;414:5169:72;;;:::i;:::-;719:10:9;4763:99:1;4771:41;719:10:9;;4771:41:1;:::i;:::-;4763:99;:::i;:::-;4893:7;:::i;414:5169:72:-;;;;;;-1:-1:-1;;414:5169:72;;;;;1717:10:4;414:5169:72;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;636:7;414:5169;;;;;3960:12;414:5169;;;;;;;:::i;:::-;;;;-1:-1:-1;;;414:5169:72;;;;;;636:7;;;;;;;;;3960:73;;414:5169;;3960:73;;636:7;;;;;;:::i;:::-;;;;;414:5169;3960:73;;;;;;;;;414:5169;3960:73;;;414:5169;636:7;;;;414:5169;;;;;;:::i;:::-;;;;;;636:7;;414:5169;;4162:20;;414:5169;;;;;;:::i;:::-;;;;;;:::i;:::-;;636:7;;414:5169;;;;636:7;;414:5169;;4201:20;;414:5169;;;;;;;;:::i;:::-;636:7;;;414:5169;;;636:7;;;414:5169;;4223:20;;414:5169;;4200:44;;414:5169;;;;;;;;:::i;:::-;636:7;;;414:5169;;;636:7;414:5169;;4262:20;;414:5169;;;-1:-1:-1;;;4124:197:72;;414:5169;636:7;;414:5169;4124:197;;;636:7;:::i;:::-;414:5169;636:7;;;;4162:20;636:7;;;;;;;;;;;;;;:::i;:::-;;;414:5169;;636:7;;;414:5169;636:7;;;;-1:-1:-1;414:5169:72;;;-1:-1:-1;414:5169:72;;-1:-1:-1;4124:8:72;-1:-1:-1;;;;;414:5169:72;4124:197;;;;;;;414:5169;4124:197;;;636:7;;;;;414:5169;;;;;;:::i;:::-;636:7;414:5169;;;;636:7;;;414:5169;636:7;4689:54;4162:20;4689:54;;;;414:5169;4887:12;414:5169;636:7;414:5169;;;;;;;;;;;;;;;;;;;;;;;;4184:40:18;;;:::i;:::-;4234:34;414:5169:72;4283:12:18;414:5169:72;4321:3:18;414:5169:72;;;;;4297:22:18;;;;;;4361:14;;;;:::i;:::-;414:5169:72;;;;;;;:::i;:::-;;;;;;;;;;;4475:12:18;414:5169:72;4475:12:18;;;;4592:13;;414:5169:72;4607:12:18;414:5169:72;4607:12:18;;;;4321:3;;;414:5169:72;;;;;;;;;636:7;414:5169;4283:12:18;;4621:3;4667:16;;;;;;;:::i;:::-;414:5169:72;;;;4725:17:18;414:5169:72;;4859:24:18;;414:5169:72;;;-1:-1:-1;;;;;;414:5169:72;;4766:71:18;;414:5169:72;4766:71:18;;:::i;4859:24::-;414:5169:72;636:7;414:5169;;4909:14:18;4905:79;;4721:406;4621:3;4721:406;414:5169:72;;4621:3:18;;:::i;:::-;4592:13;;;;;4905:79;4951:10;;4621:3;4951:10;;:::i;:::-;4905:79;;;;;4721:406;414:5169:72;;636:7;414:5169;;;5034:14:18;5030:79;;4721:406;4621:3;4721:406;;;5030:79;5076:10;;4621:3;5076:10;;:::i;:::-;5030:79;;;;;4489:3;414:5169:72;;;;;;;;;;;;;;;;;4489:3:18;414:5169:72;;;4512:47:18;;;;:::i;4489:3::-;4460:13;;4297:22;;;;636:7:72;414:5169;4297:22:18;414:5169:72;5674:10:18;414:5169:72;;;-1:-1:-1;414:5169:72;;;;8430:13:18;414:5169:72;8468:3:18;414:5169:72;;8445:21:18;;;;;-1:-1:-1;;;;;;8491:13:18;;;;:::i;:::-;414:5169:72;;8491:18:18;8487:92;;8468:3;;;:::i;:::-;8430:13;;8487:92;8529:12;;;8425:164;8626:19;;;:::i;:::-;8660:13;414:5169:72;8675:12:18;;;;;;414:5169:72;;;636:7;414:5169;;;;5223:13;414:5169;;;;;;;-1:-1:-1;;;;;636:7:72;;;;;;;;:::i;:::-;414:5169;636:7;;;;8655:94:18;636:7:72;414:5169;;636:7;;;414:5169;;;636:7;;;;414:5169;636:7;;;;;;;;;;;;;414:5169;636:7;414:5169;636:7;;;;;;5276:10;9004:16:1;414:5169:72;;636:7;414:5169;;-1:-1:-1;414:5169:72;;;6794:7:1;414:5169:72;;;;;;9067:58:1;;-1:-1:-1;;;;;414:5169:72;7208:31:1;;9076:16;9075:17;9067:58;:::i;:::-;414:5169:72;;;636:7;414:5169;;;;3784:15:4;414:5169:72;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;636:7;414:5169;;;;;;:::i;:::-;;;;636:7;;;;;;;;;;;;;;;;;;;;414:5169;3397:20:4;5276:10:72;3397:20:4;:::i;:::-;5276:10:72;414:5169;;;;3427:12:4;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;3471:17:4;414:5169:72;;;;;;;;;6794:7:1;414:5169:72;;;;9271:58:1;;-1:-1:-1;;;;;414:5169:72;7208:31:1;;9280:16;7120:126;9271:58;5276:10:72;414:5169;;;;;;;;;;;;;;;;;;;4162:20;414:5169;;;;;5276:10;-1:-1:-1;;;;;414:5169:72;;;;;;;;;5276:10;414:5169;9747:33:1;;;;4887:12:72;414:5169;;636:7;414:5169;;;;;;;;;;;;;;;;;;;636:7;414:5169;;;;636:7;414:5169;;;;636:7;;;;-1:-1:-1;636:7:72;;;;;;;;;414:5169;;;;;;;636:7;414:5169;636:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;414:5169;636:7;;414:5169;636:7;;;;;;;;;;;;414:5169;636:7;;;;;;;;;;;;;;;;;414:5169;;;;;;;636:7;;414:5169;636:7;;;;414:5169;636:7;;;;;414:5169;636:7;414:5169;636:7;;;;;;;;;;;;;414:5169;636:7;;;;;;;;;-1:-1:-1;636:7:72;;;;8689:3:18;;;-1:-1:-1;;;;;;8725:13:18;414:5169:72;8725:13:18;;:::i;:::-;414:5169:72;;;8708:30:18;;;;;:::i;8689:3::-;8660:13;;8445:21;;;;;414:5169:72;;;-1:-1:-1;;;414:5169:72;;;;;;;;636:7;414:5169;;;;636:7;414:5169;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;636:7;414:5169;;;;636:7;414:5169;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;4745:3;414:5169;;;;;;;;;;;;636:7;;;;;;;;;;;4764:53;4745:3;4764:53;;;:::i;4745:3::-;4653:34;;636:7;414:5169;;-1:-1:-1;;;636:7:72;;414:5169;;636:7;;;;;;;414:5169;-1:-1:-1;;;636:7:72;414:5169;;636:7;;;;4124:197;;;;414:5169;4124:197;414:5169;4124:197;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;414:5169;;636:7;414:5169;636:7;;;;;;;;;414:5169;636:7;;;;;;414:5169;;636:7;;;;;;;;;;414:5169;;636:7;;;;;;;:::i;:::-;;;;;;;;;;;414:5169;;-1:-1:-1;;;636:7:72;;414:5169;;636:7;;;;;;;414:5169;-1:-1:-1;;;636:7:72;414:5169;;636:7;;;;3960:73;;;;414:5169;3960:73;414:5169;3960:73;;;;;;;:::i;:::-;;;;414:5169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;414:5169:72;;3564:23:1;414:5169:72;3564:23:1;:::i;:::-;414:5169:72;;;3605:11:1;;;;414:5169:72;;719:10:9;;3686:21:1;:62;;;;;414:5169:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;414:5169:72;;;;;12699:23:1;414:5169:72;12699:23:1;:::i;:::-;414:5169:72;12690:46:1;414:5169:72;12690:46:1;;414:5169:72;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;3686:62:1;414:5169:72;;;;4508:18:1;414:5169:72;;;;;719:10:9;414:5169:72;;;;;;;;;;3686:62:1;;;414:5169:72;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1130:50:4;;;:90;;;;414:5169:72;;;;;;;1130:90:4;-1:-1:-1;;;1707:40:1;;;-1:-1:-1;1707:104:1;;;;1130:90:4;1707:156:1;;;;1130:90:4;;;;;1707:156:1;-1:-1:-1;;;937:40:12;;-1:-1:-1;1707:156:1;;;:104;-1:-1:-1;;;1763:48:1;;;-1:-1:-1;1707:104:1;;414:5169:72;;;;;;;;-1:-1:-1;;414:5169:72;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;414:5169:72;;;;:::o;:::-;;;;-1:-1:-1;;;;;414:5169:72;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;414:5169:72;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;:::o;:::-;;;636:7;;414:5169;;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;414:5169:72;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;414:5169:72;;;;;;;924:1;414:5169;;;;-1:-1:-1;;;;;414:5169:72;;;;;;-1:-1:-1;;414:5169:72;;;;:::o;:::-;1717:10:4;414:5169:72;;;;;;1717:10:4;-1:-1:-1;414:5169:72;;;;-1:-1:-1;414:5169:72;:::o;:::-;;636:7;414:5169;;;;;;;;;;;;;;;:::o;:::-;;636:7;414:5169;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;636:7;414:5169;636:7;;414:5169;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;414:5169:72;;;;;;;:::o;1772:169:18:-;;414:5169:72;;1880:19:18;;;;;;;414:5169:72;1880:19:18;;;414:5169:72;;;;;;;;;:::i;:::-;;;1880:19:18;;;;;;;:::i;:::-;414:5169:72;1870:30:18;;414:5169:72;1914:19:18;414:5169:72;;1914:19:18;;;414:5169:72;1914:19:18;;;414:5169:72;;;;;;;;;:::i;1914:19:18:-;414:5169:72;1904:30:18;;1870:64;1772:169;:::o;414:5169:72:-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;636:7::-;;;;;;;;;;414:5169;;;;;;;636:7;:::o;:::-;;;;414:5169;636:7;;;;;;;:::o;:::-;;;;;414:5169;;636:7;;;;;;;;;;;;505:3026:8;414:5169:72;;795:16:8;791:31;;414:5169:72;;;;;:::i;:::-;;;;;;;;;;;;;;;;1357:1:8;414:5169:72;;;;;;;;;1362:1:8;;345:66;;;-1:-1:-1;;;;;414:5169:72;;;;;;1326:39:8;414:5169:72;;;;;1326:39:8;:::i;:::-;1419:2082;414:5169:72;1419:2082:8;;;;;;;;;;;;;;;;;;;;;;1362:1;1419:2082;1362:1;;;1419:2082;;;;3511:13;505:3026;:::o;1419:2082::-;;;-1:-1:-1;;1419:2082:8;;505:3026;:::o;1419:2082::-;-1:-1:-1;1419:2082:8;;;-1:-1:-1;;1419:2082:8;;;-1:-1:-1;;1419:2082:8;;505:3026;:::o;1419:2082::-;;1337:1;1419:2082;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:31;414:5169:72;;;;;;:::i;:::-;810:1:8;414:5169:72;;813:9:8;:::o;414:5169:72:-;;;;;-1:-1:-1;;414:5169:72;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;:::o;10082:248:74:-;10267:28;636:7:72;10082:248:74;10267:28;:::i;:::-;345:66:8;11119:2:74;414:5169:72;;;;;;;-1:-1:-1;;10249:74:74;-1:-1:-1;;;10249:74:74;10267:17:14;;;;10263:103;;10082:248:74;10392:8:14;;;10383:17;;;;10379:103;;10082:248:74;10508:8:14;;10499:17;;;;10495:103;;10082:248:74;10624:7:14;;10615:16;;;;10611:100;;10082:248:74;10737:7:14;;10728:16;;;;10724:100;;10082:248:74;10841:16:14;10850:7;10841:16;;;10837:100;;10082:248:74;10963:7:14;10954:16;;;;10950:66;;10082:248:74;589:1:11;414:5169:72;;731:76:11;627:18;414:5169:72;;;627:18:11;:::i;:::-;659:11;731:76;;;820:280;589:1;;;820:280;10242:81:74;;;;10082:248;:::o;820:280:11:-;-1:-1:-1;;414:5169:72;;636:7;;-1:-1:-1;;;925:93:11;;;;414:5169:72;925:93:11;345:66:8;1068:10:11;;;1064:21;;820:280;;;;;1064:21;1080:5;;10950:66:14;414:5169:72;11000:1:14;414:5169:72;10950:66:14;;;10837:100;345:66:8;;10850:7:14;10921:1;345:66:8;;414:5169:72;;10837:100:14;;;10724;10808:1;345:66:8;;;;414:5169:72;;10724:100:14;;;;10611;10695:1;345:66:8;;;;414:5169:72;;10611:100:14;;;;10495:103;11119:2:74;345:66:8;;;;414:5169:72;;10495:103:14;;;;10379;10465:2;345:66:8;;;;414:5169:72;;10379:103:14;;;;10263;10349:2;;-1:-1:-1;345:66:8;;-1:-1:-1;10263:103:14;;;;10082:248:74;10267:28;636:7:72;10082:248:74;10267:28;:::i;:::-;345:66:8;11235:3:74;414:5169:72;;;;;;;-1:-1:-1;;10249:74:74;-1:-1:-1;;;10249:74:74;10267:17:14;;;;10263:103;;10082:248:74;10392:8:14;;;10383:17;;;;10379:103;;10082:248:74;10508:8:14;;10499:17;;;;10495:103;;10082:248:74;10624:7:14;;10615:16;;;;10611:100;;10082:248:74;10737:7:14;;10728:16;;;;10724:100;;10082:248:74;10841:16:14;11235:3:74;10841:16:14;;;10837:100;;10082:248:74;10963:7:14;10954:16;;;;10950:66;;10082:248:74;589:1:11;414:5169:72;;731:76:11;627:18;414:5169:72;;;627:18:11;:::i;:::-;659:11;731:76;;;820:280;589:1;;;10242:81:74;;;;10082:248;:::o;820:280:11:-;-1:-1:-1;;414:5169:72;;636:7;;-1:-1:-1;;;925:93:11;;;;414:5169:72;925:93:11;345:66:8;1068:10:11;;;1064:21;;820:280;;;;;10950:66:14;414:5169:72;11000:1:14;414:5169:72;10950:66:14;;;10837:100;345:66:8;;11235:3:74;10921:1:14;345:66:8;;414:5169:72;;10837:100:14;;;10724;10808:1;345:66:8;;;;414:5169:72;;10724:100:14;;;;10611;10695:1;345:66:8;;;;414:5169:72;;10611:100:14;;;;10495:103;10581:2;345:66:8;;;;414:5169:72;;10495:103:14;;;;10379;10465:2;345:66:8;;;;414:5169:72;;10379:103:14;;;;10263;10349:2;;-1:-1:-1;345:66:8;;-1:-1:-1;10263:103:14;;;;10336:181:74;10854:3;414:5169:72;1161:21:18;;:::i;:::-;414:5169:72;;;1192:131:18;;1224:5;;;10444:66:74;;10336:181;:::o;1231:3:18:-;1283;1275:11;;1266:21;;;;;;;-1:-1:-1;;636:7:72;;;;;;;1231:3:18;;-1:-1:-1;;;1266:21:18;;;1250:37;;;;:::i;1231:3::-;1197:25;;;;636:7:72;414:5169;-1:-1:-1;414:5169:72;;;;;;1311:1:18;414:5169:72;;1266:21:18;414:5169:72;-1:-1:-1;414:5169:72;;;;;;1311:1:18;414:5169:72;;10336:181:74;1161:21:18;;:::i;:::-;414:5169:72;;;1192:131:18;;1224:5;;;10444:66:74;;10336:181;:::o;1231:3:18:-;1283;1275:11;;1266:21;;;;;;;-1:-1:-1;;636:7:72;;;;;;;1231:3:18;;-1:-1:-1;;;1266:21:18;;;1250:37;;;;:::i;1231:3::-;1197:25;;;;1929:204:1;-1:-1:-1;;;;;414:5169:72;2028:19:1;;414:5169:72;;2045:1:1;414:5169:72;2110:9:1;414:5169:72;;;2045:1:1;414:5169:72;;1929:204:1;:::o;414:5169:72:-;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;2190:219:1;-1:-1:-1;414:5169:72;;;6794:7:1;414:5169:72;;;;;;-1:-1:-1;;;;;414:5169:72;2324:56:1;2332:19;;;2324:56;:::i;:::-;2190:219;:::o;3935:167::-;-1:-1:-1;414:5169:72;;;6794:7:1;414:5169:72;;;;;;13313:53:1;;-1:-1:-1;;;;;414:5169:72;7208:31:1;;13313:53;:::i;:::-;-1:-1:-1;414:5169:72;;;4071:15:1;414:5169:72;;;;;;-1:-1:-1;;;;;414:5169:72;;3935:167:1:o;414:5169:72:-;;;;:::o;:::-;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;5189:276:1;;6484:47;5189:276;;;5311:99;5319:41;719:10:9;;5319:41:1;:::i;5311:99::-;6458:7;;;;;:::i;:::-;6484:47;:::i;:::-;414:5169:72;;;5189:276:1:o;414:5169:72:-;;;-1:-1:-1;;;414:5169:72;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;:::o;7404:261:1:-;;-1:-1:-1;;;;;414:5169:72;;7529:23:1;7404:261;7529:23;:::i;:::-;414:5169:72;;;7570:16:1;;;;:52;;;;;7404:261;7570:87;;;;;7404:261;7562:96;;;7404:261;:::o;7570:87::-;7626:20;;;;;;:::i;:::-;414:5169:72;7626:31:1;7570:87;;;;;:52;414:5169:72;;;-1:-1:-1;414:5169:72;4508:18:1;414:5169:72;;;-1:-1:-1;414:5169:72;;-1:-1:-1;414:5169:72;;;;;-1:-1:-1;414:5169:72;;;7570:52:1;;;;414:5169:72;;;;:::o;:::-;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;11257:1203:1;11346:81;11257:1203;11354:23;;;:::i;:::-;-1:-1:-1;;;;;414:5169:72;;;;;;;;11354:31:1;;11346:81;:::i;:::-;414:5169:72;;;11445:16:1;;;414:5169:72;;2629:18:4;;;;;414:5169:72;;;3811:10:4;414:5169:72;;;2359:13:4;414:5169:72;3784:15:4;414:5169:72;;;;2359:13:4;414:5169:72;;-1:-1:-1;;;414:5169:72;;;;;11647:81:1;414:5169:72;;;;;11553:1:1;414:5169:72;;;3811:10:4;414:5169:72;;:::i;:::-;;636:7;;;;;;;;;;;;;;;;;;;;;414:5169;2919:10:4;;;2915:81;;2625:183;11655:23:1;;;;:::i;:::-;414:5169:72;11655:31:1;11647:81;:::i;:::-;12374:27;2817:179:4;414:5169:72;;;11797:15:1;414:5169:72;;;;;-1:-1:-1;;;;;414:5169:72;;;;;;;;;;;;;;;;;;636:7;;414:5169;;;;;;;;;;;11553:1:1;414:5169:72;;;;;;;;12337:7:1;414:5169:72;;;;;;;;;;;;;12374:27:1;;11257:1203::o;2915:81:4:-;3397:20;;;:::i;:::-;414:5169:72;2817:179:4;414:5169:72;;;3427:12:4;414:5169:72;;;;;;;;;;;;;;;;;;3471:17:4;414:5169:72;;;;2915:81:4;;;2625:183;2724:10;;;2720:88;;2625:183;;11647:81:1;2625:183:4;;;2720:88;4773:22;;;;;:::i;:::-;-1:-1:-1;;636:7:72;;;;;;;;11647:81:1;2359:13:4;;;;414:5169:72;;;;;;4830:17:4;414:5169:72;;;;;;;;4960:28:4;;;4956:323;;2720:88;414:5169:72;;;;;;;;636:7;414:5169;;;5415:12:4;414:5169:72;;;;;;;;;;;636:7;2720:88:4;;;4956:323;414:5169:72;;;5026:12:4;414:5169:72;;;;;;;;;;;;;;;;;5026:12:4;414:5169:72;;;;;;;;;;;;;;;;;4830:17:4;414:5169:72;;;;;;4956:323:4;;;414:5169:72;;;-1:-1:-1;;;414:5169:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;414:5169:72;;;;;;;13925:831:1;;;;;;1702:19:7;;:23;:19;;414:5169:72;;;;;;;;;;636:7;;;;;;;14129:71:1;;;;719:10:9;14129:71:1;;;414:5169:72;;;;;;;;;;;;;;;14129:71:1;;;414:5169:72;;;;;;;;:::i;:::-;14129:71:1;-1:-1:-1;;414:5169:72;;;;14129:71:1;;;;;;;14090:660;-1:-1:-1;14125:573:1;;14317:381;;;414:5169:72;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;14367:18:1;;;414:5169:72;;-1:-1:-1;;;14409:60:1;;414:5169:72;14409:60:1;14129:71;14409:60;;;:::i;14363:321::-;14571:95;;414:5169:72;;;;;14125:573:1;-1:-1:-1;;;;;;414:5169:72;14250:51:1;;-1:-1:-1;414:5169:72;-1:-1:-1;14243:58:1:o;14129:71::-;;;;;;;;;;;;;;;;;:::i;:::-;;;414:5169:72;;;;;-1:-1:-1;;;;;;414:5169:72;;;;;;14129:71:1;;;;414:5169:72;;;;14129:71:1;;;;;14090:660;14728:11;;;;;14735:4;14728:11;:::o", + "linkReferences": {}, + "immutableReferences": { + "57586": [ + { + "start": 12570, + "length": 32 + }, + { + "start": 13152, + "length": 32 + } + ] + } + }, + "methodIdentifiers": { + "_domainCheck(uint256[])": "3827fc6f", + "addressIndexInSignals()": "312033bf", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "bytesInPackedBytes()": "bec47aea", + "getApproved(uint256)": "081812fc", + "isApprovedForAll(address,address)": "e985e9c5", + "mint(uint256[8],uint256[3])": "16eb903b", + "name()": "06fdde03", + "ownerOf(uint256)": "6352211e", + "pubKeyHashIndexInSignals()": "14c52251", + "safeTransferFrom(address,address,uint256)": "42842e0e", + "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde", + "setApprovalForAll(address,bool)": "a22cb465", + "supportsInterface(bytes4)": "01ffc9a7", + "symbol()": "95d89b41", + "tokenByIndex(uint256)": "4f6ccce7", + "tokenDesc(uint256)": "3e098490", + "tokenIDToName(uint256)": "4f79d38a", + "tokenOfOwnerByIndex(address,uint256)": "2f745c59", + "tokenURI(uint256)": "c87b56dd", + "totalSupply()": "18160ddd", + "transferFrom(address,address,uint256)": "23b872dd", + "usernameIndexInSignals()": "c9929db9", + "usernameLengthInSignals()": "61e80718", + "verifier()": "2b7ac3f3" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract Verifier\",\"name\":\"v\",\"type\":\"address\"},{\"internalType\":\"contract DKIMRegistry\",\"name\":\"d\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"headerSignals\",\"type\":\"uint256[]\"}],\"name\":\"_domainCheck\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressIndexInSignals\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bytesInPackedBytes\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[8]\",\"name\":\"proof\",\"type\":\"uint256[8]\"},{\"internalType\":\"uint256[3]\",\"name\":\"signals\",\"type\":\"uint256[3]\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pubKeyHashIndexInSignals\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenDesc\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenIDToName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usernameIndexInSignals\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usernameLengthInSignals\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"contract Verifier\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"mint(uint256[8],uint256[3])\":{\"params\":{\"proof\":\"ZK proof of the circuit - a[2], b[4] and c[2] encoded in series\",\"signals\":\"Public signals of the circuit. First item is pubkey_hash, next 3 are twitter username, the last one is etherum address\"}},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"mint(uint256[8],uint256[3])\":{\"notice\":\"Mint a token proving twitter ownership by verifying proof of email\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ProofOfTwitter.sol\":\"ProofOfTwitter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=../../node_modules/@openzeppelin/contracts/\",\":@openzeppelin/contracts-upgradeable/=../../node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=../../node_modules/@openzeppelin/contracts/\",\":@zk-email/contracts/=../../node_modules/@zk-email/contracts/\",\":ds-test/=../../node_modules/ds-test/src/\",\":forge-std/=../../node_modules/forge-std/src/\"],\"viaIR\":true},\"sources\":{\"../../node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"../../node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005\",\"dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE\"]},\"../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":{\"keccak256\":\"0xa8796bd16014cefb8c26449413981a49c510f92a98d6828494f5fd046223ced3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://63a5e0bb5a7d182e0d0eef87033f78115eab791de3626a929bc98c157087880a\",\"dweb:/ipfs/QmetkXAu2CJKS4qrZtEQPU8okAPwUwa6HL4XYwk8vrYMk8\"]},\"../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34\",\"dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR\"]},\"../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"../../node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"../../node_modules/@openzeppelin/contracts/utils/Base64.sol\":{\"keccak256\":\"0x5f3461639fe20794cfb4db4a6d8477388a15b2e70a018043084b7c4bedfa8136\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77e5309e2cc4cdc3395214edb0ff43ff5a5f7373f5a425383e540f6fab530f96\",\"dweb:/ipfs/QmTV8DZ9knJDa3b5NPBFQqjvTzodyZVjRUg5mx5A99JPLJ\"]},\"../../node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"../../node_modules/@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]},\"../../node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"../../node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"../../node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"../../node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"../../node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"../../node_modules/@zk-email/contracts/DKIMRegistry.sol\":{\"keccak256\":\"0xcde01291e938b43dc1d90d2d2850ccc6414f9110356b778134fdca1dec939f7b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb85337b3d0bd3a2e279dd88baa47dc9b35ae2283754de746fb5fe7592c7ce57\",\"dweb:/ipfs/QmQPY2jyKiJeJxZxUDfcaeMDNtADAqc3JgjuqKRYGjue9u\"]},\"../../node_modules/@zk-email/contracts/interfaces/IDKIMRegistry.sol\":{\"keccak256\":\"0x85ee536632227f79e208f364bb0fa8fdf6c046baa048e158d0817b8d1fce615d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a64d541d2d914ce7e6a13605fbdfb64abfa43dc9f7e2e1865948e2e0ed0f4b6\",\"dweb:/ipfs/Qmc1yJHdkXMdR2nbkFhgCruuYnA76zV6784qbiFaN7xU5V\"]},\"../../node_modules/@zk-email/contracts/utils/StringUtils.sol\":{\"keccak256\":\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f2dfebdf6367dcdd59fbde46d2c4da9b1ec55a033762187ca8fe6bd46b799295\",\"dweb:/ipfs/QmYucgxWFkgSenC89Cjp4LMr9VhvHfDsHJNLm9jaUsZiSQ\"]},\"src/ProofOfTwitter.sol\":{\"keccak256\":\"0x92f7ac64e5a826d17b4867112537dec5092f4760e0d5c3ba58102fe66babe1a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81205d941af0e3895d1e5520f5d8456148e53a07bd3c3d06b669a36176215065\",\"dweb:/ipfs/QmVKv7M3StwDAD3rfpst9m389VkSDYCTccwjab3vmri1yE\"]},\"src/Verifier.sol\":{\"keccak256\":\"0xe742e99a5a7ee7476486c153cf95b269095e756d1482696352cfcecd776b670e\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://8d5692611f48abc431e07d9271557e092a885a904ecb7babfb6c7ae338d4135d\",\"dweb:/ipfs/QmVbLWNDbeUCBRWmdjqVEWedQvLeGjr5Rpawuan1XShM4m\"]},\"src/utils/NFTSVG.sol\":{\"keccak256\":\"0xfd9a2ea7b1989c394d9bcb8c970922422506ece7fcf9dcdec4153a0e5e4d6a50\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://373ece745a86d36a09348aecb12a84d9377862edcfeaeda9aafccf1da97ca60c\",\"dweb:/ipfs/QmbZio2J4dHy8nEkNGq1NumGYpnoBDsfJLNSUBGLTi9Yji\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.8.21+commit.d9974bed" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract Verifier", + "name": "v", + "type": "address" + }, + { + "internalType": "contract DKIMRegistry", + "name": "d", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "approved", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256", + "indexed": true + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "operator", + "type": "address", + "indexed": true + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "ApprovalForAll", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256", + "indexed": true + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "headerSignals", + "type": "uint256[]" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "_domainCheck", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "addressIndexInSignals", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "approve" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "bytesInPackedBytes", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256[8]", + "name": "proof", + "type": "uint256[8]" + }, + { + "internalType": "uint256[3]", + "name": "signals", + "type": "uint256[3]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pubKeyHashIndexInSignals", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "safeTransferFrom" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "safeTransferFrom" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setApprovalForAll" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "tokenDesc", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "tokenIDToName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferFrom" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "usernameIndexInSignals", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "usernameLengthInSignals", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "verifier", + "outputs": [ + { + "internalType": "contract Verifier", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "isApprovedForAll(address,address)": { + "details": "See {IERC721-isApprovedForAll}." + }, + "mint(uint256[8],uint256[3])": { + "params": { + "proof": "ZK proof of the circuit - a[2], b[4] and c[2] encoded in series", + "signals": "Public signals of the circuit. First item is pubkey_hash, next 3 are twitter username, the last one is etherum address" + } + }, + "name()": { + "details": "See {IERC721Metadata-name}." + }, + "ownerOf(uint256)": { + "details": "See {IERC721-ownerOf}." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "symbol()": { + "details": "See {IERC721Metadata-symbol}." + }, + "tokenByIndex(uint256)": { + "details": "See {IERC721Enumerable-tokenByIndex}." + }, + "tokenOfOwnerByIndex(address,uint256)": { + "details": "See {IERC721Enumerable-tokenOfOwnerByIndex}." + }, + "tokenURI(uint256)": { + "details": "See {IERC721Metadata-tokenURI}." + }, + "totalSupply()": { + "details": "See {IERC721Enumerable-totalSupply}." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "mint(uint256[8],uint256[3])": { + "notice": "Mint a token proving twitter ownership by verifying proof of email" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=../../node_modules/@openzeppelin/contracts/", + "@openzeppelin/contracts-upgradeable/=../../node_modules/@openzeppelin/contracts-upgradeable/", + "@openzeppelin/contracts/=../../node_modules/@openzeppelin/contracts/", + "@zk-email/contracts/=../../node_modules/@zk-email/contracts/", + "ds-test/=../../node_modules/ds-test/src/", + "forge-std/=../../node_modules/forge-std/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/ProofOfTwitter.sol": "ProofOfTwitter" + }, + "libraries": {}, + "viaIR": true + }, + "sources": { + "../../node_modules/@openzeppelin/contracts/access/Ownable.sol": { + "keccak256": "0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218", + "urls": [ + "bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32", + "dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol": { + "keccak256": "0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff", + "urls": [ + "bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005", + "dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol": { + "keccak256": "0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266", + "urls": [ + "bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4", + "dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "keccak256": "0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da", + "urls": [ + "bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708", + "dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol": { + "keccak256": "0xa8796bd16014cefb8c26449413981a49c510f92a98d6828494f5fd046223ced3", + "urls": [ + "bzz-raw://63a5e0bb5a7d182e0d0eef87033f78115eab791de3626a929bc98c157087880a", + "dweb:/ipfs/QmetkXAu2CJKS4qrZtEQPU8okAPwUwa6HL4XYwk8vrYMk8" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol": { + "keccak256": "0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf", + "urls": [ + "bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34", + "dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { + "keccak256": "0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9", + "urls": [ + "bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146", + "dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/utils/Address.sol": { + "keccak256": "0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa", + "urls": [ + "bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931", + "dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/utils/Base64.sol": { + "keccak256": "0x5f3461639fe20794cfb4db4a6d8477388a15b2e70a018043084b7c4bedfa8136", + "urls": [ + "bzz-raw://77e5309e2cc4cdc3395214edb0ff43ff5a5f7373f5a425383e540f6fab530f96", + "dweb:/ipfs/QmTV8DZ9knJDa3b5NPBFQqjvTzodyZVjRUg5mx5A99JPLJ" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/utils/Counters.sol": { + "keccak256": "0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1", + "urls": [ + "bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee", + "dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/utils/Strings.sol": { + "keccak256": "0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0", + "urls": [ + "bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f", + "dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { + "keccak256": "0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b", + "urls": [ + "bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d", + "dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "keccak256": "0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1", + "urls": [ + "bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f", + "dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/utils/math/Math.sol": { + "keccak256": "0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3", + "urls": [ + "bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c", + "dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS" + ], + "license": "MIT" + }, + "../../node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": { + "keccak256": "0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc", + "urls": [ + "bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7", + "dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6" + ], + "license": "MIT" + }, + "../../node_modules/@zk-email/contracts/DKIMRegistry.sol": { + "keccak256": "0xcde01291e938b43dc1d90d2d2850ccc6414f9110356b778134fdca1dec939f7b", + "urls": [ + "bzz-raw://eb85337b3d0bd3a2e279dd88baa47dc9b35ae2283754de746fb5fe7592c7ce57", + "dweb:/ipfs/QmQPY2jyKiJeJxZxUDfcaeMDNtADAqc3JgjuqKRYGjue9u" + ], + "license": "MIT" + }, + "../../node_modules/@zk-email/contracts/interfaces/IDKIMRegistry.sol": { + "keccak256": "0x85ee536632227f79e208f364bb0fa8fdf6c046baa048e158d0817b8d1fce615d", + "urls": [ + "bzz-raw://4a64d541d2d914ce7e6a13605fbdfb64abfa43dc9f7e2e1865948e2e0ed0f4b6", + "dweb:/ipfs/Qmc1yJHdkXMdR2nbkFhgCruuYnA76zV6784qbiFaN7xU5V" + ], + "license": "MIT" + }, + "../../node_modules/@zk-email/contracts/utils/StringUtils.sol": { + "keccak256": "0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18", + "urls": [ + "bzz-raw://f2dfebdf6367dcdd59fbde46d2c4da9b1ec55a033762187ca8fe6bd46b799295", + "dweb:/ipfs/QmYucgxWFkgSenC89Cjp4LMr9VhvHfDsHJNLm9jaUsZiSQ" + ], + "license": "MIT" + }, + "src/ProofOfTwitter.sol": { + "keccak256": "0x92f7ac64e5a826d17b4867112537dec5092f4760e0d5c3ba58102fe66babe1a7", + "urls": [ + "bzz-raw://81205d941af0e3895d1e5520f5d8456148e53a07bd3c3d06b669a36176215065", + "dweb:/ipfs/QmVKv7M3StwDAD3rfpst9m389VkSDYCTccwjab3vmri1yE" + ], + "license": "MIT" + }, + "src/Verifier.sol": { + "keccak256": "0xe742e99a5a7ee7476486c153cf95b269095e756d1482696352cfcecd776b670e", + "urls": [ + "bzz-raw://8d5692611f48abc431e07d9271557e092a885a904ecb7babfb6c7ae338d4135d", + "dweb:/ipfs/QmVbLWNDbeUCBRWmdjqVEWedQvLeGjr5Rpawuan1XShM4m" + ], + "license": "GPL-3.0" + }, + "src/utils/NFTSVG.sol": { + "keccak256": "0xfd9a2ea7b1989c394d9bcb8c970922422506ece7fcf9dcdec4153a0e5e4d6a50", + "urls": [ + "bzz-raw://373ece745a86d36a09348aecb12a84d9377862edcfeaeda9aafccf1da97ca60c", + "dweb:/ipfs/QmbZio2J4dHy8nEkNGq1NumGYpnoBDsfJLNSUBGLTi9Yji" + ], + "license": "GPL-2.0-or-later" + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "src/ProofOfTwitter.sol", + "id": 57884, + "exportedSymbols": { + "Address": [ + 95273 + ], + "Base64": [ + 513 + ], + "Context": [ + 59953 + ], + "Counters": [ + 587 + ], + "DKIMRegistry": [ + 978 + ], + "ERC165": [ + 95297 + ], + "ERC721": [ + 60880 + ], + "ERC721Enumerable": [ + 466 + ], + "IDKIMRegistry": [ + 61894 + ], + "IERC165": [ + 96574 + ], + "IERC721": [ + 94898 + ], + "IERC721Enumerable": [ + 60911 + ], + "IERC721Metadata": [ + 94943 + ], + "IERC721Receiver": [ + 94916 + ], + "Math": [ + 61777 + ], + "NFTSVG": [ + 59501 + ], + "Ownable": [ + 112 + ], + "ProofOfTwitter": [ + 57883 + ], + "SignedMath": [ + 61882 + ], + "StringUtils": [ + 2033 + ], + "Strings": [ + 816 + ], + "Verifier": [ + 58920 + ] + }, + "nodeType": "SourceUnit", + "src": "32:5552:72", + "nodes": [ + { + "id": 57541, + "nodeType": "PragmaDirective", + "src": "32:23:72", + "nodes": [], + "literals": [ + "solidity", + "^", + "0.8", + ".0" + ] + }, + { + "id": 57542, + "nodeType": "ImportDirective", + "src": "57:78:72", + "nodes": [], + "absolutePath": "../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol", + "file": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol", + "nameLocation": "-1:-1:-1", + "scope": 57884, + "sourceUnit": 467, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 57543, + "nodeType": "ImportDirective", + "src": "136:51:72", + "nodes": [], + "absolutePath": "../../node_modules/@openzeppelin/contracts/utils/Strings.sol", + "file": "@openzeppelin/contracts/utils/Strings.sol", + "nameLocation": "-1:-1:-1", + "scope": 57884, + "sourceUnit": 817, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 57544, + "nodeType": "ImportDirective", + "src": "188:52:72", + "nodes": [], + "absolutePath": "../../node_modules/@openzeppelin/contracts/utils/Counters.sol", + "file": "@openzeppelin/contracts/utils/Counters.sol", + "nameLocation": "-1:-1:-1", + "scope": 57884, + "sourceUnit": 588, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 57545, + "nodeType": "ImportDirective", + "src": "241:46:72", + "nodes": [], + "absolutePath": "../../node_modules/@zk-email/contracts/DKIMRegistry.sol", + "file": "@zk-email/contracts/DKIMRegistry.sol", + "nameLocation": "-1:-1:-1", + "scope": 57884, + "sourceUnit": 979, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 57546, + "nodeType": "ImportDirective", + "src": "288:51:72", + "nodes": [], + "absolutePath": "../../node_modules/@zk-email/contracts/utils/StringUtils.sol", + "file": "@zk-email/contracts/utils/StringUtils.sol", + "nameLocation": "-1:-1:-1", + "scope": 57884, + "sourceUnit": 2034, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 57547, + "nodeType": "ImportDirective", + "src": "340:28:72", + "nodes": [], + "absolutePath": "src/utils/NFTSVG.sol", + "file": "./utils/NFTSVG.sol", + "nameLocation": "-1:-1:-1", + "scope": 57884, + "sourceUnit": 59502, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 57549, + "nodeType": "ImportDirective", + "src": "369:42:72", + "nodes": [], + "absolutePath": "src/Verifier.sol", + "file": "./Verifier.sol", + "nameLocation": "-1:-1:-1", + "scope": 57884, + "sourceUnit": 58921, + "symbolAliases": [ + { + "foreign": { + "id": 57548, + "name": "Verifier", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58920, + "src": "378:8:72", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 57883, + "nodeType": "ContractDefinition", + "src": "414:5169:72", + "nodes": [ + { + "id": 57555, + "nodeType": "UsingForDirective", + "src": "464:36:72", + "nodes": [], + "global": false, + "libraryName": { + "id": 57552, + "name": "Counters", + "nameLocations": [ + "470:8:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 587, + "src": "470:8:72" + }, + "typeName": { + "id": 57554, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 57553, + "name": "Counters.Counter", + "nameLocations": [ + "483:8:72", + "492:7:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 519, + "src": "483:16:72" + }, + "referencedDeclaration": 519, + "src": "483:16:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Counter_$519_storage_ptr", + "typeString": "struct Counters.Counter" + } + } + }, + { + "id": 57557, + "nodeType": "UsingForDirective", + "src": "505:24:72", + "nodes": [], + "global": false, + "libraryName": { + "id": 57556, + "name": "StringUtils", + "nameLocations": [ + "511:11:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2033, + "src": "511:11:72" + } + }, + { + "id": 57559, + "nodeType": "UsingForDirective", + "src": "534:19:72", + "nodes": [], + "global": false, + "libraryName": { + "id": 57558, + "name": "NFTSVG", + "nameLocations": [ + "540:6:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 59501, + "src": "540:6:72" + } + }, + { + "id": 57562, + "nodeType": "VariableDeclaration", + "src": "559:46:72", + "nodes": [], + "constant": true, + "functionSelector": "bec47aea", + "mutability": "constant", + "name": "bytesInPackedBytes", + "nameLocation": "582:18:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + }, + "typeName": { + "id": 57560, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "559:6:72", + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + }, + "value": { + "hexValue": "3331", + "id": 57561, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "603:2:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_31_by_1", + "typeString": "int_const 31" + }, + "value": "31" + }, + "visibility": "public" + }, + { + "id": 57565, + "nodeType": "VariableDeclaration", + "src": "611:32:72", + "nodes": [], + "constant": true, + "mutability": "constant", + "name": "domain", + "nameLocation": "627:6:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 57563, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "611:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": { + "hexValue": "782e636f6d", + "id": 57564, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "636:7:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bbcc9f0af825b951a41a390086b09f7d8b4c4434d5315255b2ab6ffee1e8c781", + "typeString": "literal_string \"x.com\"" + }, + "value": "x.com" + }, + "visibility": "internal" + }, + { + "id": 57568, + "nodeType": "VariableDeclaration", + "src": "654:51:72", + "nodes": [], + "constant": true, + "functionSelector": "14c52251", + "mutability": "constant", + "name": "pubKeyHashIndexInSignals", + "nameLocation": "677:24:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 57566, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "654:6:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "hexValue": "30", + "id": 57567, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "704:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "public" + }, + { + "id": 57571, + "nodeType": "VariableDeclaration", + "src": "761:49:72", + "nodes": [], + "constant": true, + "functionSelector": "c9929db9", + "mutability": "constant", + "name": "usernameIndexInSignals", + "nameLocation": "784:22:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 57569, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "761:6:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "hexValue": "31", + "id": 57570, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "809:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "public" + }, + { + "id": 57574, + "nodeType": "VariableDeclaration", + "src": "875:50:72", + "nodes": [], + "constant": true, + "functionSelector": "61e80718", + "mutability": "constant", + "name": "usernameLengthInSignals", + "nameLocation": "898:23:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 57572, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "875:6:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "hexValue": "31", + "id": 57573, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "924:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "public" + }, + { + "id": 57577, + "nodeType": "VariableDeclaration", + "src": "985:48:72", + "nodes": [], + "constant": true, + "functionSelector": "312033bf", + "mutability": "constant", + "name": "addressIndexInSignals", + "nameLocation": "1008:21:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 57575, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "985:6:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "hexValue": "32", + "id": 57576, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1032:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "visibility": "public" + }, + { + "id": 57580, + "nodeType": "VariableDeclaration", + "src": "1086:37:72", + "nodes": [], + "constant": false, + "mutability": "mutable", + "name": "tokenCounter", + "nameLocation": "1111:12:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Counter_$519_storage", + "typeString": "struct Counters.Counter" + }, + "typeName": { + "id": 57579, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 57578, + "name": "Counters.Counter", + "nameLocations": [ + "1086:8:72", + "1095:7:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 519, + "src": "1086:16:72" + }, + "referencedDeclaration": 519, + "src": "1086:16:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Counter_$519_storage_ptr", + "typeString": "struct Counters.Counter" + } + }, + "visibility": "private" + }, + { + "id": 57583, + "nodeType": "VariableDeclaration", + "src": "1129:25:72", + "nodes": [], + "constant": false, + "mutability": "mutable", + "name": "dkimRegistry", + "nameLocation": "1142:12:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DKIMRegistry_$978", + "typeString": "contract DKIMRegistry" + }, + "typeName": { + "id": 57582, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 57581, + "name": "DKIMRegistry", + "nameLocations": [ + "1129:12:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 978, + "src": "1129:12:72" + }, + "referencedDeclaration": 978, + "src": "1129:12:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DKIMRegistry_$978", + "typeString": "contract DKIMRegistry" + } + }, + "visibility": "internal" + }, + { + "id": 57586, + "nodeType": "VariableDeclaration", + "src": "1160:34:72", + "nodes": [], + "constant": false, + "functionSelector": "2b7ac3f3", + "mutability": "immutable", + "name": "verifier", + "nameLocation": "1186:8:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Verifier_$58920", + "typeString": "contract Verifier" + }, + "typeName": { + "id": 57585, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 57584, + "name": "Verifier", + "nameLocations": [ + "1160:8:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 58920, + "src": "1160:8:72" + }, + "referencedDeclaration": 58920, + "src": "1160:8:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Verifier_$58920", + "typeString": "contract Verifier" + } + }, + "visibility": "public" + }, + { + "id": 57590, + "nodeType": "VariableDeclaration", + "src": "1201:47:72", + "nodes": [], + "constant": false, + "functionSelector": "4f79d38a", + "mutability": "mutable", + "name": "tokenIDToName", + "nameLocation": "1235:13:72", + "scope": 57883, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$", + "typeString": "mapping(uint256 => string)" + }, + "typeName": { + "id": 57589, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 57587, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1209:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "1201:26:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$", + "typeString": "mapping(uint256 => string)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 57588, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1220:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + "visibility": "public" + }, + { + "id": 57612, + "nodeType": "FunctionDefinition", + "src": "1255:136:72", + "nodes": [], + "body": { + "id": 57611, + "nodeType": "Block", + "src": "1336:55:72", + "nodes": [], + "statements": [ + { + "expression": { + "id": 57605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 57603, + "name": "verifier", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57586, + "src": "1346:8:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Verifier_$58920", + "typeString": "contract Verifier" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 57604, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57593, + "src": "1357:1:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Verifier_$58920", + "typeString": "contract Verifier" + } + }, + "src": "1346:12:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Verifier_$58920", + "typeString": "contract Verifier" + } + }, + "id": 57606, + "nodeType": "ExpressionStatement", + "src": "1346:12:72" + }, + { + "expression": { + "id": 57609, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 57607, + "name": "dkimRegistry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57583, + "src": "1368:12:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DKIMRegistry_$978", + "typeString": "contract DKIMRegistry" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 57608, + "name": "d", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57596, + "src": "1383:1:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DKIMRegistry_$978", + "typeString": "contract DKIMRegistry" + } + }, + "src": "1368:16:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DKIMRegistry_$978", + "typeString": "contract DKIMRegistry" + } + }, + "id": 57610, + "nodeType": "ExpressionStatement", + "src": "1368:16:72" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "hexValue": "5665726966696564456d61696c", + "id": 57599, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1302:15:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3890e0baa6354bb2fa2add401239fea2b136a96e58aa28e9091a4bc05e55235", + "typeString": "literal_string \"VerifiedEmail\"" + }, + "value": "VerifiedEmail" + }, + { + "hexValue": "5665726966696564456d61696c", + "id": 57600, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1319:15:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3890e0baa6354bb2fa2add401239fea2b136a96e58aa28e9091a4bc05e55235", + "typeString": "literal_string \"VerifiedEmail\"" + }, + "value": "VerifiedEmail" + } + ], + "id": 57601, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 57598, + "name": "ERC721", + "nameLocations": [ + "1295:6:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 60880, + "src": "1295:6:72" + }, + "nodeType": "ModifierInvocation", + "src": "1295:40:72" + } + ], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 57597, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 57593, + "mutability": "mutable", + "name": "v", + "nameLocation": "1276:1:72", + "nodeType": "VariableDeclaration", + "scope": 57612, + "src": "1267:10:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Verifier_$58920", + "typeString": "contract Verifier" + }, + "typeName": { + "id": 57592, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 57591, + "name": "Verifier", + "nameLocations": [ + "1267:8:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 58920, + "src": "1267:8:72" + }, + "referencedDeclaration": 58920, + "src": "1267:8:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Verifier_$58920", + "typeString": "contract Verifier" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 57596, + "mutability": "mutable", + "name": "d", + "nameLocation": "1292:1:72", + "nodeType": "VariableDeclaration", + "scope": 57612, + "src": "1279:14:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DKIMRegistry_$978", + "typeString": "contract DKIMRegistry" + }, + "typeName": { + "id": 57595, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 57594, + "name": "DKIMRegistry", + "nameLocations": [ + "1279:12:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 978, + "src": "1279:12:72" + }, + "referencedDeclaration": 978, + "src": "1279:12:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DKIMRegistry_$978", + "typeString": "contract DKIMRegistry" + } + }, + "visibility": "internal" + } + ], + "src": "1266:28:72" + }, + "returnParameters": { + "id": 57602, + "nodeType": "ParameterList", + "parameters": [], + "src": "1336:0:72" + }, + "scope": 57883, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 57650, + "nodeType": "FunctionDefinition", + "src": "1397:386:72", + "nodes": [], + "body": { + "id": 57649, + "nodeType": "Block", + "src": "1469:314:72", + "nodes": [], + "statements": [ + { + "assignments": [ + 57620 + ], + "declarations": [ + { + "constant": false, + "id": 57620, + "mutability": "mutable", + "name": "twitter_username", + "nameLocation": "1493:16:72", + "nodeType": "VariableDeclaration", + "scope": 57649, + "src": "1479:30:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 57619, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1479:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 57624, + "initialValue": { + "baseExpression": { + "id": 57621, + "name": "tokenIDToName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57590, + "src": "1512:13:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$", + "typeString": "mapping(uint256 => string storage ref)" + } + }, + "id": 57623, + "indexExpression": { + "id": 57622, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57614, + "src": "1526:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1512:22:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1479:55:72" + }, + { + "assignments": [ + 57626 + ], + "declarations": [ + { + "constant": false, + "id": 57626, + "mutability": "mutable", + "name": "address_owner", + "nameLocation": "1552:13:72", + "nodeType": "VariableDeclaration", + "scope": 57649, + "src": "1544:21:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 57625, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1544:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 57630, + "initialValue": { + "arguments": [ + { + "id": 57628, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57614, + "src": "1576:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 57627, + "name": "ownerOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60099, + "src": "1568:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$", + "typeString": "function (uint256) view returns (address)" + } + }, + "id": 57629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1568:16:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1544:40:72" + }, + { + "assignments": [ + 57632 + ], + "declarations": [ + { + "constant": false, + "id": 57632, + "mutability": "mutable", + "name": "result", + "nameLocation": "1608:6:72", + "nodeType": "VariableDeclaration", + "scope": 57649, + "src": "1594:20:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 57631, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1594:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 57646, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "5477697474657220757365726e616d65", + "id": 57637, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1654:18:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_b710be07c8e0e550c57accc1ffbfd57c470c38586c6cd238937f3ee016dd849f", + "typeString": "literal_string \"Twitter username\"" + }, + "value": "Twitter username" + }, + { + "id": 57638, + "name": "twitter_username", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57620, + "src": "1674:16:72", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "hexValue": "6973206f776e6564206279", + "id": 57639, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1692:13:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4264db0ab46f591acbd3bf4daf17ae58cd63a67a92e5f66d61e3606a35f34043", + "typeString": "literal_string \"is owned by\"" + }, + "value": "is owned by" + }, + { + "arguments": [ + { + "id": 57642, + "name": "address_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57626, + "src": "1728:13:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 57640, + "name": "StringUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2033, + "src": "1707:11:72", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StringUtils_$2033_$", + "typeString": "type(library StringUtils)" + } + }, + "id": 57641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1719:8:72", + "memberName": "toString", + "nodeType": "MemberAccess", + "referencedDeclaration": 1160, + "src": "1707:20:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_string_memory_ptr_$", + "typeString": "function (address) pure returns (string memory)" + } + }, + "id": 57643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1707:35:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_b710be07c8e0e550c57accc1ffbfd57c470c38586c6cd238937f3ee016dd849f", + "typeString": "literal_string \"Twitter username\"" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_stringliteral_4264db0ab46f591acbd3bf4daf17ae58cd63a67a92e5f66d61e3606a35f34043", + "typeString": "literal_string \"is owned by\"" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 57635, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1637:3:72", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 57636, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1641:12:72", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "1637:16:72", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 57644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1637:106:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 57634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1617:6:72", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 57633, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1617:6:72", + "typeDescriptions": {} + } + }, + "id": 57645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1617:136:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1594:159:72" + }, + { + "expression": { + "id": 57647, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57632, + "src": "1770:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 57618, + "id": 57648, + "nodeType": "Return", + "src": "1763:13:72" + } + ] + }, + "functionSelector": "3e098490", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tokenDesc", + "nameLocation": "1406:9:72", + "parameters": { + "id": 57615, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 57614, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "1424:7:72", + "nodeType": "VariableDeclaration", + "scope": 57650, + "src": "1416:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 57613, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1416:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1415:17:72" + }, + "returnParameters": { + "id": 57618, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 57617, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 57650, + "src": "1454:13:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 57616, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1454:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1453:15:72" + }, + "scope": 57883, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 57678, + "nodeType": "FunctionDefinition", + "src": "1789:257:72", + "nodes": [], + "body": { + "id": 57677, + "nodeType": "Block", + "src": "1869:177:72", + "nodes": [], + "statements": [ + { + "assignments": [ + 57659 + ], + "declarations": [ + { + "constant": false, + "id": 57659, + "mutability": "mutable", + "name": "username", + "nameLocation": "1893:8:72", + "nodeType": "VariableDeclaration", + "scope": 57677, + "src": "1879:22:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 57658, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1879:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 57663, + "initialValue": { + "baseExpression": { + "id": 57660, + "name": "tokenIDToName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57590, + "src": "1904:13:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$", + "typeString": "mapping(uint256 => string storage ref)" + } + }, + "id": 57662, + "indexExpression": { + "id": 57661, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57652, + "src": "1918:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1904:22:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1879:47:72" + }, + { + "assignments": [ + 57665 + ], + "declarations": [ + { + "constant": false, + "id": 57665, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1944:5:72", + "nodeType": "VariableDeclaration", + "scope": 57677, + "src": "1936:13:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 57664, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1936:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 57669, + "initialValue": { + "arguments": [ + { + "id": 57667, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57652, + "src": "1960:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 57666, + "name": "ownerOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60099, + "src": "1952:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$", + "typeString": "function (uint256) view returns (address)" + } + }, + "id": 57668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1952:16:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1936:32:72" + }, + { + "expression": { + "arguments": [ + { + "id": 57672, + "name": "username", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57659, + "src": "2014:8:72", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 57673, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57652, + "src": "2024:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 57674, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57665, + "src": "2033:5:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 57670, + "name": "NFTSVG", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59501, + "src": "1985:6:72", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_NFTSVG_$59501_$", + "typeString": "type(library NFTSVG)" + } + }, + "id": 57671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1992:21:72", + "memberName": "constructAndReturnSVG", + "nodeType": "MemberAccess", + "referencedDeclaration": 59500, + "src": "1985:28:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_address_$returns$_t_string_memory_ptr_$", + "typeString": "function (string memory,uint256,address) pure returns (string memory)" + } + }, + "id": 57675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1985:54:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 57657, + "id": 57676, + "nodeType": "Return", + "src": "1978:61:72" + } + ] + }, + "baseFunctions": [ + 60158 + ], + "functionSelector": "c87b56dd", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tokenURI", + "nameLocation": "1798:8:72", + "overrides": { + "id": 57654, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1836:8:72" + }, + "parameters": { + "id": 57653, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 57652, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "1815:7:72", + "nodeType": "VariableDeclaration", + "scope": 57678, + "src": "1807:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 57651, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1807:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1806:17:72" + }, + "returnParameters": { + "id": 57657, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 57656, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 57678, + "src": "1854:13:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 57655, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1854:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1853:15:72" + }, + "scope": 57883, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 57722, + "nodeType": "FunctionDefinition", + "src": "2052:498:72", + "nodes": [], + "body": { + "id": 57721, + "nodeType": "Block", + "src": "2133:417:72", + "nodes": [], + "statements": [ + { + "assignments": [ + 57687 + ], + "declarations": [ + { + "constant": false, + "id": 57687, + "mutability": "mutable", + "name": "senderBytes", + "nameLocation": "2157:11:72", + "nodeType": "VariableDeclaration", + "scope": 57721, + "src": "2143:25:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 57686, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2143:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 57694, + "initialValue": { + "arguments": [ + { + "id": 57690, + "name": "headerSignals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57681, + "src": "2210:13:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "hexValue": "3138", + "id": 57691, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2225:2:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + { + "id": 57692, + "name": "bytesInPackedBytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57562, + "src": "2229:18:72", + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "expression": { + "id": 57688, + "name": "StringUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2033, + "src": "2171:11:72", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StringUtils_$2033_$", + "typeString": "type(library StringUtils)" + } + }, + "id": 57689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2183:26:72", + "memberName": "convertPackedBytesToString", + "nodeType": "MemberAccess", + "referencedDeclaration": 1512, + "src": "2171:38:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256) pure returns (string memory)" + } + }, + "id": 57693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2171:77:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2143:105:72" + }, + { + "assignments": [ + 57700 + ], + "declarations": [ + { + "constant": false, + "id": 57700, + "mutability": "mutable", + "name": "domainStrings", + "nameLocation": "2275:13:72", + "nodeType": "VariableDeclaration", + "scope": 57721, + "src": "2258:30:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_memory_ptr_$2_memory_ptr", + "typeString": "string[2]" + }, + "typeName": { + "baseType": { + "id": 57698, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2258:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "id": 57699, + "length": { + "hexValue": "32", + "id": 57697, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2265:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "ArrayTypeName", + "src": "2258:9:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_storage_$2_storage_ptr", + "typeString": "string[2]" + } + }, + "visibility": "internal" + } + ], + "id": 57704, + "initialValue": { + "components": [ + { + "hexValue": "76657269667940782e636f6d", + "id": 57701, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2292:14:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_024f98e196dd7afdb5e09b1ff87790c96f4bd6e9f36550aa13f5f6e5d41368f4", + "typeString": "literal_string \"verify@x.com\"" + }, + "value": "verify@x.com" + }, + { + "hexValue": "696e666f40782e636f6d", + "id": 57702, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2308:12:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1091938491e94d6485ad1196c4f25ab3f77dc8b376744dd080835cc0fa47b51d", + "typeString": "literal_string \"info@x.com\"" + }, + "value": "info@x.com" + } + ], + "id": 57703, + "isConstant": false, + "isInlineArray": true, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2291:30:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_memory_ptr_$2_memory_ptr", + "typeString": "string memory[2] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2258:63:72" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 57719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 57707, + "name": "senderBytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57687, + "src": "2371:11:72", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "baseExpression": { + "id": 57708, + "name": "domainStrings", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57700, + "src": "2384:13:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_memory_ptr_$2_memory_ptr", + "typeString": "string memory[2] memory" + } + }, + "id": 57710, + "indexExpression": { + "hexValue": "30", + "id": 57709, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2398:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2384:16:72", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 57705, + "name": "StringUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2033, + "src": "2350:11:72", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StringUtils_$2033_$", + "typeString": "type(library StringUtils)" + } + }, + "id": 57706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2362:8:72", + "memberName": "stringEq", + "nodeType": "MemberAccess", + "referencedDeclaration": 1184, + "src": "2350:20:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$", + "typeString": "function (string memory,string memory) pure returns (bool)" + } + }, + "id": 57711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2350:51:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "arguments": [ + { + "id": 57714, + "name": "senderBytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57687, + "src": "2426:11:72", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "baseExpression": { + "id": 57715, + "name": "domainStrings", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57700, + "src": "2439:13:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_memory_ptr_$2_memory_ptr", + "typeString": "string memory[2] memory" + } + }, + "id": 57717, + "indexExpression": { + "hexValue": "31", + "id": 57716, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2453:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2439:16:72", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 57712, + "name": "StringUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2033, + "src": "2405:11:72", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StringUtils_$2033_$", + "typeString": "type(library StringUtils)" + } + }, + "id": 57713, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2417:8:72", + "memberName": "stringEq", + "nodeType": "MemberAccess", + "referencedDeclaration": 1184, + "src": "2405:20:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$", + "typeString": "function (string memory,string memory) pure returns (bool)" + } + }, + "id": 57718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2405:51:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2350:106:72", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 57685, + "id": 57720, + "nodeType": "Return", + "src": "2331:125:72" + } + ] + }, + "functionSelector": "3827fc6f", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_domainCheck", + "nameLocation": "2061:12:72", + "parameters": { + "id": 57682, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 57681, + "mutability": "mutable", + "name": "headerSignals", + "nameLocation": "2091:13:72", + "nodeType": "VariableDeclaration", + "scope": 57722, + "src": "2074:30:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 57679, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2074:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 57680, + "nodeType": "ArrayTypeName", + "src": "2074:9:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2073:32:72" + }, + "returnParameters": { + "id": 57685, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 57684, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 57722, + "src": "2127:4:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 57683, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2127:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2126:6:72" + }, + "scope": 57883, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 57862, + "nodeType": "FunctionDefinition", + "src": "2858:2479:72", + "nodes": [], + "body": { + "id": 57861, + "nodeType": "Block", + "src": "2931:2406:72", + "nodes": [], + "statements": [ + { + "assignments": [ + 57735 + ], + "declarations": [ + { + "constant": false, + "id": 57735, + "mutability": "mutable", + "name": "dkimPublicKeyHashInCircuit", + "nameLocation": "3871:26:72", + "nodeType": "VariableDeclaration", + "scope": 57861, + "src": "3863:34:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 57734, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3863:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 57742, + "initialValue": { + "arguments": [ + { + "baseExpression": { + "id": 57738, + "name": "signals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57731, + "src": "3908:7:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + }, + "id": 57740, + "indexExpression": { + "id": 57739, + "name": "pubKeyHashIndexInSignals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57568, + "src": "3916:24:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3908:33:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 57737, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3900:7:72", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 57736, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3900:7:72", + "typeDescriptions": {} + } + }, + "id": 57741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3900:42:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3863:79:72" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 57746, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57565, + "src": "3998:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 57747, + "name": "dkimPublicKeyHashInCircuit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57735, + "src": "4006:26:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 57744, + "name": "dkimRegistry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57583, + "src": "3960:12:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DKIMRegistry_$978", + "typeString": "contract DKIMRegistry" + } + }, + "id": 57745, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3973:24:72", + "memberName": "isDKIMPublicKeyHashValid", + "nodeType": "MemberAccess", + "referencedDeclaration": 897, + "src": "3960:37:72", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (string memory,bytes32) view external returns (bool)" + } + }, + "id": 57748, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3960:73:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "696e76616c696420646b696d207369676e6174757265", + "id": 57749, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4035:24:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8f3f20502be616c9cbd9b87adc9979e33b5d0a133c1147462fcfa98f0f023af3", + "typeString": "literal_string \"invalid dkim signature\"" + }, + "value": "invalid dkim signature" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_8f3f20502be616c9cbd9b87adc9979e33b5d0a133c1147462fcfa98f0f023af3", + "typeString": "literal_string \"invalid dkim signature\"" + } + ], + "id": 57743, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3952:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 57750, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3952:108:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 57751, + "nodeType": "ExpressionStatement", + "src": "3952:108:72" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "components": [ + { + "baseExpression": { + "id": 57755, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57727, + "src": "4163:5:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 57757, + "indexExpression": { + "hexValue": "30", + "id": 57756, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4169:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4163:8:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 57758, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57727, + "src": "4173:5:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 57760, + "indexExpression": { + "hexValue": "31", + "id": 57759, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4179:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4173:8:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 57761, + "isConstant": false, + "isInlineArray": true, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4162:20:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr", + "typeString": "uint256[2] memory" + } + }, + { + "components": [ + { + "components": [ + { + "baseExpression": { + "id": 57762, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57727, + "src": "4202:5:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 57764, + "indexExpression": { + "hexValue": "32", + "id": 57763, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4208:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4202:8:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 57765, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57727, + "src": "4212:5:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 57767, + "indexExpression": { + "hexValue": "33", + "id": 57766, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4218:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4212:8:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 57768, + "isConstant": false, + "isInlineArray": true, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4201:20:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr", + "typeString": "uint256[2] memory" + } + }, + { + "components": [ + { + "baseExpression": { + "id": 57769, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57727, + "src": "4224:5:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 57771, + "indexExpression": { + "hexValue": "34", + "id": 57770, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4230:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4224:8:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 57772, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57727, + "src": "4234:5:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 57774, + "indexExpression": { + "hexValue": "35", + "id": 57773, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4240:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4234:8:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 57775, + "isConstant": false, + "isInlineArray": true, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4223:20:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr", + "typeString": "uint256[2] memory" + } + } + ], + "id": 57776, + "isConstant": false, + "isInlineArray": true, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4200:44:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_array$_t_uint256_$2_memory_ptr_$2_memory_ptr", + "typeString": "uint256[2] memory[2] memory" + } + }, + { + "components": [ + { + "baseExpression": { + "id": 57777, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57727, + "src": "4263:5:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 57779, + "indexExpression": { + "hexValue": "36", + "id": 57778, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4269:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_6_by_1", + "typeString": "int_const 6" + }, + "value": "6" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4263:8:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 57780, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57727, + "src": "4273:5:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 57782, + "indexExpression": { + "hexValue": "37", + "id": 57781, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4279:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4273:8:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 57783, + "isConstant": false, + "isInlineArray": true, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4262:20:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr", + "typeString": "uint256[2] memory" + } + }, + { + "id": 57784, + "name": "signals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57731, + "src": "4300:7:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr", + "typeString": "uint256[2] memory" + }, + { + "typeIdentifier": "t_array$_t_array$_t_uint256_$2_memory_ptr_$2_memory_ptr", + "typeString": "uint256[2] memory[2] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr", + "typeString": "uint256[2] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + ], + "expression": { + "id": 57753, + "name": "verifier", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57586, + "src": "4124:8:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Verifier_$58920", + "typeString": "contract Verifier" + } + }, + "id": 57754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4133:11:72", + "memberName": "verifyProof", + "nodeType": "MemberAccess", + "referencedDeclaration": 58919, + "src": "4124:20:72", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_array$_t_uint256_$2_memory_ptr_$_t_array$_t_array$_t_uint256_$2_memory_ptr_$2_memory_ptr_$_t_array$_t_uint256_$2_memory_ptr_$_t_array$_t_uint256_$3_memory_ptr_$returns$_t_bool_$", + "typeString": "function (uint256[2] memory,uint256[2] memory[2] memory,uint256[2] memory,uint256[3] memory) view external returns (bool)" + } + }, + "id": 57785, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4124:197:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642050726f6f66", + "id": 57786, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4335:15:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d95d531e7ef85c3e7467db7c164ce0d8b7b23d0a5a166a2fc91faa2aab5ab486", + "typeString": "literal_string \"Invalid Proof\"" + }, + "value": "Invalid Proof" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d95d531e7ef85c3e7467db7c164ce0d8b7b23d0a5a166a2fc91faa2aab5ab486", + "typeString": "literal_string \"Invalid Proof\"" + } + ], + "id": 57752, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4103:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 57787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4103:257:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 57788, + "nodeType": "ExpressionStatement", + "src": "4103:257:72" + }, + { + "assignments": [ + 57793 + ], + "declarations": [ + { + "constant": false, + "id": 57793, + "mutability": "mutable", + "name": "usernamePack", + "nameLocation": "4585:12:72", + "nodeType": "VariableDeclaration", + "scope": 57861, + "src": "4568:29:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 57791, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4568:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 57792, + "nodeType": "ArrayTypeName", + "src": "4568:9:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 57799, + "initialValue": { + "arguments": [ + { + "id": 57797, + "name": "usernameLengthInSignals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57574, + "src": "4614:23:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 57796, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "4600:13:72", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 57794, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4604:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 57795, + "nodeType": "ArrayTypeName", + "src": "4604:9:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 57798, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4600:38:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4568:70:72" + }, + { + "body": { + "id": 57823, + "nodeType": "Block", + "src": "4750:78:72", + "statements": [ + { + "expression": { + "id": 57821, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 57813, + "name": "usernamePack", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57793, + "src": "4764:12:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 57817, + "indexExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 57816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 57814, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57801, + "src": "4777:1:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 57815, + "name": "usernameIndexInSignals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57571, + "src": "4781:22:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "4777:26:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4764:40:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 57818, + "name": "signals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57731, + "src": "4807:7:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + }, + "id": 57820, + "indexExpression": { + "id": 57819, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57801, + "src": "4815:1:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4807:10:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4764:53:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 57822, + "nodeType": "ExpressionStatement", + "src": "4764:53:72" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 57809, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 57804, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57801, + "src": "4689:1:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 57807, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 57805, + "name": "usernameIndexInSignals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57571, + "src": "4694:22:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 57806, + "name": "usernameLengthInSignals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57574, + "src": "4719:23:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "4694:48:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "id": 57808, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4693:50:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "4689:54:72", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 57824, + "initializationExpression": { + "assignments": [ + 57801 + ], + "declarations": [ + { + "constant": false, + "id": 57801, + "mutability": "mutable", + "name": "i", + "nameLocation": "4661:1:72", + "nodeType": "VariableDeclaration", + "scope": 57824, + "src": "4653:9:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 57800, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4653:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 57803, + "initialValue": { + "id": 57802, + "name": "usernameIndexInSignals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57571, + "src": "4665:22:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4653:34:72" + }, + "loopExpression": { + "expression": { + "id": 57811, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "4745:3:72", + "subExpression": { + "id": 57810, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57801, + "src": "4745:1:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 57812, + "nodeType": "ExpressionStatement", + "src": "4745:3:72" + }, + "nodeType": "ForStatement", + "src": "4648:180:72" + }, + { + "assignments": [ + 57826 + ], + "declarations": [ + { + "constant": false, + "id": 57826, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "4877:7:72", + "nodeType": "VariableDeclaration", + "scope": 57861, + "src": "4869:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 57825, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4869:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 57832, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 57831, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 57827, + "name": "tokenCounter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57580, + "src": "4887:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Counter_$519_storage", + "typeString": "struct Counters.Counter storage ref" + } + }, + "id": 57828, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4900:7:72", + "memberName": "current", + "nodeType": "MemberAccess", + "referencedDeclaration": 531, + "src": "4887:20:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$519_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_Counter_$519_storage_ptr_$", + "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)" + } + }, + "id": 57829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4887:22:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 57830, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4912:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "4887:26:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4869:44:72" + }, + { + "assignments": [ + 57834 + ], + "declarations": [ + { + "constant": false, + "id": 57834, + "mutability": "mutable", + "name": "messageBytes", + "nameLocation": "5034:12:72", + "nodeType": "VariableDeclaration", + "scope": 57861, + "src": "5020:26:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 57833, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5020:6:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 57843, + "initialValue": { + "arguments": [ + { + "id": 57837, + "name": "usernamePack", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57793, + "src": "5101:12:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 57840, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 57838, + "name": "bytesInPackedBytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57562, + "src": "5127:18:72", + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 57839, + "name": "usernameLengthInSignals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57574, + "src": "5148:23:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "5127:44:72", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 57841, + "name": "bytesInPackedBytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57562, + "src": "5185:18:72", + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "expression": { + "id": 57835, + "name": "StringUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2033, + "src": "5049:11:72", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StringUtils_$2033_$", + "typeString": "type(library StringUtils)" + } + }, + "id": 57836, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5061:26:72", + "memberName": "convertPackedBytesToString", + "nodeType": "MemberAccess", + "referencedDeclaration": 1512, + "src": "5049:38:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256) pure returns (string memory)" + } + }, + "id": 57842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5049:164:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5020:193:72" + }, + { + "expression": { + "id": 57848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 57844, + "name": "tokenIDToName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57590, + "src": "5223:13:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$", + "typeString": "mapping(uint256 => string storage ref)" + } + }, + "id": 57846, + "indexExpression": { + "id": 57845, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57826, + "src": "5237:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5223:22:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 57847, + "name": "messageBytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57834, + "src": "5248:12:72", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "5223:37:72", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 57849, + "nodeType": "ExpressionStatement", + "src": "5223:37:72" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 57851, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5276:3:72", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 57852, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5280:6:72", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5276:10:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 57853, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57826, + "src": "5288:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 57850, + "name": "_mint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60554, + "src": "5270:5:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 57854, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5270:26:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 57855, + "nodeType": "ExpressionStatement", + "src": "5270:26:72" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 57856, + "name": "tokenCounter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57580, + "src": "5306:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Counter_$519_storage", + "typeString": "struct Counters.Counter storage ref" + } + }, + "id": 57858, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5319:9:72", + "memberName": "increment", + "nodeType": "MemberAccess", + "referencedDeclaration": 545, + "src": "5306:22:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$519_storage_ptr_$returns$__$attached_to$_t_struct$_Counter_$519_storage_ptr_$", + "typeString": "function (struct Counters.Counter storage pointer)" + } + }, + "id": 57859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5306:24:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 57860, + "nodeType": "ExpressionStatement", + "src": "5306:24:72" + } + ] + }, + "documentation": { + "id": 57723, + "nodeType": "StructuredDocumentation", + "src": "2556:297:72", + "text": "Mint a token proving twitter ownership by verifying proof of email\n @param proof ZK proof of the circuit - a[2], b[4] and c[2] encoded in series\n @param signals Public signals of the circuit. First item is pubkey_hash, next 3 are twitter username, the last one is etherum address" + }, + "functionSelector": "16eb903b", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mint", + "nameLocation": "2867:4:72", + "parameters": { + "id": 57732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 57727, + "mutability": "mutable", + "name": "proof", + "nameLocation": "2890:5:72", + "nodeType": "VariableDeclaration", + "scope": 57862, + "src": "2872:23:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8]" + }, + "typeName": { + "baseType": { + "id": 57724, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2872:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 57726, + "length": { + "hexValue": "38", + "id": 57725, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2880:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "nodeType": "ArrayTypeName", + "src": "2872:10:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_storage_ptr", + "typeString": "uint256[8]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 57731, + "mutability": "mutable", + "name": "signals", + "nameLocation": "2915:7:72", + "nodeType": "VariableDeclaration", + "scope": 57862, + "src": "2897:25:72", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3]" + }, + "typeName": { + "baseType": { + "id": 57728, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2897:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 57730, + "length": { + "hexValue": "33", + "id": 57729, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2905:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "nodeType": "ArrayTypeName", + "src": "2897:10:72", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_storage_ptr", + "typeString": "uint256[3]" + } + }, + "visibility": "internal" + } + ], + "src": "2871:52:72" + }, + "returnParameters": { + "id": 57733, + "nodeType": "ParameterList", + "parameters": [], + "src": "2931:0:72" + }, + "scope": 57883, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 57882, + "nodeType": "FunctionDefinition", + "src": "5343:238:72", + "nodes": [], + "body": { + "id": 57881, + "nodeType": "Block", + "src": "5455:126:72", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 57877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 57872, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 57864, + "src": "5486:4:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 57875, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5502:1:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 57874, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5494:7:72", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 57873, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5494:7:72", + "typeDescriptions": {} + } + }, + "id": 57876, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5494:10:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5486:18:72", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "43616e6e6f74207472616e73666572202d205665726966696564456d61696c20697320736f756c626f756e64", + "id": 57878, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5518:46:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9e7d94d81068c2fa63c29c68a8eb490bafc1f164cedc6a91e4ba09cdfb90920a", + "typeString": "literal_string \"Cannot transfer - VerifiedEmail is soulbound\"" + }, + "value": "Cannot transfer - VerifiedEmail is soulbound" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9e7d94d81068c2fa63c29c68a8eb490bafc1f164cedc6a91e4ba09cdfb90920a", + "typeString": "literal_string \"Cannot transfer - VerifiedEmail is soulbound\"" + } + ], + "id": 57871, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5465:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 57879, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5465:109:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 57880, + "nodeType": "ExpressionStatement", + "src": "5465:109:72" + } + ] + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_beforeTokenTransfer", + "nameLocation": "5352:20:72", + "parameters": { + "id": 57869, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 57864, + "mutability": "mutable", + "name": "from", + "nameLocation": "5390:4:72", + "nodeType": "VariableDeclaration", + "scope": 57882, + "src": "5382:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 57863, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5382:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 57866, + "mutability": "mutable", + "name": "to", + "nameLocation": "5412:2:72", + "nodeType": "VariableDeclaration", + "scope": 57882, + "src": "5404:10:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 57865, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5404:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 57868, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "5432:7:72", + "nodeType": "VariableDeclaration", + "scope": 57882, + "src": "5424:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 57867, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5424:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5372:73:72" + }, + "returnParameters": { + "id": 57870, + "nodeType": "ParameterList", + "parameters": [], + "src": "5455:0:72" + }, + "scope": 57883, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 57550, + "name": "ERC721Enumerable", + "nameLocations": [ + "441:16:72" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 466, + "src": "441:16:72" + }, + "id": 57551, + "nodeType": "InheritanceSpecifier", + "src": "441:16:72" + } + ], + "canonicalName": "ProofOfTwitter", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 57883, + 466, + 60911, + 60880, + 94943, + 94898, + 95297, + 96574, + 59953 + ], + "name": "ProofOfTwitter", + "nameLocation": "423:14:72", + "scope": 57884, + "usedErrors": [], + "usedEvents": [ + 94797, + 94806, + 94815 + ] + } + ], + "license": "MIT" + }, + "id": 72 +} \ No newline at end of file diff --git a/packages/app/src/components/Button.tsx b/packages/app/src/components/Button.tsx new file mode 100644 index 0000000..e55d88d --- /dev/null +++ b/packages/app/src/components/Button.tsx @@ -0,0 +1,27 @@ +import styled from "styled-components"; + +export const Button = styled.button` + padding: 0 14px; + border-radius: 4px; + background: #8272e4; + border: none; + display: flex; + align-items: center; + justify-content: center; + font-weight: 600; + font-size: 0.9rem; + letter-spacing: -0.02em; + color: #fff; + cursor: pointer; + height: 48px; + width: 100%; + min-width: 32px; + transition: all 0.2s ease-in-out; + &:hover { + background: #9b8df2; + } + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +`; diff --git a/packages/app/src/components/DragAndDropTextBox.tsx b/packages/app/src/components/DragAndDropTextBox.tsx new file mode 100644 index 0000000..9f51137 --- /dev/null +++ b/packages/app/src/components/DragAndDropTextBox.tsx @@ -0,0 +1,44 @@ +import React from "react"; +import styled from 'styled-components'; +import { useDragAndDrop } from '../hooks/useDragAndDrop'; + +const DragAndDropTextBoxWrapper = styled.div` + display: flex; + flex-direction: column; + align-items: center; + border: 2px dashed #ccc; + padding: 20px; +`; + +type Props = { + onFileDrop: (file: File) => void; +}; + +const DragAndDropTextBox: React.FC = ({onFileDrop}) => { + const { + dragging, + handleDragEnter, + handleDragLeave, + handleDragOver, + handleDrop, + handleDragEnd, + } = useDragAndDrop(); + + return ( + handleDrop(e, onFileDrop)} + > + {dragging ? ( +
Drop here
+ ) : ( +
Drop .eml file here
+ )} +
+ ); +}; + +export default DragAndDropTextBox; diff --git a/packages/app/src/components/LabeledTextArea.tsx b/packages/app/src/components/LabeledTextArea.tsx new file mode 100644 index 0000000..66112c6 --- /dev/null +++ b/packages/app/src/components/LabeledTextArea.tsx @@ -0,0 +1,99 @@ +import _ from "lodash"; +import React, { CSSProperties } from "react"; +import styled from "styled-components"; +import { Col } from "./Layout"; + +export const LabeledTextArea: React.FC<{ + style?: CSSProperties; + className?: string; + label: string; + value: string; + warning?: string; + warningColor?: string; + disabled?: boolean; + disabledReason?: string; + secret?: boolean; + onChange?: React.ChangeEventHandler; +}> = ({ + style, + warning, + warningColor, + disabled, + disabledReason, + label, + value, + onChange, + className, + secret, +}) => { + return ( + + + {warning && ( + + {warning} + + )} +