diff --git a/docs/guides/2_integrating_aligned_into_your_application.md b/docs/guides/2_integrating_aligned_into_your_application.md index abbe46cc1..8b0a279b8 100644 --- a/docs/guides/2_integrating_aligned_into_your_application.md +++ b/docs/guides/2_integrating_aligned_into_your_application.md @@ -116,12 +116,13 @@ The proof submission and verification can be done either with the SDK or by usin #### Using the SDK -To submit a proof using the SDK, you can use the `submit` function, and then you can use the `verify_proof_onchain` function to check if the proof was correctly verified in Aligned. - +To submit a proof using the SDK, you can use the `submit_and_wait_verification` function. +This function submits the proof to aligned and waits for it to be verified in Aligned. +Alternatively you can call `submit` if you dont want to wait for proof verification. The following code is an example of how to submit a proof using the SDK: ```rust -use aligned_sdk::sdk::{submit, get_next_nonce}; +use aligned_sdk::sdk::{submit_and_wait_verification, get_next_nonce}; use aligned_sdk::types::{ProvingSystemId, VerificationData}; use ethers::prelude::*; @@ -147,13 +148,33 @@ async fn submit_proof_to_aligned( .await .map_err(|e| anyhow::anyhow!("Failed to get next nonce: {:?}", e))?; - submit(BATCHER_URL, &verification_data, wallet, nonce).await - .map_err(|e| anyhow::anyhow!("Failed to submit proof: {:?}", e)) + match submit_and_wait_verification( + BATCHER_URL, + &rpc_url, + Chain::Holesky, + &verification_data, + wallet.clone(), + nonce, + BATCHER_PAYMENTS_ADDRESS + ) + + submit_and_wait_verification( + BATCHER_URL, + RPC_URL, + Chain::Holesky, + &verification_data, + wallet, + nonce, + BATCHER_CONTRACT_ADDRESS + ).await.map_err(|e| anyhow::anyhow!("Failed to submit proof: {:?}", e)) } #[tokio::main] async fn main() { let wallet = // Initialize wallet + + let wallet = wallet.with_chain_id(17000u64) + let proof = // Generate or obtain proof match submit_proof_to_aligned(proof, wallet).await { @@ -163,41 +184,6 @@ async fn main() { } ``` -The following code is an example of how to verify the proof was correctly verified in Aligned using the SDK: - -```rust -use aligned_sdk::sdk::verify_proof_onchain; -use aligned_sdk::types::{AlignedVerificationData, Chain}; -use ethers::prelude::*; -use tokio::time::{sleep, Duration}; - -async fn wait_for_proof_verification( - aligned_verification_data: AlignedVerificationData, - rpc_url: String, -) -> Result<(), anyhow::Error> { - for _ in 0..10 { - if verify_proof_onchain(aligned_verification_data.clone(), Chain::Holesky, rpc_url.as_str()).await.is_ok_and(|r| r) { - println!("Proof verified successfully."); - return Ok(()); - } - println!("Proof not verified yet. Waiting 10 seconds before checking again..."); - sleep(Duration::from_secs(10)).await; - } - anyhow::bail!("Proof verification failed") -} - -#[tokio::main] -async fn main() { - let aligned_verification_data = // Obtain aligned verification data - let rpc_url = "https://ethereum-holesky-rpc.publicnode.com".to_string(); - - match wait_for_proof_verification(aligned_verification_data, rpc_url).await { - Ok(_) => println!("Proof verified"), - Err(err) => println!("Error: {:?}", err), - } -} -``` - You can find an example of the proof submission and verification in the [ZKQuiz Program](../../examples/zkquiz/quiz/script/src/main.rs). This example generates a proof, instantiates a wallet to submit the proof, and then submits the proof to Aligned for verification. It then waits for the proof to be verified in Aligned. diff --git a/examples/zkquiz/Makefile b/examples/zkquiz/Makefile index 2846ebc1d..45dfc5324 100644 --- a/examples/zkquiz/Makefile +++ b/examples/zkquiz/Makefile @@ -1,7 +1,7 @@ deploy_verifier: @. ./contracts/.env && . ./contracts/deploy.sh -CONTRACT_ADDRESS=0x8dB9e6f1393c3486F30181d606312ec632189621 +CONTRACT_ADDRESS=0xA828f1463074d26FB761c662F80194f5dB2d31D0 RPC_URL=https://ethereum-holesky-rpc.publicnode.com VERIFICATION_DATA=./aligned_verification_data/0a1fab5df88a71e48633cbdeedc8d1a234b790d15a8a2fd04cd6a03c1e05b5ef_212.json diff --git a/examples/zkquiz/contracts/.env.example b/examples/zkquiz/contracts/.env.example index 54eb1f76b..0e0482ae6 100644 --- a/examples/zkquiz/contracts/.env.example +++ b/examples/zkquiz/contracts/.env.example @@ -1,4 +1,5 @@ RPC_URL= PRIVATE_KEY= ALIGNED_SERVICE_MANAGER_ADDRESS=# 0x58F280BeBE9B34c9939C3C39e0890C81f163B623 for Holesky +BATCHER_PAYMENT_SERVICE_ADDRESS=# 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ETHERSCAN_API_KEY= diff --git a/examples/zkquiz/contracts/deploy.sh b/examples/zkquiz/contracts/deploy.sh index dfb8ae93f..062ec2a0c 100755 --- a/examples/zkquiz/contracts/deploy.sh +++ b/examples/zkquiz/contracts/deploy.sh @@ -11,6 +11,11 @@ if [ -z "$ALIGNED_SERVICE_MANAGER_ADDRESS" ]; then exit 1 fi +if [ -z "$BATCHER_PAYMENT_SERVICE_ADDRESS" ]; then + echo "BATCHER_PAYMENT_SERVICE_ADDRESS is not set. Please set it in .env" + exit 1 +fi + if [ -z "$RPC_URL" ]; then echo "RPC_URL is not set. Please set it in .env" exit 1 @@ -24,8 +29,8 @@ fi forge install forge script script/Deployer.s.sol \ - "$ALIGNED_SERVICE_MANAGER_ADDRESS" \ + "$ALIGNED_SERVICE_MANAGER_ADDRESS" "$BATCHER_PAYMENT_SERVICE_ADDRESS" \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" \ --broadcast \ - --sig "run(address _alignedServiceManager)" + --sig "run(address _alignedServiceManager, address _paymentService)" diff --git a/examples/zkquiz/contracts/script/Deployer.s.sol b/examples/zkquiz/contracts/script/Deployer.s.sol index 189c88b0d..aabc9433b 100644 --- a/examples/zkquiz/contracts/script/Deployer.s.sol +++ b/examples/zkquiz/contracts/script/Deployer.s.sol @@ -7,10 +7,16 @@ import {VerifierContract} from "../src/VerifierContract.sol"; contract CounterScript is Script { function setUp() public {} - function run(address _targetContract) external returns (address) { + function run( + address _alignedServiceManager, + address _paymentService + ) external returns (address) { vm.startBroadcast(); - VerifierContract verifyBatchInclusionCaller = new VerifierContract(_targetContract); + VerifierContract verifyBatchInclusionCaller = new VerifierContract( + _alignedServiceManager, + _paymentService + ); vm.stopBroadcast(); diff --git a/examples/zkquiz/contracts/src/VerifierContract.sol b/examples/zkquiz/contracts/src/VerifierContract.sol index 12adf8e24..aa9900887 100644 --- a/examples/zkquiz/contracts/src/VerifierContract.sol +++ b/examples/zkquiz/contracts/src/VerifierContract.sol @@ -8,14 +8,20 @@ contract VerifierContract is ERC721URIStorage { uint256 private _nextTokenId; address public alignedServiceManager; + address public paymentServiceAddr; - bytes32 public elfCommitment = 0x35dd40ab04e180712996495caec915b8a7c488433acbb50c4d8d912cb55bf1f1; + bytes32 public elfCommitment = + 0x35dd40ab04e180712996495caec915b8a7c488433acbb50c4d8d912cb55bf1f1; // map to check if proof has already been submitted mapping(bytes32 => bool) public mintedProofs; - constructor(address _alignedServiceManager) ERC721("Aligned Layer ZK Quiz", "AZKQ") { + constructor( + address _alignedServiceManager, + address _paymentServiceAddr + ) ERC721("Aligned Layer ZK Quiz", "AZKQ") { alignedServiceManager = _alignedServiceManager; + paymentServiceAddr = _paymentServiceAddr; } function verifyBatchInclusion( @@ -27,25 +33,41 @@ contract VerifierContract is ERC721URIStorage { bytes memory merkleProof, uint256 verificationDataBatchIndex ) external returns (uint256) { - require(elfCommitment == provingSystemAuxDataCommitment, "ELF does not match"); - require(address(proofGeneratorAddr) == msg.sender, "proofGeneratorAddr does not match"); - - bytes32 fullHash = keccak256(abi.encodePacked(proofCommitment, - pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr)); - require(!mintedProofs[fullHash], "proof already minted"); + require( + elfCommitment == provingSystemAuxDataCommitment, + "ELF does not match" + ); + require( + address(proofGeneratorAddr) == msg.sender, + "proofGeneratorAddr does not match" + ); - (bool callWasSuccessfull, bytes memory proofIsIncluded) = alignedServiceManager.staticcall( - abi.encodeWithSignature( - "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)", + bytes32 fullHash = keccak256( + abi.encodePacked( proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, - proofGeneratorAddr, - batchMerkleRoot, - merkleProof, - verificationDataBatchIndex + proofGeneratorAddr ) ); + require(!mintedProofs[fullHash], "proof already minted"); + + ( + bool callWasSuccessfull, + bytes memory proofIsIncluded + ) = alignedServiceManager.staticcall( + abi.encodeWithSignature( + "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)", + proofCommitment, + pubInputCommitment, + provingSystemAuxDataCommitment, + proofGeneratorAddr, + batchMerkleRoot, + merkleProof, + verificationDataBatchIndex, + paymentServiceAddr + ) + ); require(callWasSuccessfull, "static_call failed"); @@ -56,15 +78,19 @@ contract VerifierContract is ERC721URIStorage { uint256 tokenId = _nextTokenId++; _mint(msg.sender, tokenId); - _setTokenURI(tokenId, "ipfs://QmUKviny9x2oQUegyJFFBAUU2q5rvu5CsPzrUaBSDukpHQ"); + _setTokenURI( + tokenId, + "ipfs://QmUKviny9x2oQUegyJFFBAUU2q5rvu5CsPzrUaBSDukpHQ" + ); return tokenId; } - function tokenURI(uint256 tokenId) public override view virtual returns (string memory) { + function tokenURI( + uint256 tokenId + ) public view virtual override returns (string memory) { _requireOwned(tokenId); return "ipfs://QmUKviny9x2oQUegyJFFBAUU2q5rvu5CsPzrUaBSDukpHQ"; } - } diff --git a/examples/zkquiz/quiz/program/Cargo.toml b/examples/zkquiz/quiz/program/Cargo.toml index e00b6ba28..410e66548 100644 --- a/examples/zkquiz/quiz/program/Cargo.toml +++ b/examples/zkquiz/quiz/program/Cargo.toml @@ -6,4 +6,6 @@ edition = "2021" [dependencies] sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git", rev = "v1.0.8-testnet" } -tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", branch = "patch-v2.0.2", features = ["sha3"] } +tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", branch = "patch-v2.0.2", features = [ + "sha3", +] } diff --git a/examples/zkquiz/quiz/script/Cargo.lock b/examples/zkquiz/quiz/script/Cargo.lock index 1e9927bc8..b018fae39 100644 --- a/examples/zkquiz/quiz/script/Cargo.lock +++ b/examples/zkquiz/quiz/script/Cargo.lock @@ -73,8 +73,9 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.4.0#325aef8c3f54ec596b4733956a8ac487d5535fc3" +source = "git+https://github.com/yetanotherco/aligned_layer?rev=6908110aaa04ec3107f15ab8a8bb2603e7bbead9#6908110aaa04ec3107f15ab8a8bb2603e7bbead9" dependencies = [ + "ciborium", "ethers 2.0.14 (git+https://github.com/yetanotherco/ethers-rs.git?tag=v2.0.15-fix-reconnections)", "futures-util", "hex", @@ -82,6 +83,7 @@ dependencies = [ "log", "serde", "serde_json", + "serde_repr", "sha3", "tokio", "tokio-tungstenite 0.23.1", @@ -822,6 +824,33 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "cipher" version = "0.4.4" @@ -2304,6 +2333,16 @@ dependencies = [ "tracing", ] +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + [[package]] name = "halo2" version = "0.1.0-beta.2" @@ -4902,6 +4941,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "serde_spanned" version = "0.6.7" diff --git a/examples/zkquiz/quiz/script/Cargo.toml b/examples/zkquiz/quiz/script/Cargo.toml index 0a0ed50da..6aa3eb935 100644 --- a/examples/zkquiz/quiz/script/Cargo.toml +++ b/examples/zkquiz/quiz/script/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] sp1-sdk = { git = "https://github.com/succinctlabs/sp1.git", rev = "v1.0.1" } -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.4.0" } +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", rev = "6908110aaa04ec3107f15ab8a8bb2603e7bbead9" } ethers = { tag = "v2.0.15-fix-reconnections", features = [ "ws", "rustls", diff --git a/examples/zkquiz/quiz/script/VerifierContract.json b/examples/zkquiz/quiz/script/VerifierContract.json index 4e8e374d6..9dca47857 100644 --- a/examples/zkquiz/quiz/script/VerifierContract.json +++ b/examples/zkquiz/quiz/script/VerifierContract.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_alignedServiceManager","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"alignedServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"elfCommitment","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"mintedProofs","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"ownerOf","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenURI","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"BatchMetadataUpdate","inputs":[{"name":"_fromTokenId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_toTokenId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MetadataUpdate","inputs":[{"name":"_tokenId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC721IncorrectOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InsufficientApproval","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721NonexistentToken","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60806040527f35dd40ab04e180712996495caec915b8a7c488433acbb50c4d8d912cb55bf1f16009553480156200003557600080fd5b50604051620016bd380380620016bd8339810160408190526200005891620000f5565b6040518060400160405280601581526020017f416c69676e6564204c61796572205a4b205175697a000000000000000000000081525060405180604001604052806004815260200163415a4b5160e01b8152508160009081620000bc9190620001cc565b506001620000cb8282620001cc565b5050600880546001600160a01b0319166001600160a01b0393909316929092179091555062000298565b6000602082840312156200010857600080fd5b81516001600160a01b03811681146200012057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200015257607f821691505b6020821081036200017357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c757600081815260208120601f850160051c81016020861015620001a25750805b601f850160051c820191505b81811015620001c357828155600101620001ae565b5050505b505050565b81516001600160401b03811115620001e857620001e862000127565b6200020081620001f984546200013d565b8462000179565b602080601f8311600181146200023857600084156200021f5750858301515b600019600386901b1c1916600185901b178555620001c3565b600085815260208120601f198616915b82811015620002695788860151825594840194600190910190840162000248565b5085821015620002885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61141580620002a86000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063c87b56dd11610071578063c87b56dd1461021e578063dd3df4bd14610231578063e985e9c514610254578063f19cd88214610267578063fa534dc01461027a57600080fd5b806370a08231146101dd57806395d89b41146101f0578063a22cb465146101f8578063b88d4fde1461020b57600080fd5b80632212d607116100de5780632212d6071461018d57806323b872dd146101a457806342842e0e146101b75780636352211e146101ca57600080fd5b806301ffc9a71461011057806306fdde0314610138578063081812fc1461014d578063095ea7b314610178575b600080fd5b61012361011e366004610e02565b61028d565b60405190151581526020015b60405180910390f35b6101406102b8565b60405161012f9190610e76565b61016061015b366004610e89565b61034a565b6040516001600160a01b03909116815260200161012f565b61018b610186366004610ebe565b610373565b005b61019660095481565b60405190815260200161012f565b61018b6101b2366004610ee8565b610382565b61018b6101c5366004610ee8565b610412565b6101606101d8366004610e89565b610432565b6101966101eb366004610f24565b61043d565b610140610485565b61018b610206366004610f4d565b610494565b61018b610219366004611027565b61049f565b61014061022c366004610e89565b6104b6565b61012361023f366004610e89565b600a6020526000908152604090205460ff1681565b61012361026236600461108f565b6104e1565b600854610160906001600160a01b031681565b6101966102883660046110c2565b61050f565b60006001600160e01b03198216632483248360e11b14806102b257506102b28261080d565b92915050565b6060600080546102c790611154565b80601f01602080910402602001604051908101604052809291908181526020018280546102f390611154565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b5050505050905090565b60006103558261085d565b506000828152600460205260409020546001600160a01b03166102b2565b61037e828233610896565b5050565b6001600160a01b0382166103b157604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103be8383336108a3565b9050836001600160a01b0316816001600160a01b03161461040c576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103a8565b50505050565b61042d8383836040518060200160405280600081525061049f565b505050565b60006102b28261085d565b60006001600160a01b038216610469576040516322718ad960e21b8152600060048201526024016103a8565b506001600160a01b031660009081526003602052604090205490565b6060600180546102c790611154565b61037e33838361099c565b6104aa848484610382565b61040c84848484610a3b565b60606104c18261085d565b506040518060600160405280603581526020016113ab6035913992915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600085600954146105575760405162461bcd60e51b815260206004820152601260248201527108a988c40c8decae640dcdee840dac2e8c6d60731b60448201526064016103a8565b606085901c33146105b45760405162461bcd60e51b815260206004820152602160248201527f70726f6f6647656e657261746f724164647220646f6573206e6f74206d6174636044820152600d60fb1b60648201526084016103a8565b6040805160208082018b90528183018a9052606082018990526bffffffffffffffffffffffff198816608083015282516074818403018152609490920183528151918101919091206000818152600a9092529190205460ff16156106515760405162461bcd60e51b81526020600482015260146024820152731c1c9bdbd988185b1c9958591e481b5a5b9d195960621b60448201526064016103a8565b60085460405160009182916001600160a01b0390911690610682908d908d908d908d908d908d908d9060240161118e565b60408051601f198184030181529181526020820180516001600160e01b03166303e94d3760e61b179052516106b791906111e2565b600060405180830381855afa9150503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b50915091508161073e5760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b60448201526064016103a8565b60008180602001905181019061075491906111fe565b9050806107a35760405162461bcd60e51b815260206004820152601b60248201527f70726f6f66206e6f7420696e636c7564656420696e206261746368000000000060448201526064016103a8565b6000848152600a60205260408120805460ff191660011790556007805490826107cb8361121b565b9190505590506107db3382610b64565b6107fd816040518060600160405280603581526020016113ab60359139610bc9565b9c9b505050505050505050505050565b60006001600160e01b031982166380ac58cd60e01b148061083e57506001600160e01b03198216635b5e139f60e01b145b806102b257506301ffc9a760e01b6001600160e01b03198316146102b2565b6000818152600260205260408120546001600160a01b0316806102b257604051637e27328960e01b8152600481018490526024016103a8565b61042d8383836001610c19565b6000828152600260205260408120546001600160a01b03908116908316156108d0576108d0818486610d1f565b6001600160a01b0381161561090e576108ed600085600080610c19565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b0385161561093d576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b0382166109ce57604051630b61174360e31b81526001600160a01b03831660048201526024016103a8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561040c57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610a7d903390889087908790600401611242565b6020604051808303816000875af1925050508015610ab8575060408051601f3d908101601f19168201909252610ab59181019061127f565b60015b610b21573d808015610ae6576040519150601f19603f3d011682016040523d82523d6000602084013e610aeb565b606091505b508051600003610b1957604051633250574960e11b81526001600160a01b03851660048201526024016103a8565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b5d57604051633250574960e11b81526001600160a01b03851660048201526024016103a8565b5050505050565b6001600160a01b038216610b8e57604051633250574960e11b8152600060048201526024016103a8565b6000610b9c838360006108a3565b90506001600160a01b0381161561042d576040516339e3563760e11b8152600060048201526024016103a8565b6000828152600660205260409020610be182826112ea565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b8080610c2d57506001600160a01b03821615155b15610cef576000610c3d8461085d565b90506001600160a01b03831615801590610c695750826001600160a01b0316816001600160a01b031614155b8015610c7c5750610c7a81846104e1565b155b15610ca55760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103a8565b8115610ced5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610d2a838383610d83565b61042d576001600160a01b038316610d5857604051637e27328960e01b8152600481018290526024016103a8565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103a8565b60006001600160a01b03831615801590610de15750826001600160a01b0316846001600160a01b03161480610dbd5750610dbd84846104e1565b80610de157506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160e01b031981168114610dff57600080fd5b50565b600060208284031215610e1457600080fd5b8135610e1f81610de9565b9392505050565b60005b83811015610e41578181015183820152602001610e29565b50506000910152565b60008151808452610e62816020860160208601610e26565b601f01601f19169290920160200192915050565b602081526000610e1f6020830184610e4a565b600060208284031215610e9b57600080fd5b5035919050565b80356001600160a01b0381168114610eb957600080fd5b919050565b60008060408385031215610ed157600080fd5b610eda83610ea2565b946020939093013593505050565b600080600060608486031215610efd57600080fd5b610f0684610ea2565b9250610f1460208501610ea2565b9150604084013590509250925092565b600060208284031215610f3657600080fd5b610e1f82610ea2565b8015158114610dff57600080fd5b60008060408385031215610f6057600080fd5b610f6983610ea2565b91506020830135610f7981610f3f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fab57600080fd5b813567ffffffffffffffff80821115610fc657610fc6610f84565b604051601f8301601f19908116603f01168101908282118183101715610fee57610fee610f84565b8160405283815286602085880101111561100757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561103d57600080fd5b61104685610ea2565b935061105460208601610ea2565b925060408501359150606085013567ffffffffffffffff81111561107757600080fd5b61108387828801610f9a565b91505092959194509250565b600080604083850312156110a257600080fd5b6110ab83610ea2565b91506110b960208401610ea2565b90509250929050565b600080600080600080600060e0888a0312156110dd57600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461110f57600080fd5b93506080880135925060a088013567ffffffffffffffff81111561113257600080fd5b61113e8a828b01610f9a565b92505060c0880135905092959891949750929550565b600181811c9082168061116857607f821691505b60208210810361118857634e487b7160e01b600052602260045260246000fd5b50919050565b8781528660208201528560408201526bffffffffffffffffffffffff198516606082015283608082015260e060a082015260006111ce60e0830185610e4a565b90508260c083015298975050505050505050565b600082516111f4818460208701610e26565b9190910192915050565b60006020828403121561121057600080fd5b8151610e1f81610f3f565b60006001820161123b57634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061127590830184610e4a565b9695505050505050565b60006020828403121561129157600080fd5b8151610e1f81610de9565b601f82111561042d57600081815260208120601f850160051c810160208610156112c35750805b601f850160051c820191505b818110156112e2578281556001016112cf565b505050505050565b815167ffffffffffffffff81111561130457611304610f84565b611318816113128454611154565b8461129c565b602080601f83116001811461134d57600084156113355750858301515b600019600386901b1c1916600185901b1785556112e2565b600085815260208120601f198616915b8281101561137c5788860151825594840194600190910190840161135d565b508582101561139a5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe697066733a2f2f516d554b76696e793978326f51556567794a464642415555327135727675354373507a725561425344756b704851a2646970667358221220c610e2b3fc584ff15378d793e3eceea724322a73ed33c7051568c6a5c551b55764736f6c63430008150033","sourceMap":"241:2396:35:-:0;;;402:66;371:97;;582:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1381:113:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1381:113:23;;;1455:5;1447;:13;;;;;;:::i;:::-;-1:-1:-1;1470:7:23;:17;1480:7;1470;:17;:::i;:::-;-1:-1:-1;;676:21:35::1;:46:::0;;-1:-1:-1;;;;;;676:46:35::1;-1:-1:-1::0;;;;;676:46:35;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;241:2396:35;;14:290:36;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:36;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:36:o;309:127::-;370:10;365:3;361:20;358:1;351:31;401:4;398:1;391:15;425:4;422:1;415:15;441:380;520:1;516:12;;;;563;;;584:61;;638:4;630:6;626:17;616:27;;584:61;691:2;683:6;680:14;660:18;657:38;654:161;;737:10;732:3;728:20;725:1;718:31;772:4;769:1;762:15;800:4;797:1;790:15;654:161;;441:380;;;:::o;952:545::-;1054:2;1049:3;1046:11;1043:448;;;1090:1;1115:5;1111:2;1104:17;1160:4;1156:2;1146:19;1230:2;1218:10;1214:19;1211:1;1207:27;1201:4;1197:38;1266:4;1254:10;1251:20;1248:47;;;-1:-1:-1;1289:4:36;1248:47;1344:2;1339:3;1335:12;1332:1;1328:20;1322:4;1318:31;1308:41;;1399:82;1417:2;1410:5;1407:13;1399:82;;;1462:17;;;1443:1;1432:13;1399:82;;;1403:3;;;1043:448;952:545;;;:::o;1673:1352::-;1793:10;;-1:-1:-1;;;;;1815:30:36;;1812:56;;;1848:18;;:::i;:::-;1877:97;1967:6;1927:38;1959:4;1953:11;1927:38;:::i;:::-;1921:4;1877:97;:::i;:::-;2029:4;;2093:2;2082:14;;2110:1;2105:663;;;;2812:1;2829:6;2826:89;;;-1:-1:-1;2881:19:36;;;2875:26;2826:89;-1:-1:-1;;1630:1:36;1626:11;;;1622:24;1618:29;1608:40;1654:1;1650:11;;;1605:57;2928:81;;2075:944;;2105:663;899:1;892:14;;;936:4;923:18;;-1:-1:-1;;2141:20:36;;;2259:236;2273:7;2270:1;2267:14;2259:236;;;2362:19;;;2356:26;2341:42;;2454:27;;;;2422:1;2410:14;;;;2289:19;;2259:236;;;2263:3;2523:6;2514:7;2511:19;2508:201;;;2584:19;;;2578:26;-1:-1:-1;;2667:1:36;2663:14;;;2679:3;2659:24;2655:37;2651:42;2636:58;2621:74;;2508:201;-1:-1:-1;;;;;2755:1:36;2739:14;;;2735:22;2722:36;;-1:-1:-1;1673:1352:36:o;:::-;241:2396:35;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063c87b56dd11610071578063c87b56dd1461021e578063dd3df4bd14610231578063e985e9c514610254578063f19cd88214610267578063fa534dc01461027a57600080fd5b806370a08231146101dd57806395d89b41146101f0578063a22cb465146101f8578063b88d4fde1461020b57600080fd5b80632212d607116100de5780632212d6071461018d57806323b872dd146101a457806342842e0e146101b75780636352211e146101ca57600080fd5b806301ffc9a71461011057806306fdde0314610138578063081812fc1461014d578063095ea7b314610178575b600080fd5b61012361011e366004610e02565b61028d565b60405190151581526020015b60405180910390f35b6101406102b8565b60405161012f9190610e76565b61016061015b366004610e89565b61034a565b6040516001600160a01b03909116815260200161012f565b61018b610186366004610ebe565b610373565b005b61019660095481565b60405190815260200161012f565b61018b6101b2366004610ee8565b610382565b61018b6101c5366004610ee8565b610412565b6101606101d8366004610e89565b610432565b6101966101eb366004610f24565b61043d565b610140610485565b61018b610206366004610f4d565b610494565b61018b610219366004611027565b61049f565b61014061022c366004610e89565b6104b6565b61012361023f366004610e89565b600a6020526000908152604090205460ff1681565b61012361026236600461108f565b6104e1565b600854610160906001600160a01b031681565b6101966102883660046110c2565b61050f565b60006001600160e01b03198216632483248360e11b14806102b257506102b28261080d565b92915050565b6060600080546102c790611154565b80601f01602080910402602001604051908101604052809291908181526020018280546102f390611154565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b5050505050905090565b60006103558261085d565b506000828152600460205260409020546001600160a01b03166102b2565b61037e828233610896565b5050565b6001600160a01b0382166103b157604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103be8383336108a3565b9050836001600160a01b0316816001600160a01b03161461040c576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103a8565b50505050565b61042d8383836040518060200160405280600081525061049f565b505050565b60006102b28261085d565b60006001600160a01b038216610469576040516322718ad960e21b8152600060048201526024016103a8565b506001600160a01b031660009081526003602052604090205490565b6060600180546102c790611154565b61037e33838361099c565b6104aa848484610382565b61040c84848484610a3b565b60606104c18261085d565b506040518060600160405280603581526020016113ab6035913992915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600085600954146105575760405162461bcd60e51b815260206004820152601260248201527108a988c40c8decae640dcdee840dac2e8c6d60731b60448201526064016103a8565b606085901c33146105b45760405162461bcd60e51b815260206004820152602160248201527f70726f6f6647656e657261746f724164647220646f6573206e6f74206d6174636044820152600d60fb1b60648201526084016103a8565b6040805160208082018b90528183018a9052606082018990526bffffffffffffffffffffffff198816608083015282516074818403018152609490920183528151918101919091206000818152600a9092529190205460ff16156106515760405162461bcd60e51b81526020600482015260146024820152731c1c9bdbd988185b1c9958591e481b5a5b9d195960621b60448201526064016103a8565b60085460405160009182916001600160a01b0390911690610682908d908d908d908d908d908d908d9060240161118e565b60408051601f198184030181529181526020820180516001600160e01b03166303e94d3760e61b179052516106b791906111e2565b600060405180830381855afa9150503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b50915091508161073e5760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b60448201526064016103a8565b60008180602001905181019061075491906111fe565b9050806107a35760405162461bcd60e51b815260206004820152601b60248201527f70726f6f66206e6f7420696e636c7564656420696e206261746368000000000060448201526064016103a8565b6000848152600a60205260408120805460ff191660011790556007805490826107cb8361121b565b9190505590506107db3382610b64565b6107fd816040518060600160405280603581526020016113ab60359139610bc9565b9c9b505050505050505050505050565b60006001600160e01b031982166380ac58cd60e01b148061083e57506001600160e01b03198216635b5e139f60e01b145b806102b257506301ffc9a760e01b6001600160e01b03198316146102b2565b6000818152600260205260408120546001600160a01b0316806102b257604051637e27328960e01b8152600481018490526024016103a8565b61042d8383836001610c19565b6000828152600260205260408120546001600160a01b03908116908316156108d0576108d0818486610d1f565b6001600160a01b0381161561090e576108ed600085600080610c19565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b0385161561093d576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b0382166109ce57604051630b61174360e31b81526001600160a01b03831660048201526024016103a8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561040c57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610a7d903390889087908790600401611242565b6020604051808303816000875af1925050508015610ab8575060408051601f3d908101601f19168201909252610ab59181019061127f565b60015b610b21573d808015610ae6576040519150601f19603f3d011682016040523d82523d6000602084013e610aeb565b606091505b508051600003610b1957604051633250574960e11b81526001600160a01b03851660048201526024016103a8565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b5d57604051633250574960e11b81526001600160a01b03851660048201526024016103a8565b5050505050565b6001600160a01b038216610b8e57604051633250574960e11b8152600060048201526024016103a8565b6000610b9c838360006108a3565b90506001600160a01b0381161561042d576040516339e3563760e11b8152600060048201526024016103a8565b6000828152600660205260409020610be182826112ea565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b8080610c2d57506001600160a01b03821615155b15610cef576000610c3d8461085d565b90506001600160a01b03831615801590610c695750826001600160a01b0316816001600160a01b031614155b8015610c7c5750610c7a81846104e1565b155b15610ca55760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103a8565b8115610ced5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610d2a838383610d83565b61042d576001600160a01b038316610d5857604051637e27328960e01b8152600481018290526024016103a8565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103a8565b60006001600160a01b03831615801590610de15750826001600160a01b0316846001600160a01b03161480610dbd5750610dbd84846104e1565b80610de157506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160e01b031981168114610dff57600080fd5b50565b600060208284031215610e1457600080fd5b8135610e1f81610de9565b9392505050565b60005b83811015610e41578181015183820152602001610e29565b50506000910152565b60008151808452610e62816020860160208601610e26565b601f01601f19169290920160200192915050565b602081526000610e1f6020830184610e4a565b600060208284031215610e9b57600080fd5b5035919050565b80356001600160a01b0381168114610eb957600080fd5b919050565b60008060408385031215610ed157600080fd5b610eda83610ea2565b946020939093013593505050565b600080600060608486031215610efd57600080fd5b610f0684610ea2565b9250610f1460208501610ea2565b9150604084013590509250925092565b600060208284031215610f3657600080fd5b610e1f82610ea2565b8015158114610dff57600080fd5b60008060408385031215610f6057600080fd5b610f6983610ea2565b91506020830135610f7981610f3f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fab57600080fd5b813567ffffffffffffffff80821115610fc657610fc6610f84565b604051601f8301601f19908116603f01168101908282118183101715610fee57610fee610f84565b8160405283815286602085880101111561100757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561103d57600080fd5b61104685610ea2565b935061105460208601610ea2565b925060408501359150606085013567ffffffffffffffff81111561107757600080fd5b61108387828801610f9a565b91505092959194509250565b600080604083850312156110a257600080fd5b6110ab83610ea2565b91506110b960208401610ea2565b90509250929050565b600080600080600080600060e0888a0312156110dd57600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461110f57600080fd5b93506080880135925060a088013567ffffffffffffffff81111561113257600080fd5b61113e8a828b01610f9a565b92505060c0880135905092959891949750929550565b600181811c9082168061116857607f821691505b60208210810361118857634e487b7160e01b600052602260045260246000fd5b50919050565b8781528660208201528560408201526bffffffffffffffffffffffff198516606082015283608082015260e060a082015260006111ce60e0830185610e4a565b90508260c083015298975050505050505050565b600082516111f4818460208701610e26565b9190910192915050565b60006020828403121561121057600080fd5b8151610e1f81610f3f565b60006001820161123b57634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061127590830184610e4a565b9695505050505050565b60006020828403121561129157600080fd5b8151610e1f81610de9565b601f82111561042d57600081815260208120601f850160051c810160208610156112c35750805b601f850160051c820191505b818110156112e2578281556001016112cf565b505050505050565b815167ffffffffffffffff81111561130457611304610f84565b611318816113128454611154565b8461129c565b602080601f83116001811461134d57600084156113355750858301515b600019600386901b1c1916600185901b1785556112e2565b600085815260208120601f198616915b8281101561137c5788860151825594840194600190910190840161135d565b508582101561139a5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe697066733a2f2f516d554b76696e793978326f51556567794a464642415555327135727675354373507a725561425344756b704851a2646970667358221220c610e2b3fc584ff15378d793e3eceea724322a73ed33c7051568c6a5c551b55764736f6c63430008150033","sourceMap":"241:2396:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:207:26;;;;;;:::i;:::-;;:::i;:::-;;;565:14:36;;558:22;540:41;;528:2;513:18;937:207:26;;;;;;;;2365:89:23;;;:::i;:::-;;;;;;;:::i;3497:154::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:36;;;1679:51;;1667:2;1652:18;3497:154:23;1533:203:36;3323:113:23;;;;;;:::i;:::-;;:::i;:::-;;371:97:35;;;;;;;;;2324:25:36;;;2312:2;2297:18;371:97:35;2178:177:36;4143:578:23;;;;;;:::i;:::-;;:::i;4787:132::-;;;;;;:::i;:::-;;:::i;2185:118::-;;;;;;:::i;:::-;;:::i;1920:208::-;;;;;;:::i;:::-;;:::i;2518:93::-;;;:::i;3718:144::-;;;;;;:::i;:::-;;:::i;4985:208::-;;;;;;:::i;:::-;;:::i;2434:200:35:-;;;;;;:::i;:::-;;:::i;531:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3928:153:23;;;;;;:::i;:::-;;:::i;328:36:35:-;;;;;-1:-1:-1;;;;;328:36:35;;;735:1693;;;;;;:::i;:::-;;:::i;937:207:26:-;1039:4;-1:-1:-1;;;;;;1062:35:26;;-1:-1:-1;;;1062:35:26;;:75;;;1101:36;1125:11;1101:23;:36::i;:::-;1055:82;937:207;-1:-1:-1;;937:207:26:o;2365:89:23:-;2410:13;2442:5;2435:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2365:89;:::o;3497:154::-;3564:7;3583:22;3597:7;3583:13;:22::i;:::-;-1:-1:-1;6008:7:23;6034:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6034:24:23;3623:21;5938:127;3323:113;3394:35;3403:2;3407:7;735:10:28;3394:8:23;:35::i;:::-;3323:113;;:::o;4143:578::-;-1:-1:-1;;;;;4237:16:23;;4233:87;;4276:33;;-1:-1:-1;;;4276:33:23;;4306:1;4276:33;;;1679:51:36;1652:18;;4276:33:23;;;;;;;;4233:87;4538:21;4562:34;4570:2;4574:7;735:10:28;4562:7:23;:34::i;:::-;4538:58;;4627:4;-1:-1:-1;;;;;4610:21:23;:13;-1:-1:-1;;;;;4610:21:23;;4606:109;;4654:50;;-1:-1:-1;;;4654:50:23;;-1:-1:-1;;;;;6854:15:36;;;4654:50:23;;;6836:34:36;6886:18;;;6879:34;;;6949:15;;6929:18;;;6922:43;6771:18;;4654:50:23;6596:375:36;4606:109:23;4223:498;4143:578;;;:::o;4787:132::-;4873:39;4890:4;4896:2;4900:7;4873:39;;;;;;;;;;;;:16;:39::i;:::-;4787:132;;;:::o;2185:118::-;2248:7;2274:22;2288:7;2274:13;:22::i;1920:208::-;1983:7;-1:-1:-1;;;;;2006:19:23;;2002:87;;2048:30;;-1:-1:-1;;;2048:30:23;;2075:1;2048:30;;;1679:51:36;1652:18;;2048:30:23;1533:203:36;2002:87:23;-1:-1:-1;;;;;;2105:16:23;;;;;:9;:16;;;;;;;1920:208::o;2518:93::-;2565:13;2597:7;2590:14;;;;;:::i;3718:144::-;3803:52;735:10:28;3836:8:23;3846;3803:18;:52::i;4985:208::-;5098:31;5111:4;5117:2;5121:7;5098:12;:31::i;:::-;5139:47;5162:4;5168:2;5172:7;5181:4;5139:22;:47::i;2434:200:35:-;2507:13;2532:22;2546:7;2532:13;:22::i;:::-;;2565:62;;;;;;;;;;;;;;;;;;2434:200;-1:-1:-1;;2434:200:35:o;3928:153:23:-;-1:-1:-1;;;;;4039:25:23;;;4016:4;4039:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3928:153::o;735:1693:35:-;1053:7;1097:30;1080:13;;:47;1072:78;;;;-1:-1:-1;;;1072:78:35;;7178:2:36;1072:78:35;;;7160:21:36;7217:2;7197:18;;;7190:30;-1:-1:-1;;;7236:18:36;;;7229:48;7294:18;;1072:78:35;6976:342:36;1072:78:35;1168:27;;;;1199:10;1168:41;1160:87;;;;-1:-1:-1;;;1160:87:35;;7525:2:36;1160:87:35;;;7507:21:36;7564:2;7544:18;;;7537:30;7603:34;7583:18;;;7576:62;-1:-1:-1;;;7654:18:36;;;7647:31;7695:19;;1160:87:35;7323:397:36;1160:87:35;1287:117;;;;;;;7938:19:36;;;7973:12;;;7966:28;;;8010:12;;;8003:28;;;-1:-1:-1;;8061:44:36;;8047:12;;;8040:66;1287:117:35;;;;;;;;;8122:13:36;;;;1287:117:35;;1277:128;;;;;;;;;-1:-1:-1;1424:22:35;;;:12;:22;;;;;;;;;1423:23;1415:56;;;;-1:-1:-1;;;1415:56:35;;8348:2:36;1415:56:35;;;8330:21:36;8387:2;8367:18;;;8360:30;-1:-1:-1;;;8406:18:36;;;8399:50;8466:18;;1415:56:35;8146:344:36;1415:56:35;1540:21;;1586:391;;1483:23;;;;-1:-1:-1;;;;;1540:21:35;;;;1586:391;;1722:15;;1755:18;;1791:30;;1839:18;;1875:15;;1908:11;;1937:26;;1586:391;;;:::i;:::-;;;;-1:-1:-1;;1586:391:35;;;;;;;;;;;;;;-1:-1:-1;;;;;1586:391:35;-1:-1:-1;;;1586:391:35;;;1540:447;;;1586:391;1540:447;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1482:505;;;;2006:18;1998:49;;;;-1:-1:-1;;;1998:49:35;;9681:2:36;1998:49:35;;;9663:21:36;9720:2;9700:18;;;9693:30;-1:-1:-1;;;9739:18:36;;;9732:48;9797:18;;1998:49:35;9479:342:36;1998:49:35;2058:24;2096:15;2085:35;;;;;;;;;;;;:::i;:::-;2058:62;;2138:19;2130:59;;;;-1:-1:-1;;;2130:59:35;;10278:2:36;2130:59:35;;;10260:21:36;10317:2;10297:18;;;10290:30;10356:29;10336:18;;;10329:57;10403:18;;2130:59:35;10076:351:36;2130:59:35;2200:22;;;;:12;:22;;;;;:29;;-1:-1:-1;;2200:29:35;2225:4;2200:29;;;2258:12;:14;;;2200:22;2258:14;;;:::i;:::-;;;;;2240:32;;2282:26;2288:10;2300:7;2282:5;:26::i;:::-;2318:78;2331:7;2318:78;;;;;;;;;;;;;;;;;:12;:78::i;:::-;2414:7;735:1693;-1:-1:-1;;;;;;;;;;;;735:1693:35:o;1561:300:23:-;1663:4;-1:-1:-1;;;;;;1698:40:23;;-1:-1:-1;;;1698:40:23;;:104;;-1:-1:-1;;;;;;;1754:48:23;;-1:-1:-1;;;1754:48:23;1698:104;:156;;;-1:-1:-1;;;;;;;;;;861:40:30;;;1818:36:23;762:146:30;16138:241:23;16201:7;5799:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5799:16:23;;16263:88;;16309:31;;-1:-1:-1;;;16309:31:23;;;;;2324:25:36;;;2297:18;;16309:31:23;2178:177:36;14418:120:23;14498:33;14507:2;14511:7;14520:4;14526;14498:8;:33::i;8838:795::-;8924:7;5799:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5799:16:23;;;;9035:18;;;9031:86;;9069:37;9086:4;9092;9098:7;9069:16;:37::i;:::-;-1:-1:-1;;;;;9161:18:23;;;9157:256;;9277:48;9294:1;9298:7;9315:1;9319:5;9277:8;:48::i;:::-;-1:-1:-1;;;;;9368:15:23;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9368:20:23;;;9157:256;-1:-1:-1;;;;;9427:16:23;;;9423:107;;-1:-1:-1;;;;;9487:13:23;;;;;;:9;:13;;;;;:18;;9504:1;9487:18;;;9423:107;9540:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9540:21:23;-1:-1:-1;;;;;9540:21:23;;;;;;;;;9577:27;;9540:16;;9577:27;;;;;;;9622:4;8838:795;-1:-1:-1;;;;8838:795:23:o;15591:312::-;-1:-1:-1;;;;;15698:22:23;;15694:91;;15743:31;;-1:-1:-1;;;15743:31:23;;-1:-1:-1;;;;;1697:32:36;;15743:31:23;;;1679:51:36;1652:18;;15743:31:23;1533:203:36;15694:91:23;-1:-1:-1;;;;;15794:25:23;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;15794:46:23;;;;;;;;;;15855:41;;540::36;;;15855::23;;513:18:36;15855:41:23;;;;;;;15591:312;;;:::o;16918:782::-;-1:-1:-1;;;;;17034:14:23;;;:18;17030:664;;17072:71;;-1:-1:-1;;;17072:71:23;;-1:-1:-1;;;;;17072:36:23;;;;;:71;;735:10:28;;17123:4:23;;17129:7;;17138:4;;17072:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17072:71:23;;;;;;;;-1:-1:-1;;17072:71:23;;;;;;;;;;;;:::i;:::-;;;17068:616;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17381:6;:13;17398:1;17381:18;17377:293;;17430:25;;-1:-1:-1;;;17430:25:23;;-1:-1:-1;;;;;1697:32:36;;17430:25:23;;;1679:51:36;1652:18;;17430:25:23;1533:203:36;17377:293:23;17622:6;17616:13;17607:6;17603:2;17599:15;17592:38;17068:616;-1:-1:-1;;;;;;17190:51:23;;-1:-1:-1;;;17190:51:23;17186:130;;17272:25;;-1:-1:-1;;;17272:25:23;;-1:-1:-1;;;;;1697:32:36;;17272:25:23;;;1679:51:36;1652:18;;17272:25:23;1533:203:36;17186:130:23;17144:186;16918:782;;;;:::o;9955:327::-;-1:-1:-1;;;;;10022:16:23;;10018:87;;10061:33;;-1:-1:-1;;;10061:33:23;;10091:1;10061:33;;;1679:51:36;1652:18;;10061:33:23;1533:203:36;10018:87:23;10114:21;10138:32;10146:2;10150:7;10167:1;10138:7;:32::i;:::-;10114:56;-1:-1:-1;;;;;;10184:27:23;;;10180:96;;10234:31;;-1:-1:-1;;;10234:31:23;;10262:1;10234:31;;;1679:51:36;1652:18;;10234:31:23;1533:203:36;1922:167:26;2013:19;;;;:10;:19;;;;;:31;2035:9;2013:19;:31;:::i;:::-;-1:-1:-1;2059:23:26;;2324:25:36;;;2059:23:26;;2312:2:36;2297:18;2059:23:26;;;;;;;1922:167;;:::o;14720:662:23:-;14880:9;:31;;;-1:-1:-1;;;;;;14893:18:23;;;;14880:31;14876:460;;;14927:13;14943:22;14957:7;14943:13;:22::i;:::-;14927:38;-1:-1:-1;;;;;;15093:18:23;;;;;;:35;;;15124:4;-1:-1:-1;;;;;15115:13:23;:5;-1:-1:-1;;;;;15115:13:23;;;15093:35;:69;;;;;15133:29;15150:5;15157:4;15133:16;:29::i;:::-;15132:30;15093:69;15089:142;;;15189:27;;-1:-1:-1;;;15189:27:23;;-1:-1:-1;;;;;1697:32:36;;15189:27:23;;;1679:51:36;1652:18;;15189:27:23;1533:203:36;15089:142:23;15249:9;15245:81;;;15303:7;15299:2;-1:-1:-1;;;;;15283:28:23;15292:5;-1:-1:-1;;;;;15283:28:23;;;;;;;;;;;15245:81;14913:423;14876:460;-1:-1:-1;;15346:24:23;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15346:29:23;-1:-1:-1;;;;;15346:29:23;;;;;;;;;;14720:662::o;7082:368::-;7194:38;7208:5;7215:7;7224;7194:13;:38::i;:::-;7189:255;;-1:-1:-1;;;;;7252:19:23;;7248:186;;7298:31;;-1:-1:-1;;;7298:31:23;;;;;2324:25:36;;;2297:18;;7298:31:23;2178:177:36;7248:186:23;7375:44;;-1:-1:-1;;;7375:44:23;;-1:-1:-1;;;;;13813:32:36;;7375:44:23;;;13795:51:36;13862:18;;;13855:34;;;13768:18;;7375:44:23;13621:274:36;6376:272:23;6479:4;-1:-1:-1;;;;;6514:21:23;;;;;;:127;;;6561:7;-1:-1:-1;;;;;6552:16:23;:5;-1:-1:-1;;;;;6552:16:23;;:52;;;;6572:32;6589:5;6596:7;6572:16;:32::i;:::-;6552:88;;;-1:-1:-1;6008:7:23;6034:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6608:32:23;;;6034:24;;6608:32;6552:88;6495:146;6376:272;-1:-1:-1;;;;6376:272:23:o;14:131:36:-;-1:-1:-1;;;;;;88:32:36;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:36:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:36;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:36;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:36:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:36;;1348:180;-1:-1:-1;1348:180:36:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:36;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:36:o;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2693:186::-;2752:6;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2844:29;2863:9;2844:29;:::i;3066:118::-;3152:5;3145:13;3138:21;3131:5;3128:32;3118:60;;3174:1;3171;3164:12;3189:315;3254:6;3262;3315:2;3303:9;3294:7;3290:23;3286:32;3283:52;;;3331:1;3328;3321:12;3283:52;3354:29;3373:9;3354:29;:::i;:::-;3344:39;;3433:2;3422:9;3418:18;3405:32;3446:28;3468:5;3446:28;:::i;:::-;3493:5;3483:15;;;3189:315;;;;;:::o;3509:127::-;3570:10;3565:3;3561:20;3558:1;3551:31;3601:4;3598:1;3591:15;3625:4;3622:1;3615:15;3641:718;3683:5;3736:3;3729:4;3721:6;3717:17;3713:27;3703:55;;3754:1;3751;3744:12;3703:55;3790:6;3777:20;3816:18;3853:2;3849;3846:10;3843:36;;;3859:18;;:::i;:::-;3934:2;3928:9;3902:2;3988:13;;-1:-1:-1;;3984:22:36;;;4008:2;3980:31;3976:40;3964:53;;;4032:18;;;4052:22;;;4029:46;4026:72;;;4078:18;;:::i;:::-;4118:10;4114:2;4107:22;4153:2;4145:6;4138:18;4199:3;4192:4;4187:2;4179:6;4175:15;4171:26;4168:35;4165:55;;;4216:1;4213;4206:12;4165:55;4280:2;4273:4;4265:6;4261:17;4254:4;4246:6;4242:17;4229:54;4327:1;4320:4;4315:2;4307:6;4303:15;4299:26;4292:37;4347:6;4338:15;;;;;;3641:718;;;;:::o;4364:537::-;4459:6;4467;4475;4483;4536:3;4524:9;4515:7;4511:23;4507:33;4504:53;;;4553:1;4550;4543:12;4504:53;4576:29;4595:9;4576:29;:::i;:::-;4566:39;;4624:38;4658:2;4647:9;4643:18;4624:38;:::i;:::-;4614:48;;4709:2;4698:9;4694:18;4681:32;4671:42;;4764:2;4753:9;4749:18;4736:32;4791:18;4783:6;4780:30;4777:50;;;4823:1;4820;4813:12;4777:50;4846:49;4887:7;4878:6;4867:9;4863:22;4846:49;:::i;:::-;4836:59;;;4364:537;;;;;;;:::o;5091:260::-;5159:6;5167;5220:2;5208:9;5199:7;5195:23;5191:32;5188:52;;;5236:1;5233;5226:12;5188:52;5259:29;5278:9;5259:29;:::i;:::-;5249:39;;5307:38;5341:2;5330:9;5326:18;5307:38;:::i;:::-;5297:48;;5091:260;;;;;:::o;5356:850::-;5478:6;5486;5494;5502;5510;5518;5526;5579:3;5567:9;5558:7;5554:23;5550:33;5547:53;;;5596:1;5593;5586:12;5547:53;5619:23;;;-1:-1:-1;5689:2:36;5674:18;;5661:32;;-1:-1:-1;5740:2:36;5725:18;;5712:32;;-1:-1:-1;5794:2:36;5779:18;;5766:32;-1:-1:-1;;5827:43:36;;5817:54;;5807:82;;5885:1;5882;5875:12;5807:82;5908:5;-1:-1:-1;5960:3:36;5945:19;;5932:33;;-1:-1:-1;6016:3:36;6001:19;;5988:33;6044:18;6033:30;;6030:50;;;6076:1;6073;6066:12;6030:50;6099:49;6140:7;6131:6;6120:9;6116:22;6099:49;:::i;:::-;6089:59;;;6195:3;6184:9;6180:19;6167:33;6157:43;;5356:850;;;;;;;;;;:::o;6211:380::-;6290:1;6286:12;;;;6333;;;6354:61;;6408:4;6400:6;6396:17;6386:27;;6354:61;6461:2;6453:6;6450:14;6430:18;6427:38;6424:161;;6507:10;6502:3;6498:20;6495:1;6488:31;6542:4;6539:1;6532:15;6570:4;6567:1;6560:15;6424:161;;6211:380;;;:::o;8495:687::-;8810:6;8799:9;8792:25;8853:6;8848:2;8837:9;8833:18;8826:34;8896:6;8891:2;8880:9;8876:18;8869:34;8955:26;8951:31;8943:6;8939:44;8934:2;8923:9;8919:18;8912:72;9021:6;9015:3;9004:9;9000:19;8993:35;9065:3;9059;9048:9;9044:19;9037:32;8773:4;9086:46;9127:3;9116:9;9112:19;9104:6;9086:46;:::i;:::-;9078:54;;9169:6;9163:3;9152:9;9148:19;9141:35;8495:687;;;;;;;;;;:::o;9187:287::-;9316:3;9354:6;9348:13;9370:66;9429:6;9424:3;9417:4;9409:6;9405:17;9370:66;:::i;:::-;9452:16;;;;;9187:287;-1:-1:-1;;9187:287:36:o;9826:245::-;9893:6;9946:2;9934:9;9925:7;9921:23;9917:32;9914:52;;;9962:1;9959;9952:12;9914:52;9994:9;9988:16;10013:28;10035:5;10013:28;:::i;10432:232::-;10471:3;10492:17;;;10489:140;;10551:10;10546:3;10542:20;10539:1;10532:31;10586:4;10583:1;10576:15;10614:4;10611:1;10604:15;10489:140;-1:-1:-1;10656:1:36;10645:13;;10432:232::o;10669:489::-;-1:-1:-1;;;;;10938:15:36;;;10920:34;;10990:15;;10985:2;10970:18;;10963:43;11037:2;11022:18;;11015:34;;;11085:3;11080:2;11065:18;;11058:31;;;10863:4;;11106:46;;11132:19;;11124:6;11106:46;:::i;:::-;11098:54;10669:489;-1:-1:-1;;;;;;10669:489:36:o;11163:249::-;11232:6;11285:2;11273:9;11264:7;11260:23;11256:32;11253:52;;;11301:1;11298;11291:12;11253:52;11333:9;11327:16;11352:30;11376:5;11352:30;:::i;11543:545::-;11645:2;11640:3;11637:11;11634:448;;;11681:1;11706:5;11702:2;11695:17;11751:4;11747:2;11737:19;11821:2;11809:10;11805:19;11802:1;11798:27;11792:4;11788:38;11857:4;11845:10;11842:20;11839:47;;;-1:-1:-1;11880:4:36;11839:47;11935:2;11930:3;11926:12;11923:1;11919:20;11913:4;11909:31;11899:41;;11990:82;12008:2;12001:5;11998:13;11990:82;;;12053:17;;;12034:1;12023:13;11990:82;;;11994:3;;;11543:545;;;:::o;12264:1352::-;12390:3;12384:10;12417:18;12409:6;12406:30;12403:56;;;12439:18;;:::i;:::-;12468:97;12558:6;12518:38;12550:4;12544:11;12518:38;:::i;:::-;12512:4;12468:97;:::i;:::-;12620:4;;12684:2;12673:14;;12701:1;12696:663;;;;13403:1;13420:6;13417:89;;;-1:-1:-1;13472:19:36;;;13466:26;13417:89;-1:-1:-1;;12221:1:36;12217:11;;;12213:24;12209:29;12199:40;12245:1;12241:11;;;12196:57;13519:81;;12666:944;;12696:663;11490:1;11483:14;;;11527:4;11514:18;;-1:-1:-1;;12732:20:36;;;12850:236;12864:7;12861:1;12858:14;12850:236;;;12953:19;;;12947:26;12932:42;;13045:27;;;;13013:1;13001:14;;;;12880:19;;12850:236;;;12854:3;13114:6;13105:7;13102:19;13099:201;;;13175:19;;;13169:26;-1:-1:-1;;13258:1:36;13254:14;;;13270:3;13250:24;13246:37;13242:42;13227:58;13212:74;;13099:201;-1:-1:-1;;;;;13346:1:36;13330:14;;;13326:22;13313:36;;-1:-1:-1;12264:1352:36:o","linkReferences":{}},"methodIdentifiers":{"alignedServiceManager()":"f19cd882","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","elfCommitment()":"2212d607","getApproved(uint256)":"081812fc","isApprovedForAll(address,address)":"e985e9c5","mintedProofs(bytes32)":"dd3df4bd","name()":"06fdde03","ownerOf(uint256)":"6352211e","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenURI(uint256)":"c87b56dd","transferFrom(address,address,uint256)":"23b872dd","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)":"fa534dc0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alignedServiceManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"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\":false,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"}],\"name\":\"BatchMetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"MetadataUpdate\",\"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\":[],\"name\":\"alignedServiceManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"elfCommitment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"mintedProofs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[{\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"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.\"},\"BatchMetadataUpdate(uint256,uint256)\":{\"details\":\"This event emits when the metadata of a range of tokens is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFTs.\"},\"MetadataUpdate(uint256)\":{\"details\":\"This event emits when the metadata of a token is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFT.\"},\"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}.\"},\"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}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/VerifierContract.sol\":\"VerifierContract\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol\":{\"keccak256\":\"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd\",\"dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b\",\"dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd\",\"dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22\",\"dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":{\"keccak256\":\"0xcc6f49e0c57072d6a18eef0d5fc22a4cc20462c18f0c365d2dd9a2c732fde670\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24915e61c7896c336b60788408cd5792b97b782e98e392920a2c55eb1803fe96\",\"dweb:/ipfs/QmVHhcmFnMYZBCjnVUk6f5quMCDsBR2j669a1nuMiGWY9Z\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/VerifierContract.sol\":{\"keccak256\":\"0xd3344cfa7286501ef5bdfabfe336dfab042c4c420e13be7ca3d7f8f74cf9c8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5bcf78be8463542ce798e79fc6c7c3acc89b4cd6941500503c7fbd1d5f324c2d\",\"dweb:/ipfs/QmPKcDT6wVbD5PWAKDYJCfEyG1RGn8QYe9CXx2jmvFngZy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_alignedServiceManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721IncorrectOwner"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721InsufficientApproval"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC721InvalidApprover"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"type":"error","name":"ERC721InvalidOperator"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721InvalidOwner"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC721InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC721InvalidSender"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721NonexistentToken"},{"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":"uint256","name":"_fromTokenId","type":"uint256","indexed":false},{"internalType":"uint256","name":"_toTokenId","type":"uint256","indexed":false}],"type":"event","name":"BatchMetadataUpdate","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256","indexed":false}],"type":"event","name":"MetadataUpdate","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":[],"stateMutability":"view","type":"function","name":"alignedServiceManager","outputs":[{"internalType":"address","name":"","type":"address"}]},{"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":"elfCommitment","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"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":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"mintedProofs","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"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":[{"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":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}]},{"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":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"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}."},"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}."},"tokenURI(uint256)":{"details":"See {IERC721Metadata-tokenURI}."},"transferFrom(address,address,uint256)":{"details":"See {IERC721-transferFrom}."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/VerifierContract.sol":"VerifierContract"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol":{"keccak256":"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44","urls":["bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd","dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol":{"keccak256":"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d","urls":["bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b","dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol":{"keccak256":"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784","urls":["bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd","dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4","urls":["bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7","dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol":{"keccak256":"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49","urls":["bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22","dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol":{"keccak256":"0xcc6f49e0c57072d6a18eef0d5fc22a4cc20462c18f0c365d2dd9a2c732fde670","urls":["bzz-raw://24915e61c7896c336b60788408cd5792b97b782e98e392920a2c55eb1803fe96","dweb:/ipfs/QmVHhcmFnMYZBCjnVUk6f5quMCDsBR2j669a1nuMiGWY9Z"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"keccak256":"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1","urls":["bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02","dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792","urls":["bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453","dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133","urls":["bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8","dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72","urls":["bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc","dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"],"license":"MIT"},"src/VerifierContract.sol":{"keccak256":"0xd3344cfa7286501ef5bdfabfe336dfab042c4c420e13be7ca3d7f8f74cf9c8b6","urls":["bzz-raw://5bcf78be8463542ce798e79fc6c7c3acc89b4cd6941500503c7fbd1d5f324c2d","dweb:/ipfs/QmPKcDT6wVbD5PWAKDYJCfEyG1RGn8QYe9CXx2jmvFngZy"],"license":"UNLICENSED"}},"version":1},"id":35} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_alignedServiceManager","type":"address","internalType":"address"},{"name":"_paymentServiceAddr","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"alignedServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"elfCommitment","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"mintedProofs","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"ownerOf","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"paymentServiceAddr","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenURI","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"BatchMetadataUpdate","inputs":[{"name":"_fromTokenId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_toTokenId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MetadataUpdate","inputs":[{"name":"_tokenId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC721IncorrectOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InsufficientApproval","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721NonexistentToken","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60806040527f35dd40ab04e180712996495caec915b8a7c488433acbb50c4d8d912cb55bf1f1600a553480156200003557600080fd5b506040516200172538038062001725833981016040819052620000589162000121565b6040518060400160405280601581526020017f416c69676e6564204c61796572205a4b205175697a000000000000000000000081525060405180604001604052806004815260200163415a4b5160e01b8152508160009081620000bc9190620001fe565b506001620000cb8282620001fe565b5050600880546001600160a01b039485166001600160a01b031991821617909155600980549390941692169190911790915550620002ca565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018457607f821691505b602082108103620001a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f957600081815260208120601f850160051c81016020861015620001d45750805b601f850160051c820191505b81811015620001f557828155600101620001e0565b5050505b505050565b81516001600160401b038111156200021a576200021a62000159565b62000232816200022b84546200016f565b84620001ab565b602080601f8311600181146200026a5760008415620002515750858301515b600019600386901b1c1916600185901b178555620001f5565b600085815260208120601f198616915b828110156200029b578886015182559484019460019091019084016200027a565b5085821015620002ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61144b80620002da6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806390a05f2e116100a2578063c87b56dd11610071578063c87b56dd1461023c578063dd3df4bd1461024f578063e985e9c514610272578063f19cd88214610285578063fa534dc01461029857600080fd5b806390a05f2e146101fb57806395d89b411461020e578063a22cb46514610216578063b88d4fde1461022957600080fd5b80632212d607116100e95780632212d6071461019857806323b872dd146101af57806342842e0e146101c25780636352211e146101d557806370a08231146101e857600080fd5b806301ffc9a71461011b57806306fdde0314610143578063081812fc14610158578063095ea7b314610183575b600080fd5b61012e610129366004610e25565b6102ab565b60405190151581526020015b60405180910390f35b61014b6102d6565b60405161013a9190610e99565b61016b610166366004610eac565b610368565b6040516001600160a01b03909116815260200161013a565b610196610191366004610ee1565b610391565b005b6101a1600a5481565b60405190815260200161013a565b6101966101bd366004610f0b565b6103a0565b6101966101d0366004610f0b565b610430565b61016b6101e3366004610eac565b610450565b6101a16101f6366004610f47565b61045b565b60095461016b906001600160a01b031681565b61014b6104a3565b610196610224366004610f70565b6104b2565b61019661023736600461104a565b6104bd565b61014b61024a366004610eac565b6104d4565b61012e61025d366004610eac565b600b6020526000908152604090205460ff1681565b61012e6102803660046110b2565b6104ff565b60085461016b906001600160a01b031681565b6101a16102a63660046110e5565b61052d565b60006001600160e01b03198216632483248360e11b14806102d057506102d082610830565b92915050565b6060600080546102e590611177565b80601f016020809104026020016040519081016040528092919081815260200182805461031190611177565b801561035e5780601f106103335761010080835404028352916020019161035e565b820191906000526020600020905b81548152906001019060200180831161034157829003601f168201915b5050505050905090565b600061037382610880565b506000828152600460205260409020546001600160a01b03166102d0565b61039c8282336108b9565b5050565b6001600160a01b0382166103cf57604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103dc8383336108c6565b9050836001600160a01b0316816001600160a01b03161461042a576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103c6565b50505050565b61044b838383604051806020016040528060008152506104bd565b505050565b60006102d082610880565b60006001600160a01b038216610487576040516322718ad960e21b8152600060048201526024016103c6565b506001600160a01b031660009081526003602052604090205490565b6060600180546102e590611177565b61039c3383836109bf565b6104c88484846103a0565b61042a84848484610a5e565b60606104df82610880565b506040518060600160405280603581526020016113e16035913992915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600085600a54146105755760405162461bcd60e51b815260206004820152601260248201527108a988c40c8decae640dcdee840dac2e8c6d60731b60448201526064016103c6565b606085901c33146105d25760405162461bcd60e51b815260206004820152602160248201527f70726f6f6647656e657261746f724164647220646f6573206e6f74206d6174636044820152600d60fb1b60648201526084016103c6565b6040805160208082018b90528183018a9052606082018990526bffffffffffffffffffffffff198816608083015282516074818403018152609490920183528151918101919091206000818152600b9092529190205460ff161561066f5760405162461bcd60e51b81526020600482015260146024820152731c1c9bdbd988185b1c9958591e481b5a5b9d195960621b60448201526064016103c6565b60085460095460405160009283926001600160a01b03918216926106a5928f928f928f928f928f928f928f9216906024016111b1565b60408051601f198184030181529181526020820180516001600160e01b03166306045a9160e01b179052516106da9190611218565b600060405180830381855afa9150503d8060008114610715576040519150601f19603f3d011682016040523d82523d6000602084013e61071a565b606091505b5091509150816107615760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b60448201526064016103c6565b6000818060200190518101906107779190611234565b9050806107c65760405162461bcd60e51b815260206004820152601b60248201527f70726f6f66206e6f7420696e636c7564656420696e206261746368000000000060448201526064016103c6565b6000848152600b60205260408120805460ff191660011790556007805490826107ee83611251565b9190505590506107fe3382610b87565b610820816040518060600160405280603581526020016113e160359139610bec565b9c9b505050505050505050505050565b60006001600160e01b031982166380ac58cd60e01b148061086157506001600160e01b03198216635b5e139f60e01b145b806102d057506301ffc9a760e01b6001600160e01b03198316146102d0565b6000818152600260205260408120546001600160a01b0316806102d057604051637e27328960e01b8152600481018490526024016103c6565b61044b8383836001610c3c565b6000828152600260205260408120546001600160a01b03908116908316156108f3576108f3818486610d42565b6001600160a01b0381161561093157610910600085600080610c3c565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610960576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b0382166109f157604051630b61174360e31b81526001600160a01b03831660048201526024016103c6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561042a57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610aa0903390889087908790600401611278565b6020604051808303816000875af1925050508015610adb575060408051601f3d908101601f19168201909252610ad8918101906112b5565b60015b610b44573d808015610b09576040519150601f19603f3d011682016040523d82523d6000602084013e610b0e565b606091505b508051600003610b3c57604051633250574960e11b81526001600160a01b03851660048201526024016103c6565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b8057604051633250574960e11b81526001600160a01b03851660048201526024016103c6565b5050505050565b6001600160a01b038216610bb157604051633250574960e11b8152600060048201526024016103c6565b6000610bbf838360006108c6565b90506001600160a01b0381161561044b576040516339e3563760e11b8152600060048201526024016103c6565b6000828152600660205260409020610c048282611320565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b8080610c5057506001600160a01b03821615155b15610d12576000610c6084610880565b90506001600160a01b03831615801590610c8c5750826001600160a01b0316816001600160a01b031614155b8015610c9f5750610c9d81846104ff565b155b15610cc85760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103c6565b8115610d105783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610d4d838383610da6565b61044b576001600160a01b038316610d7b57604051637e27328960e01b8152600481018290526024016103c6565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103c6565b60006001600160a01b03831615801590610e045750826001600160a01b0316846001600160a01b03161480610de05750610de084846104ff565b80610e0457506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160e01b031981168114610e2257600080fd5b50565b600060208284031215610e3757600080fd5b8135610e4281610e0c565b9392505050565b60005b83811015610e64578181015183820152602001610e4c565b50506000910152565b60008151808452610e85816020860160208601610e49565b601f01601f19169290920160200192915050565b602081526000610e426020830184610e6d565b600060208284031215610ebe57600080fd5b5035919050565b80356001600160a01b0381168114610edc57600080fd5b919050565b60008060408385031215610ef457600080fd5b610efd83610ec5565b946020939093013593505050565b600080600060608486031215610f2057600080fd5b610f2984610ec5565b9250610f3760208501610ec5565b9150604084013590509250925092565b600060208284031215610f5957600080fd5b610e4282610ec5565b8015158114610e2257600080fd5b60008060408385031215610f8357600080fd5b610f8c83610ec5565b91506020830135610f9c81610f62565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fce57600080fd5b813567ffffffffffffffff80821115610fe957610fe9610fa7565b604051601f8301601f19908116603f0116810190828211818310171561101157611011610fa7565b8160405283815286602085880101111561102a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561106057600080fd5b61106985610ec5565b935061107760208601610ec5565b925060408501359150606085013567ffffffffffffffff81111561109a57600080fd5b6110a687828801610fbd565b91505092959194509250565b600080604083850312156110c557600080fd5b6110ce83610ec5565b91506110dc60208401610ec5565b90509250929050565b600080600080600080600060e0888a03121561110057600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461113257600080fd5b93506080880135925060a088013567ffffffffffffffff81111561115557600080fd5b6111618a828b01610fbd565b92505060c0880135905092959891949750929550565b600181811c9082168061118b57607f821691505b6020821081036111ab57634e487b7160e01b600052602260045260246000fd5b50919050565b60006101008a83528960208401528860408401526bffffffffffffffffffffffff19881660608401528660808401528060a08401526111f281840187610e6d565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b6000825161122a818460208701610e49565b9190910192915050565b60006020828403121561124657600080fd5b8151610e4281610f62565b60006001820161127157634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906112ab90830184610e6d565b9695505050505050565b6000602082840312156112c757600080fd5b8151610e4281610e0c565b601f82111561044b57600081815260208120601f850160051c810160208610156112f95750805b601f850160051c820191505b8181101561131857828155600101611305565b505050505050565b815167ffffffffffffffff81111561133a5761133a610fa7565b61134e816113488454611177565b846112d2565b602080601f831160018114611383576000841561136b5750858301515b600019600386901b1c1916600185901b178555611318565b600085815260208120601f198616915b828110156113b257888601518255948401946001909101908401611393565b50858210156113d05787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe697066733a2f2f516d554b76696e793978326f51556567794a464642415555327135727675354373507a725561425344756b704851a2646970667358221220e18828ee8df71e0807a53db821b319416c0c2e1d2b9761b2de39a61c4555fc6d64736f6c63430008150033","sourceMap":"241:2873:35:-:0;;;449:66;410:105;;629:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1381:113:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1381:113:23;;;1455:5;1447;:13;;;;;;:::i;:::-;-1:-1:-1;1470:7:23;:17;1480:7;1470;:17;:::i;:::-;-1:-1:-1;;774:21:35::1;:46:::0;;-1:-1:-1;;;;;774:46:35;;::::1;-1:-1:-1::0;;;;;;774:46:35;;::::1;;::::0;;;830:18:::1;:40:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;241:2873:35;;14:177:36;93:13;;-1:-1:-1;;;;;135:31:36;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;494:127::-;555:10;550:3;546:20;543:1;536:31;586:4;583:1;576:15;610:4;607:1;600:15;626:380;705:1;701:12;;;;748;;;769:61;;823:4;815:6;811:17;801:27;;769:61;876:2;868:6;865:14;845:18;842:38;839:161;;922:10;917:3;913:20;910:1;903:31;957:4;954:1;947:15;985:4;982:1;975:15;839:161;;626:380;;;:::o;1137:545::-;1239:2;1234:3;1231:11;1228:448;;;1275:1;1300:5;1296:2;1289:17;1345:4;1341:2;1331:19;1415:2;1403:10;1399:19;1396:1;1392:27;1386:4;1382:38;1451:4;1439:10;1436:20;1433:47;;;-1:-1:-1;1474:4:36;1433:47;1529:2;1524:3;1520:12;1517:1;1513:20;1507:4;1503:31;1493:41;;1584:82;1602:2;1595:5;1592:13;1584:82;;;1647:17;;;1628:1;1617:13;1584:82;;;1588:3;;;1228:448;1137:545;;;:::o;1858:1352::-;1978:10;;-1:-1:-1;;;;;2000:30:36;;1997:56;;;2033:18;;:::i;:::-;2062:97;2152:6;2112:38;2144:4;2138:11;2112:38;:::i;:::-;2106:4;2062:97;:::i;:::-;2214:4;;2278:2;2267:14;;2295:1;2290:663;;;;2997:1;3014:6;3011:89;;;-1:-1:-1;3066:19:36;;;3060:26;3011:89;-1:-1:-1;;1815:1:36;1811:11;;;1807:24;1803:29;1793:40;1839:1;1835:11;;;1790:57;3113:81;;2260:944;;2290:663;1084:1;1077:14;;;1121:4;1108:18;;-1:-1:-1;;2326:20:36;;;2444:236;2458:7;2455:1;2452:14;2444:236;;;2547:19;;;2541:26;2526:42;;2639:27;;;;2607:1;2595:14;;;;2474:19;;2444:236;;;2448:3;2708:6;2699:7;2696:19;2693:201;;;2769:19;;;2763:26;-1:-1:-1;;2852:1:36;2848:14;;;2864:3;2844:24;2840:37;2836:42;2821:58;2806:74;;2693:201;-1:-1:-1;;;;;2940:1:36;2924:14;;;2920:22;2907:36;;-1:-1:-1;1858:1352:36:o;:::-;241:2873:35;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101165760003560e01c806390a05f2e116100a2578063c87b56dd11610071578063c87b56dd1461023c578063dd3df4bd1461024f578063e985e9c514610272578063f19cd88214610285578063fa534dc01461029857600080fd5b806390a05f2e146101fb57806395d89b411461020e578063a22cb46514610216578063b88d4fde1461022957600080fd5b80632212d607116100e95780632212d6071461019857806323b872dd146101af57806342842e0e146101c25780636352211e146101d557806370a08231146101e857600080fd5b806301ffc9a71461011b57806306fdde0314610143578063081812fc14610158578063095ea7b314610183575b600080fd5b61012e610129366004610e25565b6102ab565b60405190151581526020015b60405180910390f35b61014b6102d6565b60405161013a9190610e99565b61016b610166366004610eac565b610368565b6040516001600160a01b03909116815260200161013a565b610196610191366004610ee1565b610391565b005b6101a1600a5481565b60405190815260200161013a565b6101966101bd366004610f0b565b6103a0565b6101966101d0366004610f0b565b610430565b61016b6101e3366004610eac565b610450565b6101a16101f6366004610f47565b61045b565b60095461016b906001600160a01b031681565b61014b6104a3565b610196610224366004610f70565b6104b2565b61019661023736600461104a565b6104bd565b61014b61024a366004610eac565b6104d4565b61012e61025d366004610eac565b600b6020526000908152604090205460ff1681565b61012e6102803660046110b2565b6104ff565b60085461016b906001600160a01b031681565b6101a16102a63660046110e5565b61052d565b60006001600160e01b03198216632483248360e11b14806102d057506102d082610830565b92915050565b6060600080546102e590611177565b80601f016020809104026020016040519081016040528092919081815260200182805461031190611177565b801561035e5780601f106103335761010080835404028352916020019161035e565b820191906000526020600020905b81548152906001019060200180831161034157829003601f168201915b5050505050905090565b600061037382610880565b506000828152600460205260409020546001600160a01b03166102d0565b61039c8282336108b9565b5050565b6001600160a01b0382166103cf57604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103dc8383336108c6565b9050836001600160a01b0316816001600160a01b03161461042a576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103c6565b50505050565b61044b838383604051806020016040528060008152506104bd565b505050565b60006102d082610880565b60006001600160a01b038216610487576040516322718ad960e21b8152600060048201526024016103c6565b506001600160a01b031660009081526003602052604090205490565b6060600180546102e590611177565b61039c3383836109bf565b6104c88484846103a0565b61042a84848484610a5e565b60606104df82610880565b506040518060600160405280603581526020016113e16035913992915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600085600a54146105755760405162461bcd60e51b815260206004820152601260248201527108a988c40c8decae640dcdee840dac2e8c6d60731b60448201526064016103c6565b606085901c33146105d25760405162461bcd60e51b815260206004820152602160248201527f70726f6f6647656e657261746f724164647220646f6573206e6f74206d6174636044820152600d60fb1b60648201526084016103c6565b6040805160208082018b90528183018a9052606082018990526bffffffffffffffffffffffff198816608083015282516074818403018152609490920183528151918101919091206000818152600b9092529190205460ff161561066f5760405162461bcd60e51b81526020600482015260146024820152731c1c9bdbd988185b1c9958591e481b5a5b9d195960621b60448201526064016103c6565b60085460095460405160009283926001600160a01b03918216926106a5928f928f928f928f928f928f928f9216906024016111b1565b60408051601f198184030181529181526020820180516001600160e01b03166306045a9160e01b179052516106da9190611218565b600060405180830381855afa9150503d8060008114610715576040519150601f19603f3d011682016040523d82523d6000602084013e61071a565b606091505b5091509150816107615760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b60448201526064016103c6565b6000818060200190518101906107779190611234565b9050806107c65760405162461bcd60e51b815260206004820152601b60248201527f70726f6f66206e6f7420696e636c7564656420696e206261746368000000000060448201526064016103c6565b6000848152600b60205260408120805460ff191660011790556007805490826107ee83611251565b9190505590506107fe3382610b87565b610820816040518060600160405280603581526020016113e160359139610bec565b9c9b505050505050505050505050565b60006001600160e01b031982166380ac58cd60e01b148061086157506001600160e01b03198216635b5e139f60e01b145b806102d057506301ffc9a760e01b6001600160e01b03198316146102d0565b6000818152600260205260408120546001600160a01b0316806102d057604051637e27328960e01b8152600481018490526024016103c6565b61044b8383836001610c3c565b6000828152600260205260408120546001600160a01b03908116908316156108f3576108f3818486610d42565b6001600160a01b0381161561093157610910600085600080610c3c565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610960576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b0382166109f157604051630b61174360e31b81526001600160a01b03831660048201526024016103c6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561042a57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610aa0903390889087908790600401611278565b6020604051808303816000875af1925050508015610adb575060408051601f3d908101601f19168201909252610ad8918101906112b5565b60015b610b44573d808015610b09576040519150601f19603f3d011682016040523d82523d6000602084013e610b0e565b606091505b508051600003610b3c57604051633250574960e11b81526001600160a01b03851660048201526024016103c6565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b8057604051633250574960e11b81526001600160a01b03851660048201526024016103c6565b5050505050565b6001600160a01b038216610bb157604051633250574960e11b8152600060048201526024016103c6565b6000610bbf838360006108c6565b90506001600160a01b0381161561044b576040516339e3563760e11b8152600060048201526024016103c6565b6000828152600660205260409020610c048282611320565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b8080610c5057506001600160a01b03821615155b15610d12576000610c6084610880565b90506001600160a01b03831615801590610c8c5750826001600160a01b0316816001600160a01b031614155b8015610c9f5750610c9d81846104ff565b155b15610cc85760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103c6565b8115610d105783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610d4d838383610da6565b61044b576001600160a01b038316610d7b57604051637e27328960e01b8152600481018290526024016103c6565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103c6565b60006001600160a01b03831615801590610e045750826001600160a01b0316846001600160a01b03161480610de05750610de084846104ff565b80610e0457506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160e01b031981168114610e2257600080fd5b50565b600060208284031215610e3757600080fd5b8135610e4281610e0c565b9392505050565b60005b83811015610e64578181015183820152602001610e4c565b50506000910152565b60008151808452610e85816020860160208601610e49565b601f01601f19169290920160200192915050565b602081526000610e426020830184610e6d565b600060208284031215610ebe57600080fd5b5035919050565b80356001600160a01b0381168114610edc57600080fd5b919050565b60008060408385031215610ef457600080fd5b610efd83610ec5565b946020939093013593505050565b600080600060608486031215610f2057600080fd5b610f2984610ec5565b9250610f3760208501610ec5565b9150604084013590509250925092565b600060208284031215610f5957600080fd5b610e4282610ec5565b8015158114610e2257600080fd5b60008060408385031215610f8357600080fd5b610f8c83610ec5565b91506020830135610f9c81610f62565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fce57600080fd5b813567ffffffffffffffff80821115610fe957610fe9610fa7565b604051601f8301601f19908116603f0116810190828211818310171561101157611011610fa7565b8160405283815286602085880101111561102a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561106057600080fd5b61106985610ec5565b935061107760208601610ec5565b925060408501359150606085013567ffffffffffffffff81111561109a57600080fd5b6110a687828801610fbd565b91505092959194509250565b600080604083850312156110c557600080fd5b6110ce83610ec5565b91506110dc60208401610ec5565b90509250929050565b600080600080600080600060e0888a03121561110057600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461113257600080fd5b93506080880135925060a088013567ffffffffffffffff81111561115557600080fd5b6111618a828b01610fbd565b92505060c0880135905092959891949750929550565b600181811c9082168061118b57607f821691505b6020821081036111ab57634e487b7160e01b600052602260045260246000fd5b50919050565b60006101008a83528960208401528860408401526bffffffffffffffffffffffff19881660608401528660808401528060a08401526111f281840187610e6d565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b6000825161122a818460208701610e49565b9190910192915050565b60006020828403121561124657600080fd5b8151610e4281610f62565b60006001820161127157634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906112ab90830184610e6d565b9695505050505050565b6000602082840312156112c757600080fd5b8151610e4281610e0c565b601f82111561044b57600081815260208120601f850160051c810160208610156112f95750805b601f850160051c820191505b8181101561131857828155600101611305565b505050505050565b815167ffffffffffffffff81111561133a5761133a610fa7565b61134e816113488454611177565b846112d2565b602080601f831160018114611383576000841561136b5750858301515b600019600386901b1c1916600185901b178555611318565b600085815260208120601f198616915b828110156113b257888601518255948401946001909101908401611393565b50858210156113d05787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe697066733a2f2f516d554b76696e793978326f51556567794a464642415555327135727675354373507a725561425344756b704851a2646970667358221220e18828ee8df71e0807a53db821b319416c0c2e1d2b9761b2de39a61c4555fc6d64736f6c63430008150033","sourceMap":"241:2873:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:207:26;;;;;;:::i;:::-;;:::i;:::-;;;565:14:36;;558:22;540:41;;528:2;513:18;937:207:26;;;;;;;;2365:89:23;;;:::i;:::-;;;;;;;:::i;3497:154::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:36;;;1679:51;;1667:2;1652:18;3497:154:23;1533:203:36;3323:113:23;;;;;;:::i;:::-;;:::i;:::-;;410:105:35;;;;;;;;;2324:25:36;;;2312:2;2297:18;410:105:35;2178:177:36;4143:578:23;;;;;;:::i;:::-;;:::i;4787:132::-;;;;;;:::i;:::-;;:::i;2185:118::-;;;;;;:::i;:::-;;:::i;1920:208::-;;;;;;:::i;:::-;;:::i;370:33:35:-;;;;;-1:-1:-1;;;;;370:33:35;;;2518:93:23;;;:::i;3718:144::-;;;;;;:::i;:::-;;:::i;4985:208::-;;;;;;:::i;:::-;;:::i;2898:214:35:-;;;;;;:::i;:::-;;:::i;578:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3928:153:23;;;;;;:::i;:::-;;:::i;328:36:35:-;;;;;-1:-1:-1;;;;;328:36:35;;;883:2009;;;;;;:::i;:::-;;:::i;937:207:26:-;1039:4;-1:-1:-1;;;;;;1062:35:26;;-1:-1:-1;;;1062:35:26;;:75;;;1101:36;1125:11;1101:23;:36::i;:::-;1055:82;937:207;-1:-1:-1;;937:207:26:o;2365:89:23:-;2410:13;2442:5;2435:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2365:89;:::o;3497:154::-;3564:7;3583:22;3597:7;3583:13;:22::i;:::-;-1:-1:-1;6008:7:23;6034:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6034:24:23;3623:21;5938:127;3323:113;3394:35;3403:2;3407:7;735:10:28;3394:8:23;:35::i;:::-;3323:113;;:::o;4143:578::-;-1:-1:-1;;;;;4237:16:23;;4233:87;;4276:33;;-1:-1:-1;;;4276:33:23;;4306:1;4276:33;;;1679:51:36;1652:18;;4276:33:23;;;;;;;;4233:87;4538:21;4562:34;4570:2;4574:7;735:10:28;4562:7:23;:34::i;:::-;4538:58;;4627:4;-1:-1:-1;;;;;4610:21:23;:13;-1:-1:-1;;;;;4610:21:23;;4606:109;;4654:50;;-1:-1:-1;;;4654:50:23;;-1:-1:-1;;;;;6854:15:36;;;4654:50:23;;;6836:34:36;6886:18;;;6879:34;;;6949:15;;6929:18;;;6922:43;6771:18;;4654:50:23;6596:375:36;4606:109:23;4223:498;4143:578;;;:::o;4787:132::-;4873:39;4890:4;4896:2;4900:7;4873:39;;;;;;;;;;;;:16;:39::i;:::-;4787:132;;;:::o;2185:118::-;2248:7;2274:22;2288:7;2274:13;:22::i;1920:208::-;1983:7;-1:-1:-1;;;;;2006:19:23;;2002:87;;2048:30;;-1:-1:-1;;;2048:30:23;;2075:1;2048:30;;;1679:51:36;1652:18;;2048:30:23;1533:203:36;2002:87:23;-1:-1:-1;;;;;;2105:16:23;;;;;:9;:16;;;;;;;1920:208::o;2518:93::-;2565:13;2597:7;2590:14;;;;;:::i;3718:144::-;3803:52;735:10:28;3836:8:23;3846;3803:18;:52::i;4985:208::-;5098:31;5111:4;5117:2;5121:7;5098:12;:31::i;:::-;5139:47;5162:4;5168:2;5172:7;5181:4;5139:22;:47::i;2898:214:35:-;2985:13;3010:22;3024:7;3010:13;:22::i;:::-;;3043:62;;;;;;;;;;;;;;;;;;2898:214;-1:-1:-1;;2898:214:35:o;3928:153:23:-;-1:-1:-1;;;;;4039:25:23;;;4016:4;4039:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3928:153::o;883:2009:35:-;1201:7;1258:30;1241:13;;:47;1220:112;;;;-1:-1:-1;;;1220:112:35;;7178:2:36;1220:112:35;;;7160:21:36;7217:2;7197:18;;;7190:30;-1:-1:-1;;;7236:18:36;;;7229:48;7294:18;;1220:112:35;6976:342:36;1220:112:35;1363:27;;;;1394:10;1363:41;1342:121;;;;-1:-1:-1;;;1342:121:35;;7525:2:36;1342:121:35;;;7507:21:36;7564:2;7544:18;;;7537:30;7603:34;7583:18;;;7576:62;-1:-1:-1;;;7654:18:36;;;7647:31;7695:19;;1342:121:35;7323:397:36;1342:121:35;1516:183;;;;;;;7938:19:36;;;7973:12;;;7966:28;;;8010:12;;;8003:28;;;-1:-1:-1;;8061:44:36;;8047:12;;;8040:66;1516:183:35;;;;;;;;;8122:13:36;;;;1516:183:35;;1493:216;;;;;;;;;-1:-1:-1;1728:22:35;;;:12;:22;;;;;;;;;1727:23;1719:56;;;;-1:-1:-1;;;1719:56:35;;8348:2:36;1719:56:35;;;8330:21:36;8387:2;8367:18;;;8360:30;-1:-1:-1;;;8406:18:36;;;8399:50;8466:18;;1719:56:35;8146:344:36;1719:56:35;1878:21;;2367:18;;1928:475;;1800:23;;;;-1:-1:-1;;;;;1878:21:35;;;;1928:475;;2080:15;;2117:18;;2157:30;;2209:18;;2249:15;;2286:11;;2319:26;;2367:18;;1928:475;;;:::i;:::-;;;;-1:-1:-1;;1928:475:35;;;;;;;;;;;;;;-1:-1:-1;;;;;1928:475:35;-1:-1:-1;;;1928:475:35;;;1878:539;;;1928:475;1878:539;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1786:631;;;;2436:18;2428:49;;;;-1:-1:-1;;;2428:49:35;;9799:2:36;2428:49:35;;;9781:21:36;9838:2;9818:18;;;9811:30;-1:-1:-1;;;9857:18:36;;;9850:48;9915:18;;2428:49:35;9597:342:36;2428:49:35;2488:24;2526:15;2515:35;;;;;;;;;;;;:::i;:::-;2488:62;;2568:19;2560:59;;;;-1:-1:-1;;;2560:59:35;;10396:2:36;2560:59:35;;;10378:21:36;10435:2;10415:18;;;10408:30;10474:29;10454:18;;;10447:57;10521:18;;2560:59:35;10194:351:36;2560:59:35;2630:22;;;;:12;:22;;;;;:29;;-1:-1:-1;;2630:29:35;2655:4;2630:29;;;2688:12;:14;;;2630:22;2688:14;;;:::i;:::-;;;;;2670:32;;2712:26;2718:10;2730:7;2712:5;:26::i;:::-;2748:112;2774:7;2748:112;;;;;;;;;;;;;;;;;:12;:112::i;:::-;2878:7;883:2009;-1:-1:-1;;;;;;;;;;;;883:2009:35:o;1561:300:23:-;1663:4;-1:-1:-1;;;;;;1698:40:23;;-1:-1:-1;;;1698:40:23;;:104;;-1:-1:-1;;;;;;;1754:48:23;;-1:-1:-1;;;1754:48:23;1698:104;:156;;;-1:-1:-1;;;;;;;;;;861:40:30;;;1818:36:23;762:146:30;16138:241:23;16201:7;5799:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5799:16:23;;16263:88;;16309:31;;-1:-1:-1;;;16309:31:23;;;;;2324:25:36;;;2297:18;;16309:31:23;2178:177:36;14418:120:23;14498:33;14507:2;14511:7;14520:4;14526;14498:8;:33::i;8838:795::-;8924:7;5799:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5799:16:23;;;;9035:18;;;9031:86;;9069:37;9086:4;9092;9098:7;9069:16;:37::i;:::-;-1:-1:-1;;;;;9161:18:23;;;9157:256;;9277:48;9294:1;9298:7;9315:1;9319:5;9277:8;:48::i;:::-;-1:-1:-1;;;;;9368:15:23;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9368:20:23;;;9157:256;-1:-1:-1;;;;;9427:16:23;;;9423:107;;-1:-1:-1;;;;;9487:13:23;;;;;;:9;:13;;;;;:18;;9504:1;9487:18;;;9423:107;9540:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9540:21:23;-1:-1:-1;;;;;9540:21:23;;;;;;;;;9577:27;;9540:16;;9577:27;;;;;;;9622:4;8838:795;-1:-1:-1;;;;8838:795:23:o;15591:312::-;-1:-1:-1;;;;;15698:22:23;;15694:91;;15743:31;;-1:-1:-1;;;15743:31:23;;-1:-1:-1;;;;;1697:32:36;;15743:31:23;;;1679:51:36;1652:18;;15743:31:23;1533:203:36;15694:91:23;-1:-1:-1;;;;;15794:25:23;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;15794:46:23;;;;;;;;;;15855:41;;540::36;;;15855::23;;513:18:36;15855:41:23;;;;;;;15591:312;;;:::o;16918:782::-;-1:-1:-1;;;;;17034:14:23;;;:18;17030:664;;17072:71;;-1:-1:-1;;;17072:71:23;;-1:-1:-1;;;;;17072:36:23;;;;;:71;;735:10:28;;17123:4:23;;17129:7;;17138:4;;17072:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17072:71:23;;;;;;;;-1:-1:-1;;17072:71:23;;;;;;;;;;;;:::i;:::-;;;17068:616;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17381:6;:13;17398:1;17381:18;17377:293;;17430:25;;-1:-1:-1;;;17430:25:23;;-1:-1:-1;;;;;1697:32:36;;17430:25:23;;;1679:51:36;1652:18;;17430:25:23;1533:203:36;17377:293:23;17622:6;17616:13;17607:6;17603:2;17599:15;17592:38;17068:616;-1:-1:-1;;;;;;17190:51:23;;-1:-1:-1;;;17190:51:23;17186:130;;17272:25;;-1:-1:-1;;;17272:25:23;;-1:-1:-1;;;;;1697:32:36;;17272:25:23;;;1679:51:36;1652:18;;17272:25:23;1533:203:36;17186:130:23;17144:186;16918:782;;;;:::o;9955:327::-;-1:-1:-1;;;;;10022:16:23;;10018:87;;10061:33;;-1:-1:-1;;;10061:33:23;;10091:1;10061:33;;;1679:51:36;1652:18;;10061:33:23;1533:203:36;10018:87:23;10114:21;10138:32;10146:2;10150:7;10167:1;10138:7;:32::i;:::-;10114:56;-1:-1:-1;;;;;;10184:27:23;;;10180:96;;10234:31;;-1:-1:-1;;;10234:31:23;;10262:1;10234:31;;;1679:51:36;1652:18;;10234:31:23;1533:203:36;1922:167:26;2013:19;;;;:10;:19;;;;;:31;2035:9;2013:19;:31;:::i;:::-;-1:-1:-1;2059:23:26;;2324:25:36;;;2059:23:26;;2312:2:36;2297:18;2059:23:26;;;;;;;1922:167;;:::o;14720:662:23:-;14880:9;:31;;;-1:-1:-1;;;;;;14893:18:23;;;;14880:31;14876:460;;;14927:13;14943:22;14957:7;14943:13;:22::i;:::-;14927:38;-1:-1:-1;;;;;;15093:18:23;;;;;;:35;;;15124:4;-1:-1:-1;;;;;15115:13:23;:5;-1:-1:-1;;;;;15115:13:23;;;15093:35;:69;;;;;15133:29;15150:5;15157:4;15133:16;:29::i;:::-;15132:30;15093:69;15089:142;;;15189:27;;-1:-1:-1;;;15189:27:23;;-1:-1:-1;;;;;1697:32:36;;15189:27:23;;;1679:51:36;1652:18;;15189:27:23;1533:203:36;15089:142:23;15249:9;15245:81;;;15303:7;15299:2;-1:-1:-1;;;;;15283:28:23;15292:5;-1:-1:-1;;;;;15283:28:23;;;;;;;;;;;15245:81;14913:423;14876:460;-1:-1:-1;;15346:24:23;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15346:29:23;-1:-1:-1;;;;;15346:29:23;;;;;;;;;;14720:662::o;7082:368::-;7194:38;7208:5;7215:7;7224;7194:13;:38::i;:::-;7189:255;;-1:-1:-1;;;;;7252:19:23;;7248:186;;7298:31;;-1:-1:-1;;;7298:31:23;;;;;2324:25:36;;;2297:18;;7298:31:23;2178:177:36;7248:186:23;7375:44;;-1:-1:-1;;;7375:44:23;;-1:-1:-1;;;;;13931:32:36;;7375:44:23;;;13913:51:36;13980:18;;;13973:34;;;13886:18;;7375:44:23;13739:274:36;6376:272:23;6479:4;-1:-1:-1;;;;;6514:21:23;;;;;;:127;;;6561:7;-1:-1:-1;;;;;6552:16:23;:5;-1:-1:-1;;;;;6552:16:23;;:52;;;;6572:32;6589:5;6596:7;6572:16;:32::i;:::-;6552:88;;;-1:-1:-1;6008:7:23;6034:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6608:32:23;;;6034:24;;6608:32;6552:88;6495:146;6376:272;-1:-1:-1;;;;6376:272:23:o;14:131:36:-;-1:-1:-1;;;;;;88:32:36;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:36:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:36;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:36;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:36:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:36;;1348:180;-1:-1:-1;1348:180:36:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:36;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:36:o;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2693:186::-;2752:6;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2844:29;2863:9;2844:29;:::i;3066:118::-;3152:5;3145:13;3138:21;3131:5;3128:32;3118:60;;3174:1;3171;3164:12;3189:315;3254:6;3262;3315:2;3303:9;3294:7;3290:23;3286:32;3283:52;;;3331:1;3328;3321:12;3283:52;3354:29;3373:9;3354:29;:::i;:::-;3344:39;;3433:2;3422:9;3418:18;3405:32;3446:28;3468:5;3446:28;:::i;:::-;3493:5;3483:15;;;3189:315;;;;;:::o;3509:127::-;3570:10;3565:3;3561:20;3558:1;3551:31;3601:4;3598:1;3591:15;3625:4;3622:1;3615:15;3641:718;3683:5;3736:3;3729:4;3721:6;3717:17;3713:27;3703:55;;3754:1;3751;3744:12;3703:55;3790:6;3777:20;3816:18;3853:2;3849;3846:10;3843:36;;;3859:18;;:::i;:::-;3934:2;3928:9;3902:2;3988:13;;-1:-1:-1;;3984:22:36;;;4008:2;3980:31;3976:40;3964:53;;;4032:18;;;4052:22;;;4029:46;4026:72;;;4078:18;;:::i;:::-;4118:10;4114:2;4107:22;4153:2;4145:6;4138:18;4199:3;4192:4;4187:2;4179:6;4175:15;4171:26;4168:35;4165:55;;;4216:1;4213;4206:12;4165:55;4280:2;4273:4;4265:6;4261:17;4254:4;4246:6;4242:17;4229:54;4327:1;4320:4;4315:2;4307:6;4303:15;4299:26;4292:37;4347:6;4338:15;;;;;;3641:718;;;;:::o;4364:537::-;4459:6;4467;4475;4483;4536:3;4524:9;4515:7;4511:23;4507:33;4504:53;;;4553:1;4550;4543:12;4504:53;4576:29;4595:9;4576:29;:::i;:::-;4566:39;;4624:38;4658:2;4647:9;4643:18;4624:38;:::i;:::-;4614:48;;4709:2;4698:9;4694:18;4681:32;4671:42;;4764:2;4753:9;4749:18;4736:32;4791:18;4783:6;4780:30;4777:50;;;4823:1;4820;4813:12;4777:50;4846:49;4887:7;4878:6;4867:9;4863:22;4846:49;:::i;:::-;4836:59;;;4364:537;;;;;;;:::o;5091:260::-;5159:6;5167;5220:2;5208:9;5199:7;5195:23;5191:32;5188:52;;;5236:1;5233;5226:12;5188:52;5259:29;5278:9;5259:29;:::i;:::-;5249:39;;5307:38;5341:2;5330:9;5326:18;5307:38;:::i;:::-;5297:48;;5091:260;;;;;:::o;5356:850::-;5478:6;5486;5494;5502;5510;5518;5526;5579:3;5567:9;5558:7;5554:23;5550:33;5547:53;;;5596:1;5593;5586:12;5547:53;5619:23;;;-1:-1:-1;5689:2:36;5674:18;;5661:32;;-1:-1:-1;5740:2:36;5725:18;;5712:32;;-1:-1:-1;5794:2:36;5779:18;;5766:32;-1:-1:-1;;5827:43:36;;5817:54;;5807:82;;5885:1;5882;5875:12;5807:82;5908:5;-1:-1:-1;5960:3:36;5945:19;;5932:33;;-1:-1:-1;6016:3:36;6001:19;;5988:33;6044:18;6033:30;;6030:50;;;6076:1;6073;6066:12;6030:50;6099:49;6140:7;6131:6;6120:9;6116:22;6099:49;:::i;:::-;6089:59;;;6195:3;6184:9;6180:19;6167:33;6157:43;;5356:850;;;;;;;;;;:::o;6211:380::-;6290:1;6286:12;;;;6333;;;6354:61;;6408:4;6400:6;6396:17;6386:27;;6354:61;6461:2;6453:6;6450:14;6430:18;6427:38;6424:161;;6507:10;6502:3;6498:20;6495:1;6488:31;6542:4;6539:1;6532:15;6570:4;6567:1;6560:15;6424:161;;6211:380;;;:::o;8495:805::-;8801:4;8830:3;8860:6;8849:9;8842:25;8903:6;8898:2;8887:9;8883:18;8876:34;8946:6;8941:2;8930:9;8926:18;8919:34;9005:26;9001:31;8993:6;8989:44;8984:2;8973:9;8969:18;8962:72;9071:6;9065:3;9054:9;9050:19;9043:35;9115:2;9109:3;9098:9;9094:19;9087:31;9135:45;9176:2;9165:9;9161:18;9153:6;9135:45;:::i;:::-;9211:3;9196:19;;9189:35;;;;-1:-1:-1;;;;;;;9261:32:36;;;;9255:3;9240:19;;;9233:61;9127:53;8495:805;-1:-1:-1;;;;;;8495:805:36:o;9305:287::-;9434:3;9472:6;9466:13;9488:66;9547:6;9542:3;9535:4;9527:6;9523:17;9488:66;:::i;:::-;9570:16;;;;;9305:287;-1:-1:-1;;9305:287:36:o;9944:245::-;10011:6;10064:2;10052:9;10043:7;10039:23;10035:32;10032:52;;;10080:1;10077;10070:12;10032:52;10112:9;10106:16;10131:28;10153:5;10131:28;:::i;10550:232::-;10589:3;10610:17;;;10607:140;;10669:10;10664:3;10660:20;10657:1;10650:31;10704:4;10701:1;10694:15;10732:4;10729:1;10722:15;10607:140;-1:-1:-1;10774:1:36;10763:13;;10550:232::o;10787:489::-;-1:-1:-1;;;;;11056:15:36;;;11038:34;;11108:15;;11103:2;11088:18;;11081:43;11155:2;11140:18;;11133:34;;;11203:3;11198:2;11183:18;;11176:31;;;10981:4;;11224:46;;11250:19;;11242:6;11224:46;:::i;:::-;11216:54;10787:489;-1:-1:-1;;;;;;10787:489:36:o;11281:249::-;11350:6;11403:2;11391:9;11382:7;11378:23;11374:32;11371:52;;;11419:1;11416;11409:12;11371:52;11451:9;11445:16;11470:30;11494:5;11470:30;:::i;11661:545::-;11763:2;11758:3;11755:11;11752:448;;;11799:1;11824:5;11820:2;11813:17;11869:4;11865:2;11855:19;11939:2;11927:10;11923:19;11920:1;11916:27;11910:4;11906:38;11975:4;11963:10;11960:20;11957:47;;;-1:-1:-1;11998:4:36;11957:47;12053:2;12048:3;12044:12;12041:1;12037:20;12031:4;12027:31;12017:41;;12108:82;12126:2;12119:5;12116:13;12108:82;;;12171:17;;;12152:1;12141:13;12108:82;;;12112:3;;;11661:545;;;:::o;12382:1352::-;12508:3;12502:10;12535:18;12527:6;12524:30;12521:56;;;12557:18;;:::i;:::-;12586:97;12676:6;12636:38;12668:4;12662:11;12636:38;:::i;:::-;12630:4;12586:97;:::i;:::-;12738:4;;12802:2;12791:14;;12819:1;12814:663;;;;13521:1;13538:6;13535:89;;;-1:-1:-1;13590:19:36;;;13584:26;13535:89;-1:-1:-1;;12339:1:36;12335:11;;;12331:24;12327:29;12317:40;12363:1;12359:11;;;12314:57;13637:81;;12784:944;;12814:663;11608:1;11601:14;;;11645:4;11632:18;;-1:-1:-1;;12850:20:36;;;12968:236;12982:7;12979:1;12976:14;12968:236;;;13071:19;;;13065:26;13050:42;;13163:27;;;;13131:1;13119:14;;;;12998:19;;12968:236;;;12972:3;13232:6;13223:7;13220:19;13217:201;;;13293:19;;;13287:26;-1:-1:-1;;13376:1:36;13372:14;;;13388:3;13368:24;13364:37;13360:42;13345:58;13330:74;;13217:201;-1:-1:-1;;;;;13464:1:36;13448:14;;;13444:22;13431:36;;-1:-1:-1;12382:1352:36:o","linkReferences":{}},"methodIdentifiers":{"alignedServiceManager()":"f19cd882","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","elfCommitment()":"2212d607","getApproved(uint256)":"081812fc","isApprovedForAll(address,address)":"e985e9c5","mintedProofs(bytes32)":"dd3df4bd","name()":"06fdde03","ownerOf(uint256)":"6352211e","paymentServiceAddr()":"90a05f2e","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenURI(uint256)":"c87b56dd","transferFrom(address,address,uint256)":"23b872dd","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)":"fa534dc0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alignedServiceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_paymentServiceAddr\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"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\":false,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"}],\"name\":\"BatchMetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"MetadataUpdate\",\"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\":[],\"name\":\"alignedServiceManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"elfCommitment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"mintedProofs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"paymentServiceAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"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.\"},\"BatchMetadataUpdate(uint256,uint256)\":{\"details\":\"This event emits when the metadata of a range of tokens is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFTs.\"},\"MetadataUpdate(uint256)\":{\"details\":\"This event emits when the metadata of a token is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFT.\"},\"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}.\"},\"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}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/VerifierContract.sol\":\"VerifierContract\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol\":{\"keccak256\":\"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd\",\"dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b\",\"dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd\",\"dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22\",\"dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":{\"keccak256\":\"0xcc6f49e0c57072d6a18eef0d5fc22a4cc20462c18f0c365d2dd9a2c732fde670\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24915e61c7896c336b60788408cd5792b97b782e98e392920a2c55eb1803fe96\",\"dweb:/ipfs/QmVHhcmFnMYZBCjnVUk6f5quMCDsBR2j669a1nuMiGWY9Z\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/VerifierContract.sol\":{\"keccak256\":\"0xc8659bc4c13fefdfa3dcbc8cfefc578a7bbfa3e265d0058cd2cd474bdab87966\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a218a59d1a5502392148e281e6018d7214fc5dbe3e830ae683601e16986734f8\",\"dweb:/ipfs/QmVJ6yQ4vijhg6FEZQnaBY8YJspFxEgPqZZhPiiQHahVdw\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_alignedServiceManager","type":"address"},{"internalType":"address","name":"_paymentServiceAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721IncorrectOwner"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721InsufficientApproval"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC721InvalidApprover"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"type":"error","name":"ERC721InvalidOperator"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721InvalidOwner"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC721InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC721InvalidSender"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721NonexistentToken"},{"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":"uint256","name":"_fromTokenId","type":"uint256","indexed":false},{"internalType":"uint256","name":"_toTokenId","type":"uint256","indexed":false}],"type":"event","name":"BatchMetadataUpdate","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256","indexed":false}],"type":"event","name":"MetadataUpdate","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":[],"stateMutability":"view","type":"function","name":"alignedServiceManager","outputs":[{"internalType":"address","name":"","type":"address"}]},{"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":"elfCommitment","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"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":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"mintedProofs","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"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":"paymentServiceAddr","outputs":[{"internalType":"address","name":"","type":"address"}]},{"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":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}]},{"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":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"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}."},"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}."},"tokenURI(uint256)":{"details":"See {IERC721Metadata-tokenURI}."},"transferFrom(address,address,uint256)":{"details":"See {IERC721-transferFrom}."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/VerifierContract.sol":"VerifierContract"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol":{"keccak256":"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44","urls":["bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd","dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol":{"keccak256":"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d","urls":["bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b","dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol":{"keccak256":"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784","urls":["bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd","dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4","urls":["bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7","dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol":{"keccak256":"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49","urls":["bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22","dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol":{"keccak256":"0xcc6f49e0c57072d6a18eef0d5fc22a4cc20462c18f0c365d2dd9a2c732fde670","urls":["bzz-raw://24915e61c7896c336b60788408cd5792b97b782e98e392920a2c55eb1803fe96","dweb:/ipfs/QmVHhcmFnMYZBCjnVUk6f5quMCDsBR2j669a1nuMiGWY9Z"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"keccak256":"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1","urls":["bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02","dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792","urls":["bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453","dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133","urls":["bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8","dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72","urls":["bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc","dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"],"license":"MIT"},"src/VerifierContract.sol":{"keccak256":"0xc8659bc4c13fefdfa3dcbc8cfefc578a7bbfa3e265d0058cd2cd474bdab87966","urls":["bzz-raw://a218a59d1a5502392148e281e6018d7214fc5dbe3e830ae683601e16986734f8","dweb:/ipfs/QmVJ6yQ4vijhg6FEZQnaBY8YJspFxEgPqZZhPiiQHahVdw"],"license":"UNLICENSED"}},"version":1},"id":35} \ No newline at end of file diff --git a/examples/zkquiz/quiz/script/src/main.rs b/examples/zkquiz/quiz/script/src/main.rs index 1880a85b9..383d3a763 100644 --- a/examples/zkquiz/quiz/script/src/main.rs +++ b/examples/zkquiz/quiz/script/src/main.rs @@ -5,7 +5,7 @@ use std::str::FromStr; use std::sync::Arc; use aligned_sdk::core::types::{AlignedVerificationData, Chain, ProvingSystemId, VerificationData}; -use aligned_sdk::sdk::{submit_and_wait, get_next_nonce}; +use aligned_sdk::sdk::{submit_and_wait_verification, get_next_nonce}; use clap::Parser; use dialoguer::Confirm; use ethers::prelude::*; @@ -72,7 +72,7 @@ async fn main() { let client = ProverClient::new(); let (pk, vk) = client.setup(ELF); - match client.prove(&pk, stdin).compressed().run() { + match client.prove(&pk, stdin).run() { Ok(proof) => { println!("Proof generated successfully. Verifying proof..."); @@ -109,35 +109,30 @@ async fn main() { let nonce = get_next_nonce(&rpc_url, wallet.address(), BATCHER_PAYMENTS_ADDRESS).await .expect("Failed to get next nonce"); - match submit_and_wait( + match submit_and_wait_verification( BATCHER_URL, &rpc_url, Chain::Holesky, &verification_data, wallet.clone(), - nonce + nonce, + BATCHER_PAYMENTS_ADDRESS ) .await { - Ok(maybe_aligned_verification_data) => match maybe_aligned_verification_data { - Some(aligned_verification_data) => { - println!( - "Proof submitted and verified successfully on batch {}, claiming prize...", - hex::encode(aligned_verification_data.batch_merkle_root) - ); - - if let Err(e) = verify_batch_inclusion( - aligned_verification_data.clone(), - signer.clone(), - args.verifier_contract_address, - ) - .await - { - println!("Failed to claim prize: {:?}", e); - } - } - None => { - println!("Proof submission failed. No verification data"); + Ok(aligned_verification_data) => { + println!( + "Proof submitted and verified successfully on batch {}, claiming prize...", + hex::encode(aligned_verification_data.batch_merkle_root) + ); + if let Err(e) = verify_batch_inclusion( + aligned_verification_data.clone(), + signer.clone(), + args.verifier_contract_address, + ) + .await + { + println!("Failed to claim prize: {:?}", e); } }, Err(e) => {