Contract Overview
Balance:
0.001200000000000006 AVAX
AVAX Value:
$0.02 (@ $16.61/AVAX)
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 7 internal transactions
[ Download CSV Export ]
Contract Name:
CashbagManager
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-02-08 */ // Sources flattened with hardhat v2.8.3 https://hardhat.org // File hardhat/[email protected] // SPDX-License-Identifier: MIT AND UNLICENSED AND GPL-3.0 pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } } // File contracts/cashbag_verifier.sol // // Copyright 2017 Christian Reitwiessner // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // 2019 OKIMS // ported to solidity 0.6 // fixed linter warnings // added requiere error messages // // pragma solidity ^0.8.9; library Pairing { struct G1Point { uint X; uint Y; } // Encoding of field elements is: X[0] * z + X[1] struct G2Point { uint[2] X; uint[2] Y; } /// @return the generator of G1 function P1() internal pure returns (G1Point memory) { return G1Point(1, 2); } /// @return the generator of G2 function P2() internal pure returns (G2Point memory) { // Original code point return G2Point( [11559732032986387107991004021392285783925812861821192530917403151452391805634, 10857046999023057135944570762232829481370756359578518086990519993285655852781], [4082367875863433681332203403145435568316851327593401208105741076214120093531, 8495653923123431417604973247489272438418190587263600148770280649306958101930] ); /* // Changed by Jordi point return G2Point( [10857046999023057135944570762232829481370756359578518086990519993285655852781, 11559732032986387107991004021392285783925812861821192530917403151452391805634], [8495653923123431417604973247489272438418190587263600148770280649306958101930, 4082367875863433681332203403145435568316851327593401208105741076214120093531] ); */ } /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero. function negate(G1Point memory p) internal pure returns (G1Point memory r) { // The prime q in the base field F_q for G1 uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; if (p.X == 0 && p.Y == 0) return G1Point(0, 0); return G1Point(p.X, q - (p.Y % q)); } /// @return r the sum of two points of G1 function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) { uint[4] memory input; input[0] = p1.X; input[1] = p1.Y; input[2] = p2.X; input[3] = p2.Y; bool success; // solium-disable-next-line security/no-inline-assembly assembly { success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60) // Use "invalid" to make gas estimation work switch success case 0 { invalid() } } require(success,"pairing-add-failed"); } /// @return r the product of a point on G1 and a scalar, i.e. /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) { uint[3] memory input; input[0] = p.X; input[1] = p.Y; input[2] = s; bool success; // solium-disable-next-line security/no-inline-assembly assembly { success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60) // Use "invalid" to make gas estimation work switch success case 0 { invalid() } } require (success,"pairing-mul-failed"); } /// @return the result of computing the pairing check /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1 /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should /// return true. function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) { require(p1.length == p2.length,"pairing-lengths-failed"); uint elements = p1.length; uint inputSize = elements * 6; uint[] memory input = new uint[](inputSize); for (uint i = 0; i < elements; i++) { input[i * 6 + 0] = p1[i].X; input[i * 6 + 1] = p1[i].Y; input[i * 6 + 2] = p2[i].X[0]; input[i * 6 + 3] = p2[i].X[1]; input[i * 6 + 4] = p2[i].Y[0]; input[i * 6 + 5] = p2[i].Y[1]; } uint[1] memory out; bool success; // solium-disable-next-line security/no-inline-assembly assembly { success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20) // Use "invalid" to make gas estimation work switch success case 0 { invalid() } } require(success,"pairing-opcode-failed"); return out[0] != 0; } /// Convenience method for a pairing check for two pairs. function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](2); G2Point[] memory p2 = new G2Point[](2); p1[0] = a1; p1[1] = b1; p2[0] = a2; p2[1] = b2; return pairing(p1, p2); } /// Convenience method for a pairing check for three pairs. function pairingProd3( G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2, G1Point memory c1, G2Point memory c2 ) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](3); G2Point[] memory p2 = new G2Point[](3); p1[0] = a1; p1[1] = b1; p1[2] = c1; p2[0] = a2; p2[1] = b2; p2[2] = c2; return pairing(p1, p2); } /// Convenience method for a pairing check for four pairs. function pairingProd4( G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2, G1Point memory c1, G2Point memory c2, G1Point memory d1, G2Point memory d2 ) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](4); G2Point[] memory p2 = new G2Point[](4); p1[0] = a1; p1[1] = b1; p1[2] = c1; p1[3] = d1; p2[0] = a2; p2[1] = b2; p2[2] = c2; p2[3] = d2; return pairing(p1, p2); } } contract Verifier { using Pairing for *; struct VerifyingKey { Pairing.G1Point alfa1; Pairing.G2Point beta2; Pairing.G2Point gamma2; Pairing.G2Point delta2; Pairing.G1Point[] IC; } struct Proof { Pairing.G1Point A; Pairing.G2Point B; Pairing.G1Point C; } function verifyingKey() internal pure returns (VerifyingKey memory vk) { vk.alfa1 = Pairing.G1Point( 7467796778264498634631944894706172448990409983329037625491375180910931874265, 16605418660745546860601641505967473285827601288402912188681192516392226764774 ); vk.beta2 = Pairing.G2Point( [521290181315496077321720146591963896821216009977085516909349257794111097074, 14016180290301960662739883067232247011443258100905725730063942714139098341106], [13413489582234934896651061027481515272410877876531989178187139833498165014677, 7497322429734100271594698248430046412988693656255501580060443636306107231043] ); vk.gamma2 = Pairing.G2Point( [11559732032986387107991004021392285783925812861821192530917403151452391805634, 10857046999023057135944570762232829481370756359578518086990519993285655852781], [4082367875863433681332203403145435568316851327593401208105741076214120093531, 8495653923123431417604973247489272438418190587263600148770280649306958101930] ); vk.delta2 = Pairing.G2Point( [13620227423858030106968884443782349401387618267395765438554944172976126554140, 18383875736701370454503047127780090903004221441279044996096231572647308727977], [10731238774937577478441093350495318258269114178190434410158271624310097554404, 811359493436801780647031752691811982908063981760702476761830738381829517280] ); vk.IC = new Pairing.G1Point[](4); vk.IC[0] = Pairing.G1Point( 21380625667200387528401129494482519663690443407178035735613871875914461254980, 16493919322223292842377930174482141353320302353444594004620314121253752619386 ); vk.IC[1] = Pairing.G1Point( 11038973125721914099800221906018918348960416730007261309079075397778347451981, 9005473273089848277684595323664681654388658103149161233613526643769785570927 ); vk.IC[2] = Pairing.G1Point( 628896472802401632616699392795734814326511455056714619270984877917538731001, 8559617517996988313301771792829922924409262956417953005579902261434141099708 ); vk.IC[3] = Pairing.G1Point( 14045438792201697807793452729889490184571621721716852148191971702300426958079, 6101361649744643088351328445551466940771106232545048972570850120315102331200 ); } function verify(uint[] memory input, Proof memory proof) internal view returns (uint) { uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617; VerifyingKey memory vk = verifyingKey(); require(input.length + 1 == vk.IC.length,"verifier-bad-input"); // Compute the linear combination vk_x Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0); for (uint i = 0; i < input.length; i++) { require(input[i] < snark_scalar_field,"verifier-gte-snark-scalar-field"); vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[i + 1], input[i])); } vk_x = Pairing.addition(vk_x, vk.IC[0]); if (!Pairing.pairingProd4( Pairing.negate(proof.A), proof.B, vk.alfa1, vk.beta2, vk_x, vk.gamma2, proof.C, vk.delta2 )) return 1; return 0; } /// @return r bool true if proof is valid function verifyProof( uint[2] memory a, uint[2][2] memory b, uint[2] memory c, uint[3] memory input ) public view returns (bool r) { Proof memory proof; proof.A = Pairing.G1Point(a[0], a[1]); proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]); proof.C = Pairing.G1Point(c[0], c[1]); uint[] memory inputValues = new uint[](input.length); for(uint i = 0; i < input.length; i++){ inputValues[i] = input[i]; } if (verify(inputValues, proof) == 0) { return true; } else { return false; } } } // File contracts/CashbagManager.sol pragma solidity ^0.8.9; // TODO: add randomness to payouts contract CashbagManager is Verifier { enum CashbagPhase { Open, Finished } struct Cashbag { // Cashbag owner address address owner; // Starting amount of cash for grabs, in wei uint256 startingCash; // Amount of cash for grabs, in wei uint256 cash; // Max number of participants uint128 maxParticipants; // Timestamp UNIX, when claim period is over uint256 claimPeriodOver; // List of participant addresses address[] participantAddresses; // Password hash is computed via zksnark circuit. uint256 passwordHash; uint96 salt; } // [cashbagId] => cashbag Cashbag[] public cashbags; address private owner; uint256 private commissionFeeBalance = 0; struct Participant { ParticipantStatus status; } enum ParticipantStatus { NotClaimed, Claimed } // [cashbagId][participantAddress] => Participant mapping(uint256 => mapping(address => Participant)) public cashbagParticipants; modifier isOwner() { require(owner == msg.sender, 'Only owner can call this function'); _; } constructor() { owner = msg.sender; } /** * Withdrawal of commission fee balance for owner */ function withdrawCommissionFee() external isOwner { uint256 commissionFee = commissionFeeBalance; commissionFeeBalance = 0; (bool success, ) = msg.sender.call{value: commissionFee}(''); require(success, 'Failed to withdraw commission fee'); } /** * Gets cashbag via id */ function getCashbag(uint256 _cashBagId) external view returns (Cashbag memory) { require(_cashBagId < cashbags.length, 'Cashbag ID out of bounds'); return cashbags[_cashBagId]; } /** * Creates a new cashbag */ function createCashbag( uint64 _maxParticipants, uint96 _salt, uint256 _passwordHash, uint256 _claimPeriod ) external payable { require(_maxParticipants > 0, 'Need to have at least one participant'); Cashbag memory cashbag; cashbag.owner = msg.sender; cashbag.maxParticipants = _maxParticipants; cashbag.cash = msg.value; cashbag.startingCash = msg.value; cashbag.salt = _salt; cashbag.claimPeriodOver = block.timestamp + _claimPeriod; cashbag.passwordHash = _passwordHash; cashbags.push(cashbag); emit CashbagCreated(cashbags.length - 1, msg.sender); } /** * Check if cashbag is finished. */ function isFinished(uint256 _cashbagId) external view returns (bool) { CashbagPhase phase = getCurrentPhase(_cashbagId); return phase == CashbagPhase.Finished; } /** * Check if message sender can claim payout */ function hasClaimedPayout(uint256 _cashbagId) external view returns (bool) { Participant memory participant = cashbagParticipants[_cashbagId][ msg.sender ]; return participant.status == ParticipantStatus.Claimed; } /** * Retrieves cashbags owned by the message sender */ function getOwnerCashbags() external view returns ( Cashbag[] memory, uint256[] memory, uint256 ) { Cashbag[] memory ownerCashbags = new Cashbag[](cashbags.length); uint256[] memory ownerCashbagsIds = new uint256[](cashbags.length); uint256 numOwnerCashbags = 0; for (uint256 i = 0; i < cashbags.length; i++) { if (cashbags[i].owner == msg.sender) { ownerCashbags[numOwnerCashbags] = cashbags[i]; ownerCashbagsIds[numOwnerCashbags] = i; numOwnerCashbags++; } } return (ownerCashbags, ownerCashbagsIds, numOwnerCashbags); } /** * Returns current phase (OPEN vs FINISHED) for a given Cashbag ID */ function getCurrentPhase(uint256 _cashbagId) internal view returns (CashbagPhase) { require(_cashbagId < cashbags.length, 'Cashbag not found'); Cashbag storage cashbag = cashbags[_cashbagId]; bool isParticipantsListNotFull = cashbag.participantAddresses.length < cashbag.maxParticipants; bool isInClaimPeriod = cashbag.claimPeriodOver >= block.timestamp; return isParticipantsListNotFull && isInClaimPeriod ? CashbagPhase.Open : CashbagPhase.Finished; } /** * Take from cashbag by revealing the previously committed password. * This can be done only during the reveal phase. */ function takeFromCashbag( uint256 _cashbagId, uint256 _passwordHash, uint256[2] memory proofA, uint256[2][2] memory proofB, uint256[2] memory proofC ) external payable { require(_cashbagId < cashbags.length, 'Cashbag not found'); Participant storage participant = cashbagParticipants[_cashbagId][ msg.sender ]; Cashbag storage cashbag = cashbags[_cashbagId]; CashbagPhase currentPhase = getCurrentPhase(_cashbagId); require( cashbag.owner != msg.sender, 'Owner cannot claim their own cashbag' ); require( participant.status == ParticipantStatus.NotClaimed, 'Participant has already claimed this cashbag' ); require(currentPhase == CashbagPhase.Open, 'Cashbag has finished'); require(_passwordHash == cashbag.passwordHash, 'Password mismatch'); require( verifyProof( proofA, proofB, proofC, [ // Hash has already been verified. _passwordHash, // Expect the proof to be based on sender address. uint256(uint160(address(msg.sender))), // Expect the proof to be based on the cashbag salt. uint256(cashbag.salt) ] ), 'Verification failed' ); cashbag.participantAddresses.push(msg.sender); participant.status = ParticipantStatus.Claimed; // Starting cash instead of cash as cash decreases overtime uint256 payoutAmount = cashbags[_cashbagId].startingCash / cashbag.maxParticipants; cashbag.cash -= payoutAmount; uint256 participantPayoutAmount = (payoutAmount * 999) / 1000; uint256 commissionFee = payoutAmount - participantPayoutAmount; commissionFeeBalance += commissionFee; (bool success, ) = msg.sender.call{value: participantPayoutAmount}(''); require(success, 'Ether failed to sent'); emit CashTaken(_cashbagId, participantPayoutAmount, msg.sender); } event CashbagCreated(uint256 cashbagId, address creatorAddress); event CashTaken( uint256 cashbagId, uint256 payoutAmount, address participantAddress ); }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashbagId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payoutAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"participantAddress","type":"address"}],"name":"CashTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashbagId","type":"uint256"},{"indexed":false,"internalType":"address","name":"creatorAddress","type":"address"}],"name":"CashbagCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"cashbagParticipants","outputs":[{"internalType":"enum CashbagManager.ParticipantStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cashbags","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"startingCash","type":"uint256"},{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint128","name":"maxParticipants","type":"uint128"},{"internalType":"uint256","name":"claimPeriodOver","type":"uint256"},{"internalType":"uint256","name":"passwordHash","type":"uint256"},{"internalType":"uint96","name":"salt","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_maxParticipants","type":"uint64"},{"internalType":"uint96","name":"_salt","type":"uint96"},{"internalType":"uint256","name":"_passwordHash","type":"uint256"},{"internalType":"uint256","name":"_claimPeriod","type":"uint256"}],"name":"createCashbag","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cashBagId","type":"uint256"}],"name":"getCashbag","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"startingCash","type":"uint256"},{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint128","name":"maxParticipants","type":"uint128"},{"internalType":"uint256","name":"claimPeriodOver","type":"uint256"},{"internalType":"address[]","name":"participantAddresses","type":"address[]"},{"internalType":"uint256","name":"passwordHash","type":"uint256"},{"internalType":"uint96","name":"salt","type":"uint96"}],"internalType":"struct CashbagManager.Cashbag","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnerCashbags","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"startingCash","type":"uint256"},{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint128","name":"maxParticipants","type":"uint128"},{"internalType":"uint256","name":"claimPeriodOver","type":"uint256"},{"internalType":"address[]","name":"participantAddresses","type":"address[]"},{"internalType":"uint256","name":"passwordHash","type":"uint256"},{"internalType":"uint96","name":"salt","type":"uint96"}],"internalType":"struct CashbagManager.Cashbag[]","name":"","type":"tuple[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cashbagId","type":"uint256"}],"name":"hasClaimedPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cashbagId","type":"uint256"}],"name":"isFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cashbagId","type":"uint256"},{"internalType":"uint256","name":"_passwordHash","type":"uint256"},{"internalType":"uint256[2]","name":"proofA","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"proofB","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"proofC","type":"uint256[2]"}],"name":"takeFromCashbag","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"a","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"b","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"c","type":"uint256[2]"},{"internalType":"uint256[3]","name":"input","type":"uint256[3]"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"r","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawCommissionFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060025534801561001557600080fd5b50600180546001600160a01b0319163317905561276b806100376000396000f3fe6080604052600436106100b15760003560e01c8063a9a6610811610069578063d623f9821161004e578063d623f982146101ce578063dae9cf0e146101e1578063e8ba65091461025657600080fd5b8063a9a6610814610166578063b5e30749146101ae57600080fd5b80631689083d1161009a5780631689083d146101025780636438dd091461011557806384b9bc3c1461014257600080fd5b806307b3acf1146100b657806311479fea146100cd575b600080fd5b3480156100c257600080fd5b506100cb610276565b005b3480156100d957600080fd5b506100ed6100e83660046122d7565b6103c7565b60405190151581526020015b60405180910390f35b6100cb61011036600461238f565b6104e3565b34801561012157600080fd5b506101356101303660046123f3565b610814565b6040516100f991906124cf565b34801561014e57600080fd5b506101576109c4565b6040516100f9939291906124e9565b34801561017257600080fd5b506101a161018136600461258c565b600360209081526000928352604080842090915290825290205460ff1681565b6040516100f991906125de565b3480156101ba57600080fd5b506100ed6101c93660046123f3565b610c74565b6100cb6101dc366004612606565b610ce4565b3480156101ed57600080fd5b506102016101fc3660046123f3565b61118c565b604080516001600160a01b0390981688526020880196909652948601939093526001600160801b039091166060850152608084015260a08301526bffffffffffffffffffffffff1660c082015260e0016100f9565b34801561026257600080fd5b506100ed6102713660046123f3565b6111fd565b6001546001600160a01b031633146102fb5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60448201527f6e0000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60028054600091829055604051909190339083908381818185875af1925050503d8060008114610347576040519150601f19603f3d011682016040523d82523d6000602084013e61034c565b606091505b50509050806103c35760405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f20776974686472617720636f6d6d697373696f6e20666560448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016102f2565b5050565b60006103d1612038565b60408051808201825287518152602080890151818301529083528151608080820184528851518285019081528951840151606080850191909152908352845180860186528a8501805151825251850151818601528385015285840192909252835180850185528851815288840151818501528585015283516003808252918101909452600093929091908301908036833701905050905060005b60038110156104ba5784816003811061048657610486612662565b602002015182828151811061049d5761049d612662565b6020908102919091010152806104b28161268e565b91505061046b565b506104c5818361121f565b6104d4576001925050506104db565b6000925050505b949350505050565b60008467ffffffffffffffff16116105635760405162461bcd60e51b815260206004820152602560248201527f4e65656420746f2068617665206174206c65617374206f6e652070617274696360448201527f6970616e7400000000000000000000000000000000000000000000000000000060648201526084016102f2565b6105cb60405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160006001600160801b0316815260200160008152602001606081526020016000815260200160006bffffffffffffffffffffffff1681525090565b33815267ffffffffffffffff85166060820152346040820181905260208201526bffffffffffffffffffffffff841660e082015261060982426126a9565b6080820190815260c0820184905260008054600181018255908052825160089091027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563810180546001600160a01b0390931673ffffffffffffffffffffffffffffffffffffffff199093169290921782556020808501517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56483015560408501517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56583015560608501517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e566830180546001600160801b039092167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905592517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56782015560a084015180518594610789937f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56801920190612089565b5060c0820151600682015560e090910151600790910180546bffffffffffffffffffffffff19166bffffffffffffffffffffffff9092169190911790556000547f8396060a99a76cac4afa1ae88512f500620e1e7461f6a33255444f951bf2e3a6906107f7906001906126c1565b604080519182523360208301520160405180910390a15050505050565b61087c60405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160006001600160801b0316815260200160008152602001606081526020016000815260200160006bffffffffffffffffffffffff1681525090565b60005482106108cd5760405162461bcd60e51b815260206004820152601860248201527f43617368626167204944206f7574206f6620626f756e6473000000000000000060448201526064016102f2565b600082815481106108e0576108e0612662565b60009182526020918290206040805161010081018252600890930290910180546001600160a01b0316835260018101548385015260028101548383015260038101546001600160801b03166060840152600481015460808401526005810180548351818702810187019094528084529394919360a08601939283018282801561099257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610974575b5050509183525050600682015460208201526007909101546bffffffffffffffffffffffff1660409091015292915050565b60608060008060008054905067ffffffffffffffff8111156109e8576109e86121f9565b604051908082528060200260200182016040528015610a8157816020015b610a6e60405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160006001600160801b0316815260200160008152602001606081526020016000815260200160006bffffffffffffffffffffffff1681525090565b815260200190600190039081610a065790505b50600080549192509067ffffffffffffffff811115610aa257610aa26121f9565b604051908082528060200260200182016040528015610acb578160200160208202803683370190505b5090506000805b600054811015610c6757336001600160a01b031660008281548110610af957610af9612662565b60009182526020909120600890910201546001600160a01b03161415610c555760008181548110610b2c57610b2c612662565b60009182526020918290206040805161010081018252600890930290910180546001600160a01b0316835260018101548385015260028101548383015260038101546001600160801b03166060840152600481015460808401526005810180548351818702810187019094528084529394919360a086019392830182828015610bde57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bc0575b5050509183525050600682015460208201526007909101546bffffffffffffffffffffffff166040909101528451859084908110610c1e57610c1e612662565b602002602001018190525080838381518110610c3c57610c3c612662565b602090810291909101015281610c518161268e565b9250505b80610c5f8161268e565b915050610ad2565b5091959094509092509050565b600081815260036020908152604080832033845282528083208151928301909152805483929190829060ff166001811115610cb157610cb16125c8565b6001811115610cc257610cc26125c8565b9052509050600181516001811115610cdc57610cdc6125c8565b149392505050565b6000548510610d355760405162461bcd60e51b815260206004820152601160248201527f43617368626167206e6f7420666f756e6400000000000000000000000000000060448201526064016102f2565b600085815260036020908152604080832033845290915281208154909190819088908110610d6557610d65612662565b906000526020600020906008020190506000610d808861141c565b82549091506001600160a01b0316331415610e025760405162461bcd60e51b8152602060048201526024808201527f4f776e65722063616e6e6f7420636c61696d207468656972206f776e2063617360448201527f686261670000000000000000000000000000000000000000000000000000000060648201526084016102f2565b6000835460ff166001811115610e1a57610e1a6125c8565b14610e8d5760405162461bcd60e51b815260206004820152602c60248201527f5061727469636970616e742068617320616c726561647920636c61696d65642060448201527f746869732063617368626167000000000000000000000000000000000000000060648201526084016102f2565b6000816001811115610ea157610ea16125c8565b14610eee5760405162461bcd60e51b815260206004820152601460248201527f43617368626167206861732066696e697368656400000000000000000000000060448201526064016102f2565b81600601548714610f415760405162461bcd60e51b815260206004820152601160248201527f50617373776f7264206d69736d6174636800000000000000000000000000000060448201526064016102f2565b6040805160608101825288815233602082015260078401546bffffffffffffffffffffffff1691810191909152610f7d908790879087906103c7565b610fc95760405162461bcd60e51b815260206004820152601360248201527f566572696669636174696f6e206661696c65640000000000000000000000000060448201526064016102f2565b60058201805460018082018355600092835260208320909101805473ffffffffffffffffffffffffffffffffffffffff191633179055845460ff1916178455600383015481546001600160801b039091169082908b90811061102d5761102d612662565b90600052602060002090600802016001015461104991906126ee565b90508083600201600082825461105f91906126c1565b90915550600090506103e8611076836103e7612702565b61108091906126ee565b9050600061108e82846126c1565b905080600260008282546110a291906126a9565b9091555050604051600090339084908381818185875af1925050503d80600081146110e9576040519150601f19603f3d011682016040523d82523d6000602084013e6110ee565b606091505b505090508061113f5760405162461bcd60e51b815260206004820152601460248201527f4574686572206661696c656420746f2073656e7400000000000000000000000060448201526064016102f2565b604080518d815260208101859052338183015290517f7ffa8df2f3699dc68fd62c59a97f94778c63f9ae1f461cd4f1467e95cfbd7eef9181900360600190a1505050505050505050505050565b6000818154811061119c57600080fd5b600091825260209091206008909102018054600182015460028301546003840154600485015460068601546007909601546001600160a01b039095169650929491936001600160801b039091169291906bffffffffffffffffffffffff1687565b6000806112098361141c565b90506001816001811115610cdc57610cdc6125c8565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018161124b6114d5565b90508060800151518551600161126191906126a9565b146112ae5760405162461bcd60e51b815260206004820152601260248201527f76657269666965722d6261642d696e707574000000000000000000000000000060448201526064016102f2565b604080518082019091526000808252602082018190525b865181101561139f57838782815181106112e1576112e1612662565b6020026020010151106113365760405162461bcd60e51b815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c640060448201526064016102f2565b61138b82611386856080015184600161134f91906126a9565b8151811061135f5761135f612662565b60200260200101518a858151811061137957611379612662565b602002602001015161195e565b611a05565b9150806113978161268e565b9150506112c5565b506113c88183608001516000815181106113bb576113bb612662565b6020026020010151611a05565b90506113fe6113da8660000151611aa8565b8660200151846000015185602001518587604001518b604001518960600151611b47565b61140e5760019350505050611416565b600093505050505b92915050565b60008054821061146e5760405162461bcd60e51b815260206004820152601160248201527f43617368626167206e6f7420666f756e6400000000000000000000000000000060448201526064016102f2565b600080838154811061148257611482612662565b600091825260209091206008909102016003810154600582015460048301549293506001600160801b0390911611904211158180156114be5750805b6114c95760016114cc565b60005b95945050505050565b6114dd6120fb565b6040805180820182527f10829f896b93cac818e71e23ed92feb43cf1afcb245ada9bbc3df1a7b90611d981527f24b6557a4fd033b08d8e52319d88b41f5dcd93fc7e4e95149d092f3f2aa1b7e66020808301919091529083528151608080820184527f01270a2f77e175ad1fc8487ed31fe2df323eb8b0a81f2f4583825a2f369b48f28285019081527f1efce07d6b58735b65179ca185f193c9e75addd934ebe36ebd940604ec8ddef2606080850191909152908352845180860186527f1da7c41c9b27b64c5a89857ba19226ae2cc3dd219f1bea9bf84bb574a81f709581527f10935588b3583835190c051775d0fa07676183423edf752a837d57137deceb43818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f1e1cc68957e63e272cbe54f38c2c5c0c94b8f04f36aab4ea8858c2ddb9b3f01c8185019081527f28a4e7a98f7a4a019001d6a8465b751726a3e56b9dd12c5a0096fc70368896a9828401528152835180850185527f17b9aa78af581aaa312ff1126893624b7607b3432e2044b4f5ce8ada71b1abe481527f01cb36943c18316be2a8d3bb63305126e2d5450189c7994297b6826c2dff2fe08185015281840152908401528151600480825260a08201909352919082015b604080518082019091526000808252602082015281526020019060019003908161175857505060808201908152604080518082019091527f2f45015a4da1cfca25fd23f92f7e4d9b5fc2ac74fe37ead8d2c121006c82954481527f24773a3dfd448fe16efdcc0b48a21ca299d28db55287a694bd3d7b1ec503417a6020820152905180516000906117eb576117eb612662565b602002602001018190525060405180604001604052807f1867d65e26ea0b53706948880bfe3d30a74f6c37c1911a31fe6eb7519f3ce64d81526020017f13e8ead08b40febed062dd44bfd70e9bcb7971eaa71b6539f48e7a186051d66f815250816080015160018151811061186257611862612662565b602002602001018190525060405180604001604052807f0163f15aa69088ef369a9cd4c34dbb63dfb0e3bea6ffe3dc23463deed85dc3f981526020017f12ec926373eec86f80f64a991cce3d0d8082a239994dedda543d1c94a5cfc6bc81525081608001516002815181106118d9576118d9612662565b602002602001018190525060405180604001604052807f1f0d6fc792461eb4cbc087108c04746a8222f6b1c06159d755488a6b987cf4ff81526020017f0d7d3f919687f1684fdebbaaa19012a2bbf4ce79b2c91459e18fa30e3a2c8140815250816080015160038151811061195057611950612662565b602002602001018190525090565b604080518082019091526000808252602082015261197a61214c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa90508080156119ad576119af565bfe5b50806119fd5760405162461bcd60e51b815260206004820152601260248201527f70616972696e672d6d756c2d6661696c6564000000000000000000000000000060448201526064016102f2565b505092915050565b6040805180820190915260008082526020820152611a2161216a565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa90508080156119ad5750806119fd5760405162461bcd60e51b815260206004820152601260248201527f70616972696e672d6164642d6661696c6564000000000000000000000000000060448201526064016102f2565b604080518082019091526000808252602082015281517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790158015611aef57506020830151155b15611b0f5750506040805180820190915260008082526020820152919050565b604051806040016040528084600001518152602001828560200151611b349190612721565b611b3e90846126c1565b90529392505050565b60408051600480825260a08201909252600091829190816020015b6040805180820190915260008082526020820152815260200190600190039081611b6257505060408051600480825260a0820190925291925060009190602082015b611bac612188565b815260200190600190039081611ba45790505090508a82600081518110611bd557611bd5612662565b60200260200101819052508882600181518110611bf457611bf4612662565b60200260200101819052508682600281518110611c1357611c13612662565b60200260200101819052508482600381518110611c3257611c32612662565b60200260200101819052508981600081518110611c5157611c51612662565b60200260200101819052508781600181518110611c7057611c70612662565b60200260200101819052508581600281518110611c8f57611c8f612662565b60200260200101819052508381600381518110611cae57611cae612662565b6020026020010181905250611cc38282611cd2565b9b9a5050505050505050505050565b60008151835114611d255760405162461bcd60e51b815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c65640000000000000000000060448201526064016102f2565b82516000611d34826006612702565b905060008167ffffffffffffffff811115611d5157611d516121f9565b604051908082528060200260200182016040528015611d7a578160200160208202803683370190505b50905060005b83811015611fb557868181518110611d9a57611d9a612662565b60200260200101516000015182826006611db49190612702565b611dbf9060006126a9565b81518110611dcf57611dcf612662565b602002602001018181525050868181518110611ded57611ded612662565b60200260200101516020015182826006611e079190612702565b611e129060016126a9565b81518110611e2257611e22612662565b602002602001018181525050858181518110611e4057611e40612662565b6020908102919091010151515182611e59836006612702565b611e649060026126a9565b81518110611e7457611e74612662565b602002602001018181525050858181518110611e9257611e92612662565b60209081029190910181015151015182611ead836006612702565b611eb89060036126a9565b81518110611ec857611ec8612662565b602002602001018181525050858181518110611ee657611ee6612662565b602002602001015160200151600060028110611f0457611f04612662565b602002015182611f15836006612702565b611f209060046126a9565b81518110611f3057611f30612662565b602002602001018181525050858181518110611f4e57611f4e612662565b602002602001015160200151600160028110611f6c57611f6c612662565b602002015182611f7d836006612702565b611f889060056126a9565b81518110611f9857611f98612662565b602090810291909101015280611fad8161268e565b915050611d80565b50611fbe6121a8565b6000602082602086026020860160086107d05a03fa90508080156119ad57508061202a5760405162461bcd60e51b815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c6564000000000000000000000060448201526064016102f2565b505115159695505050505050565b6040805160a081019091526000606082018181526080830191909152815260208101612062612188565b8152602001612084604051806040016040528060008152602001600081525090565b905290565b8280548282559060005260206000209081019282156120eb579160200282015b828111156120eb578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161782556020909201916001909101906120a9565b506120f79291506121c6565b5090565b6040805160e08101909152600060a0820181815260c0830191909152815260208101612125612188565b8152602001612132612188565b815260200161213f612188565b8152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806040016040528061219b6121db565b81526020016120846121db565b60405180602001604052806001906020820280368337509192915050565b5b808211156120f757600081556001016121c7565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612232576122326121f9565b60405290565b600082601f83011261224957600080fd5b61225161220f565b80604084018581111561226357600080fd5b845b8181101561227d578035845260209384019301612265565b509095945050505050565b600082601f83011261229957600080fd5b6122a161220f565b8060808401858111156122b357600080fd5b845b8181101561227d576122c78782612238565b84526020909301926040016122b5565b6000806000806101608086880312156122ef57600080fd5b6122f98787612238565b94506123088760408801612288565b93506123178760c08801612238565b92508661011f87011261232957600080fd5b6040516060810181811067ffffffffffffffff8211171561234c5761234c6121f9565b60405290860190808883111561236157600080fd5b61010088015b8381101561237f578035825260209182019101612367565b5050809250505092959194509250565b600080600080608085870312156123a557600080fd5b843567ffffffffffffffff811681146123bd57600080fd5b935060208501356bffffffffffffffffffffffff811681146123de57600080fd5b93969395505050506040820135916060013590565b60006020828403121561240557600080fd5b5035919050565b60006101008084016001600160a01b0380855116865260208086015181880152604086015160408801526001600160801b0360608701511660608801526080860151608088015260a08601518460a08901528394508051808552610120890195508282019450600091505b8082101561249957845184168652948201949382019360019190910190612477565b505050505060c083015160c085015260e08301516124c760e08601826bffffffffffffffffffffffff169052565b509392505050565b6020815260006124e2602083018461240c565b9392505050565b6000606082016060835280865180835260808501915060808160051b8601019250602080890160005b8381101561254057607f1988870301855261252e86835161240c565b95509382019390820190600101612512565b50508584038187015287518085528882019482019350915060005b828110156125775784518452938101939281019260010161255b565b50505060409390930193909352509392505050565b6000806040838503121561259f57600080fd5b8235915060208301356001600160a01b03811681146125bd57600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061260057634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610140868803121561261f57600080fd5b85359450602086013593506126378760408801612238565b92506126468760808801612288565b9150612656876101008801612238565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156126a2576126a2612678565b5060010190565b600082198211156126bc576126bc612678565b500190565b6000828210156126d3576126d3612678565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826126fd576126fd6126d8565b500490565b600081600019048311821515161561271c5761271c612678565b500290565b600082612730576127306126d8565b50069056fea2646970667358221220d9ebee3f7103406b1765c7ba0608003646125e0fd2f1fc7be84b3ed92c48bc9e64736f6c634300080b0033
Deployed ByteCode Sourcemap
75923:6663:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77178:265;;;;;;;;;;;;;:::i;:::-;;75113:694;;;;;;;;;;-1:-1:-1;75113:694:0;;;;;:::i;:::-;;:::i;:::-;;;2760:14:1;;2753:22;2735:41;;2723:2;2708:18;75113:694:0;;;;;;;;77746:640;;;;;;:::i;:::-;;:::i;77489:209::-;;;;;;;;;;-1:-1:-1;77489:209:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;78997:642::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;76859:83::-;;;;;;;;;;-1:-1:-1;76859:83:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;78683:241::-;;;;;;;;;;-1:-1:-1;78683:241:0;;;;;:::i;:::-;;:::i;80409:1995::-;;;;;;:::i;:::-;;:::i;76580:25::-;;;;;;;;;;-1:-1:-1;76580:25:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;8524:55:1;;;8506:74;;8611:2;8596:18;;8589:34;;;;8639:18;;;8632:34;;;;-1:-1:-1;;;;;8702:47:1;;;8697:2;8682:18;;8675:75;8781:3;8766:19;;8759:35;8825:3;8810:19;;8803:35;8887:26;8875:39;8869:3;8854:19;;8847:68;8493:3;8478:19;76580:25:0;8193:728:1;78442:174:0;;;;;;;;;;-1:-1:-1;78442:174:0;;;;;:::i;:::-;;:::i;77178:265::-;76983:5;;-1:-1:-1;;;;;76983:5:0;76992:10;76983:19;76975:65;;;;-1:-1:-1;;;76975:65:0;;9128:2:1;76975:65:0;;;9110:21:1;9167:2;9147:18;;;9140:30;9206:34;9186:18;;;9179:62;9277:3;9257:18;;;9250:31;9298:19;;76975:65:0;;;;;;;;;77259:20:::1;::::0;;77235:21:::1;77286:24:::0;;;;77336:41:::1;::::0;77259:20;;77235:21;77336:10:::1;::::0;77259:20;;77235:21;77336:41;77235:21;77336:41;77259:20;77336:10;:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77317:60;;;77392:7;77384:53;;;::::0;-1:-1:-1;;;77384:53:0;;9740:2:1;77384:53:0::1;::::0;::::1;9722:21:1::0;9779:2;9759:18;;;9752:30;9818:34;9798:18;;;9791:62;9889:3;9869:18;;;9862:31;9910:19;;77384:53:0::1;9538:397:1::0;77384:53:0::1;77228:215;;77178:265::o:0;75113:694::-;75297:6;75316:18;;:::i;:::-;75355:27;;;;;;;;75371:4;;75355:27;;75371:4;75377;;;;75355:27;;;;75345:37;;;75403:55;;;;;;;;75420:4;;:7;75403:55;;;;;;75429:4;;:7;;;75403:55;;;;;;;;;;;;;;;;;;75440:4;;;;;:7;75403:55;;75449:4;:7;;;75403:55;;;;-1:-1:-1;;;75403:55:0;75393:7;;;:65;;;;75479:27;;;;;;;75495:4;;75479:27;;75501:4;;;;75479:27;;;;75469:7;;;:37;75545:24;;75556:12;75545:24;;;;;;;;;-1:-1:-1;;75545:24:0;75556:12;;75545:24;;;;75403:55;75545:24;;;;;-1:-1:-1;75545:24:0;75517:52;;75584:6;75580:90;75600:12;75596:1;:16;75580:90;;;75650:5;75656:1;75650:8;;;;;;;:::i;:::-;;;;;75633:11;75645:1;75633:14;;;;;;;;:::i;:::-;;;;;;;;;;:25;75614:3;;;;:::i;:::-;;;;75580:90;;;;75684:26;75691:11;75704:5;75684:6;:26::i;:::-;75680:120;;75739:4;75732:11;;;;;;75680:120;75783:5;75776:12;;;;75113:694;;;;;;;:::o;77746:640::-;77929:1;77910:16;:20;;;77902:70;;;;-1:-1:-1;;;77902:70:0;;10660:2:1;77902:70:0;;;10642:21:1;10699:2;10679:18;;;10672:30;10738:34;10718:18;;;10711:62;10809:7;10789:18;;;10782:35;10834:19;;77902:70:0;10458:401:1;77902:70:0;77981:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77981:22:0;78026:10;78010:26;;78043:42;;;:23;;;:42;78107:9;78092:12;;;:24;;;-1:-1:-1;78123:20:0;;:32;78162:20;;;:12;;;:20;78215:30;78233:12;78215:15;:30;:::i;:::-;78189:23;;;:56;;;78252:20;;;:36;;;-1:-1:-1;78297:22:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;78297:22:0;;;-1:-1:-1;;78297:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;78297:22:0;;;;;;;;;;;;;;;;;;;;;;;;;78189:7;;78297:22;;;;;;;;:::i;:::-;-1:-1:-1;78297:22:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;78297:22:0;;;;;;;;;;;-1:-1:-1;78348:15:0;78333:47;;78348:19;;-1:-1:-1;;78348:19:0;:::i;:::-;78333:47;;;11301:25:1;;;78369:10:0;11357:2:1;11342:18;;11335:83;11274:18;78333:47:0;;;;;;;77895:491;77746:640;;;;:::o;77489:209::-;77567:14;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77567:14:0;77614:8;:15;77601:28;;77593:65;;;;-1:-1:-1;;;77593:65:0;;11631:2:1;77593:65:0;;;11613:21:1;11670:2;11650:18;;;11643:30;11709:26;11689:18;;;11682:54;11753:18;;77593:65:0;11429:348:1;77593:65:0;77672:8;77681:10;77672:20;;;;;;;;:::i;:::-;;;;;;;;;;77665:27;;;;;;;;77672:20;;;;;;;77665:27;;-1:-1:-1;;;;;77665:27:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;77665:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77672:20;;77665:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;77665:27:0;;;;;;;;;;;;;;;;-1:-1:-1;;;77665:27:0;;;-1:-1:-1;;77665:27:0;;;;;;;;;;;;;;;;;;;;;77489:209;-1:-1:-1;;77489:209:0:o;78997:642::-;79071:16;79096;79121:7;79146:30;79193:8;:15;;;;79179:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;79179:30:0;;;;;;;;;;;;;;;;-1:-1:-1;79216:33:0;79266:15;;79146:63;;-1:-1:-1;79216:33:0;79252:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;79252:30:0;;79216:66;;79289:24;79331:9;79326:243;79350:8;:15;79346:19;;79326:243;;;79406:10;-1:-1:-1;;;;;79385:31:0;:8;79394:1;79385:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:17;-1:-1:-1;;;;;79385:17:0;:31;79381:181;;;79463:8;79472:1;79463:11;;;;;;;;:::i;:::-;;;;;;;;;;79429:45;;;;;;;;79463:11;;;;;;;79429:45;;-1:-1:-1;;;;;79429:45:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;79429:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;79463:11;;79429:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;79429:45:0;;;;;;;;;;;;;;;;-1:-1:-1;;;79429:45:0;;;-1:-1:-1;;79429:45:0;;;;;;;;;;;;;;;;;;;;:31;;:13;;79443:16;;79429:31;;;;;;:::i;:::-;;;;;;:45;;;;79522:1;79485:16;79502;79485:34;;;;;;;;:::i;:::-;;;;;;;;;;:38;79534:18;;;;:::i;:::-;;;;79381:181;79367:3;;;;:::i;:::-;;;;79326:243;;;-1:-1:-1;79583:13:0;;79598:16;;-1:-1:-1;79616:16:0;;-1:-1:-1;78997:642:0;-1:-1:-1;78997:642:0:o;78683:241::-;78752:4;78798:31;;;:19;:31;;;;;;;;78838:10;78798:57;;;;;;;78765:90;;;;;;;;;;78752:4;;78765:90;78798:57;78765:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;78765:90:0;-1:-1:-1;78893:25:0;78871:18;;:47;;;;;;;;:::i;:::-;;;78683:241;-1:-1:-1;;;78683:241:0:o;80409:1995::-;80633:8;:15;80620:28;;80612:58;;;;-1:-1:-1;;;80612:58:0;;11984:2:1;80612:58:0;;;11966:21:1;12023:2;12003:18;;;11996:30;12062:19;12042:18;;;12035:47;12099:18;;80612:58:0;11782:341:1;80612:58:0;80679:31;80713;;;:19;:31;;;;;;;;80753:10;80713:57;;;;;;;80803:20;;80713:57;;80679:31;;;80733:10;;80803:20;;;;;;:::i;:::-;;;;;;;;;;;80777:46;;80832:25;80860:27;80876:10;80860:15;:27::i;:::-;80912:13;;80832:55;;-1:-1:-1;;;;;;80912:13:0;80929:10;80912:27;;80896:97;;;;-1:-1:-1;;;80896:97:0;;12330:2:1;80896:97:0;;;12312:21:1;12369:2;12349:18;;;12342:30;12408:34;12388:18;;;12381:62;12479:6;12459:18;;;12452:34;12503:19;;80896:97:0;12128:400:1;80896:97:0;81040:28;81018:18;;;;;:50;;;;;;;:::i;:::-;;81002:128;;;;-1:-1:-1;;;81002:128:0;;12735:2:1;81002:128:0;;;12717:21:1;12774:2;12754:18;;;12747:30;12813:34;12793:18;;;12786:62;12884:14;12864:18;;;12857:42;12916:19;;81002:128:0;12533:408:1;81002:128:0;81161:17;81145:12;:33;;;;;;;;:::i;:::-;;81137:66;;;;-1:-1:-1;;;81137:66:0;;13148:2:1;81137:66:0;;;13130:21:1;13187:2;13167:18;;;13160:30;13226:22;13206:18;;;13199:50;13266:18;;81137:66:0;12946:344:1;81137:66:0;81235:7;:20;;;81218:13;:37;81210:67;;;;-1:-1:-1;;;81210:67:0;;13497:2:1;81210:67:0;;;13479:21:1;13536:2;13516:18;;;13509:30;13575:19;13555:18;;;13548:47;13612:18;;81210:67:0;13295:341:1;81210:67:0;81300:375;;;;;;;;;;;81544:10;81300:375;;;;81642:12;;;;;;81300:375;;;;;;;;;81322:6;;81339;;81356;;81300:11;:375::i;:::-;81284:428;;;;-1:-1:-1;;;81284:428:0;;13843:2:1;81284:428:0;;;13825:21:1;13882:2;13862:18;;;13855:30;13921:21;13901:18;;;13894:49;13960:18;;81284:428:0;13641:343:1;81284:428:0;81721:28;;;:45;;;;;;;;-1:-1:-1;81721:45:0;;;;;;;;;;;-1:-1:-1;;81721:45:0;81755:10;81721:45;;;81773:46;;-1:-1:-1;;81773:46:0;;;;81959:23;;;;81916:20;;-1:-1:-1;;;;;81959:23:0;;;;-1:-1:-1;;81925:10:0;;81916:20;;;;;;:::i;:::-;;;;;;;;;;;:33;;;:66;;;;:::i;:::-;81893:89;;82005:12;81989:7;:12;;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;82026:31:0;;-1:-1:-1;82083:4:0;82061:18;:12;82076:3;82061:18;:::i;:::-;82060:27;;;;:::i;:::-;82026:61;-1:-1:-1;82094:21:0;82118:38;82026:61;82118:12;:38;:::i;:::-;82094:62;;82187:13;82163:20;;:37;;;;;;;:::i;:::-;;;;-1:-1:-1;;82228:51:0;;82210:12;;82228:10;;82251:23;;82210:12;82228:51;82210:12;82228:51;82251:23;82228:10;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;82209:70;;;82296:7;82288:40;;;;-1:-1:-1;;;82288:40:0;;14678:2:1;82288:40:0;;;14660:21:1;14717:2;14697:18;;;14690:30;14756:22;14736:18;;;14729:50;14796:18;;82288:40:0;14476:344:1;82288:40:0;82340:58;;;15027:25:1;;;15083:2;15068:18;;15061:34;;;82387:10:0;15111:18:1;;;15104:83;82340:58:0;;;;;;;15015:2:1;82340:58:0;;;80605:1799;;;;;;;80409:1995;;;;;:::o;76580:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;76580:25:0;;;;-1:-1:-1;76580:25:0;;;;-1:-1:-1;;;;;76580:25:0;;;;;;;;;:::o;78442:174::-;78505:4;78518:18;78539:27;78555:10;78539:15;:27::i;:::-;78518:48;-1:-1:-1;78589:21:0;78580:5;:30;;;;;;;;:::i;74109:950::-;74189:4;74235:77;74189:4;74348:14;:12;:14::i;:::-;74323:39;;74401:2;:5;;;:12;74381:5;:12;74396:1;74381:16;;;;:::i;:::-;:32;74373:62;;;;-1:-1:-1;;;74373:62:0;;15400:2:1;74373:62:0;;;15382:21:1;15439:2;15419:18;;;15412:30;15478:20;15458:18;;;15451:48;15516:18;;74373:62:0;15198:342:1;74373:62:0;74524:21;;;;;;;;;74494:27;74524:21;;;;;;;;;74556:227;74577:5;:12;74573:1;:16;74556:227;;;74630:18;74619:5;74625:1;74619:8;;;;;;;;:::i;:::-;;;;;;;:29;74611:72;;;;-1:-1:-1;;;74611:72:0;;15747:2:1;74611:72:0;;;15729:21:1;15786:2;15766:18;;;15759:30;15825:33;15805:18;;;15798:61;15876:18;;74611:72:0;15545:355:1;74611:72:0;74705:66;74722:4;74728:42;74747:2;:5;;;74753:1;74757;74753:5;;;;:::i;:::-;74747:12;;;;;;;;:::i;:::-;;;;;;;74761:5;74767:1;74761:8;;;;;;;;:::i;:::-;;;;;;;74728:18;:42::i;:::-;74705:16;:66::i;:::-;74698:73;-1:-1:-1;74591:3:0;;;;:::i;:::-;;;;74556:227;;;;74800:32;74817:4;74823:2;:5;;;74829:1;74823:8;;;;;;;;:::i;:::-;;;;;;;74800:16;:32::i;:::-;74793:39;;74848:174;74883:23;74898:5;:7;;;74883:14;:23::i;:::-;74908:5;:7;;;74930:2;:8;;;74940:2;:8;;;74963:4;74969:2;:9;;;74993:5;:7;;;75002:2;:9;;;74848:20;:174::i;:::-;74843:189;;75031:1;75024:8;;;;;;;74843:189;75050:1;75043:8;;;;;74109:950;;;;;:::o;79729:535::-;79812:12;79857:15;;79844:28;;79836:58;;;;-1:-1:-1;;;79836:58:0;;11984:2:1;79836:58:0;;;11966:21:1;12023:2;12003:18;;;11996:30;12062:19;12042:18;;;12035:47;12099:18;;79836:58:0;11782:341:1;79836:58:0;79901:23;79927:8;79936:10;79927:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;80034:23;;;;79989:28;;;:35;80087:23;;;;79927:20;;-1:-1:-1;;;;;;80034:23:0;;;-1:-1:-1;;80114:15:0;-1:-1:-1;80087:42:0;-1:-1:-1;80152:44:0;;;;;80181:15;80152:44;:106;;80237:21;80152:106;;;80208:17;80152:106;80138:120;79729:535;-1:-1:-1;;;;;79729:535:0:o;71358:2745::-;71405:22;;:::i;:::-;71451:209;;;;;;;;71481:76;71451:209;;71572:77;71451:209;;;;;;;;71440:220;;;71684:397;;;;;;;;71715:75;71684:397;;;;;;71806:77;71684:397;;;;;;;;;;;;;;;;;;71900:77;71684:397;;71993:76;71684:397;;;;-1:-1:-1;;;71684:397:0;71673:8;;;:408;;;;72104:398;;;;;;;72135:77;72104:398;;;;;;72228:77;72104:398;;;;;;;;;;;;;72322:76;72104:398;;72414:76;72104:398;;;;-1:-1:-1;;;72104:398:0;72092:9;;;:410;72525:398;;;;;;;72556:77;72525:398;;;;;;72649:77;72525:398;;;;;;;;;;;;;72743:77;72525:398;;72836:75;72525:398;;;;-1:-1:-1;;;72525:398:0;72513:9;;;:410;72942:24;;72964:1;72942:24;;;;;;;;;;72964:1;72942:24;;;-1:-1:-1;;;;;;;;;;;;;;;;;72942:24:0;;;;;;;;;;;;-1:-1:-1;;72934:5:0;;;:32;;;72998:211;;;;;;;;;73029:77;72998:211;;73121:77;72998:211;;;;72987:5;;:8;;-1:-1:-1;;72987:8:0;;;;:::i;:::-;;;;;;:222;;;;73279:210;;;;;;;;73310:77;73279:210;;;;73402:76;73279:210;;;73268:2;:5;;;73274:1;73268:8;;;;;;;;:::i;:::-;;;;;;:221;;;;73559:208;;;;;;;;73590:75;73559:208;;;;73680:76;73559:208;;;73548:2;:5;;;73554:1;73548:8;;;;;;;;:::i;:::-;;;;;;:219;;;;73837:210;;;;;;;;73868:77;73837:210;;;;73960:76;73837:210;;;73826:2;:5;;;73832:1;73826:8;;;;;;;;:::i;:::-;;;;;;:221;;;;71358:2745;:::o;67563:552::-;-1:-1:-1;;;;;;;;;;;;;;;;;67661:20:0;;:::i;:::-;67703:3;;67692:14;;:8;67728:3;;;;67717:8;;;:14;67742:8;;;:12;;;-1:-1:-1;67936:4:0;67933:1;67927:4;67692:14;67917:1;67910:4;67903:5;67899:16;67888:53;67877:64;-1:-1:-1;67877:64:0;68028:20;;;;68013:35;;68028:20;68037:9;68013:35;;68078:7;68069:38;;;;-1:-1:-1;;;68069:38:0;;16107:2:1;68069:38:0;;;16089:21:1;16146:2;16126:18;;;16119:30;16185:20;16165:18;;;16158:48;16223:18;;68069:38:0;15905:342:1;68069:38:0;67650:465;;67563:552;;;;:::o;66813:592::-;-1:-1:-1;;;;;;;;;;;;;;;;;66921:20:0;;:::i;:::-;66963:4;;66952:15;;:8;66989:4;;;;66978:8;;;:15;67015:4;;67004:8;;;:15;67041:4;;;67030:8;;;;:15;;;;-1:-1:-1;;67224:1:0;67218:4;66952:15;67208:1;67201:4;67194:5;67190:16;67179:53;67168:64;-1:-1:-1;67168:64:0;67319:20;;;;67304:35;67368:7;67360:37;;;;-1:-1:-1;;;67360:37:0;;16454:2:1;67360:37:0;;;16436:21:1;16493:2;16473:18;;;16466:30;16532:20;16512:18;;;16505:48;16570:18;;67360:37:0;16252:342:1;66412:348:0;-1:-1:-1;;;;;;;;;;;;;;;;;66652:3:0;;66560:77;;66652:8;:20;;;;-1:-1:-1;66664:3:0;;;;:8;66652:20;66648:59;;;-1:-1:-1;;66694:13:0;;;;;;;;;-1:-1:-1;66694:13:0;;;;;;;;66412:348;-1:-1:-1;66412:348:0:o;66648:59::-;66725:27;;;;;;;;66733:1;:3;;;66725:27;;;;66749:1;66743;:3;;;:7;;;;:::i;:::-;66738:13;;:1;:13;:::i;:::-;66725:27;;66718:34;66412:348;-1:-1:-1;;;66412:348:0:o;70427:569::-;70722:16;;;70736:1;70722:16;;;;;;;;;70683:4;;;;70722:16;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;70722:16:0;;;;;;;;;;;;-1:-1:-1;;70771:16:0;;;70785:1;70771:16;;;;;;;;;70700:38;;-1:-1:-1;70749:19:0;;70771:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;70749:38;;70806:2;70798;70801:1;70798:5;;;;;;;;:::i;:::-;;;;;;:10;;;;70827:2;70819;70822:1;70819:5;;;;;;;;:::i;:::-;;;;;;:10;;;;70848:2;70840;70843:1;70840:5;;;;;;;;:::i;:::-;;;;;;:10;;;;70869:2;70861;70864:1;70861:5;;;;;;;;:::i;:::-;;;;;;:10;;;;70890:2;70882;70885:1;70882:5;;;;;;;;:::i;:::-;;;;;;:10;;;;70911:2;70903;70906:1;70903:5;;;;;;;;:::i;:::-;;;;;;:10;;;;70932:2;70924;70927:1;70924:5;;;;;;;;:::i;:::-;;;;;;:10;;;;70953:2;70945;70948:1;70945:5;;;;;;;;:::i;:::-;;;;;;:10;;;;70973:15;70981:2;70985;70973:7;:15::i;:::-;70966:22;70427:569;-1:-1:-1;;;;;;;;;;;70427:569:0:o;68331:1060::-;68413:4;68451:2;:9;68438:2;:9;:22;68430:56;;;;-1:-1:-1;;;68430:56:0;;16918:2:1;68430:56:0;;;16900:21:1;16957:2;16937:18;;;16930:30;16996:24;16976:18;;;16969:52;17038:18;;68430:56:0;16716:346:1;68430:56:0;68513:9;;68497:13;68550:12;68513:9;68561:1;68550:12;:::i;:::-;68533:29;;68573:19;68606:9;68595:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;68595:21:0;;68573:43;;68632:6;68627:315;68648:8;68644:1;:12;68627:315;;;68706:2;68709:1;68706:5;;;;;;;;:::i;:::-;;;;;;;:7;;;68687:5;68693:1;68697;68693:5;;;;:::i;:::-;:9;;68701:1;68693:9;:::i;:::-;68687:16;;;;;;;;:::i;:::-;;;;;;:26;;;;;68747:2;68750:1;68747:5;;;;;;;;:::i;:::-;;;;;;;:7;;;68728:5;68734:1;68738;68734:5;;;;:::i;:::-;:9;;68742:1;68734:9;:::i;:::-;68728:16;;;;;;;;:::i;:::-;;;;;;:26;;;;;68788:2;68791:1;68788:5;;;;;;;;:::i;:::-;;;;;;;;;;;:7;:10;68769:5;68775;:1;68779;68775:5;:::i;:::-;:9;;68783:1;68775:9;:::i;:::-;68769:16;;;;;;;;:::i;:::-;;;;;;:29;;;;;68832:2;68835:1;68832:5;;;;;;;;:::i;:::-;;;;;;;;;;;;:7;:10;;68813:5;68819;:1;68823;68819:5;:::i;:::-;:9;;68827:1;68819:9;:::i;:::-;68813:16;;;;;;;;:::i;:::-;;;;;;:29;;;;;68876:2;68879:1;68876:5;;;;;;;;:::i;:::-;;;;;;;:7;;;68884:1;68876:10;;;;;;;:::i;:::-;;;;;68857:5;68863;:1;68867;68863:5;:::i;:::-;:9;;68871:1;68863:9;:::i;:::-;68857:16;;;;;;;;:::i;:::-;;;;;;:29;;;;;68920:2;68923:1;68920:5;;;;;;;;:::i;:::-;;;;;;;:7;;;68928:1;68920:10;;;;;;;:::i;:::-;;;;;68901:5;68907;:1;68911;68907:5;:::i;:::-;:9;;68915:1;68907:9;:::i;:::-;68901:16;;;;;;;;:::i;:::-;;;;;;;;;;:29;68658:3;;;;:::i;:::-;;;;68627:315;;;;68952:18;;:::i;:::-;68981:12;69181:4;69176:3;69169:4;69158:9;69154:20;69147:4;69140:5;69136:16;69133:1;69126:4;69119:5;69115:16;69104:82;69093:93;-1:-1:-1;69093:93:0;69273:20;;;;69258:35;69322:7;69314:40;;;;-1:-1:-1;;;69314:40:0;;17269:2:1;69314:40:0;;;17251:21:1;17308:2;17288:18;;;17281:30;17347:23;17327:18;;;17320:51;17388:18;;69314:40:0;17067:345:1;69314:40:0;-1:-1:-1;69372:6:0;:11;;;;-1:-1:-1;;;;;;68331:1060:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:184:1:-;-1:-1:-1;;;63:1:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:246;270:2;264:9;;;300:15;;345:18;330:34;;366:22;;;327:62;324:88;;;392:18;;:::i;:::-;428:2;421:22;203:246;:::o;454:479::-;504:5;557:3;550:4;542:6;538:17;534:27;524:55;;575:1;572;565:12;524:55;599:17;;:::i;:::-;638:3;676:2;668:6;664:15;702:3;694:6;691:15;688:35;;;719:1;716;709:12;688:35;743:6;758:146;774:6;769:3;766:15;758:146;;;842:17;;830:30;;889:4;880:14;;;;791;758:146;;;-1:-1:-1;922:5:1;;454:479;-1:-1:-1;;;;;454:479:1:o;938:501::-;994:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:55;;1065:1;1062;1055:12;1014:55;1089:17;;:::i;:::-;1128:3;1166;1158:6;1154:16;1193:3;1185:6;1182:15;1179:35;;;1210:1;1207;1200:12;1179:35;1234:6;1249:161;1265:6;1260:3;1257:15;1249:161;;;1331:34;1361:3;1356;1331:34;:::i;:::-;1319:47;;1395:4;1386:14;;;;1291:2;1282:12;1249:161;;1444:1146;1645:6;1653;1661;1669;1700:3;1744:2;1732:9;1723:7;1719:23;1715:32;1712:52;;;1760:1;1757;1750:12;1712:52;1783:44;1819:7;1808:9;1783:44;:::i;:::-;1773:54;;1846:59;1897:7;1892:2;1881:9;1877:18;1846:59;:::i;:::-;1836:69;;1924:54;1970:7;1964:3;1953:9;1949:19;1924:54;:::i;:::-;1914:64;;2022:7;2016:3;2005:9;2001:19;1997:33;1987:61;;2044:1;2041;2034:12;1987:61;2077:2;2071:9;2119:2;2111:6;2107:15;2188:6;2176:10;2173:22;2152:18;2140:10;2137:34;2134:62;2131:88;;;2199:18;;:::i;:::-;2235:2;2228:22;2299:18;;;;2270:6;2329:19;;;2326:39;;;2361:1;2358;2351:12;2326:39;2400:3;2389:9;2385:19;2413:146;2429:6;2424:3;2421:15;2413:146;;;2497:17;;2485:30;;2544:4;2535:14;;;;2446;2413:146;;;2417:3;;2578:6;2568:16;;;;1444:1146;;;;;;;:::o;2787:609::-;2871:6;2879;2887;2895;2948:3;2936:9;2927:7;2923:23;2919:33;2916:53;;;2965:1;2962;2955:12;2916:53;3004:9;2991:23;3054:18;3047:5;3043:30;3036:5;3033:41;3023:69;;3088:1;3085;3078:12;3023:69;3111:5;-1:-1:-1;3168:2:1;3153:18;;3140:32;3216:26;3203:40;;3191:53;;3181:81;;3258:1;3255;3248:12;3181:81;2787:609;;3281:7;;-1:-1:-1;;;;3335:2:1;3320:18;;3307:32;;3386:2;3371:18;3358:32;;2787:609::o;3401:180::-;3460:6;3513:2;3501:9;3492:7;3488:23;3484:32;3481:52;;;3529:1;3526;3519:12;3481:52;-1:-1:-1;3552:23:1;;3401:180;-1:-1:-1;3401:180:1:o;3701:1171::-;3751:3;3779:6;3815:2;3810:3;3806:12;-1:-1:-1;;;;;3918:2:1;3910:5;3904:12;3900:21;3895:3;3888:34;3941:4;3992:2;3985:5;3981:14;3975:21;3970:2;3965:3;3961:12;3954:43;4046:4;4039:5;4035:16;4029:23;4022:4;4017:3;4013:14;4006:47;-1:-1:-1;;;;;4106:4:1;4099:5;4095:16;4089:23;4085:64;4078:4;4073:3;4069:14;4062:88;4199:4;4192:5;4188:16;4182:23;4175:4;4170:3;4166:14;4159:47;4252:4;4245:5;4241:16;4235:23;4290:2;4283:4;4278:3;4274:14;4267:26;4315:4;4302:17;;4348:12;4342:19;4383:6;4377:4;4370:20;4417:3;4412;4408:13;4399:22;;4462:2;4448:12;4444:21;4430:35;;4483:1;4474:10;;4493:184;4507:6;4504:1;4501:13;4493:184;;;4574:13;;4570:22;;4556:37;;4615:14;;;;4652:15;;;;4529:1;4522:9;;;;;4493:184;;;4497:3;;;;;4726:4;4719:5;4715:16;4709:23;4702:4;4697:3;4693:14;4686:47;4781:4;4774:5;4770:16;4764:23;4796:49;4839:4;4834:3;4830:14;4814;3662:26;3651:38;3639:51;;3586:110;4796:49;-1:-1:-1;4861:5:1;3701:1171;-1:-1:-1;;;3701:1171:1:o;4877:258::-;5056:2;5045:9;5038:21;5019:4;5076:53;5125:2;5114:9;5110:18;5102:6;5076:53;:::i;:::-;5068:61;4877:258;-1:-1:-1;;;4877:258:1:o;5140:1444::-;5438:4;5486:2;5475:9;5471:18;5516:2;5505:9;5498:21;5539:6;5574;5568:13;5605:6;5597;5590:22;5643:3;5632:9;5628:19;5621:26;;5706:3;5696:6;5693:1;5689:14;5678:9;5674:30;5670:40;5656:54;;5729:4;5768:2;5760:6;5756:15;5789:1;5799:264;5813:6;5810:1;5807:13;5799:264;;;5906:3;5902:8;5890:9;5882:6;5878:22;5874:37;5869:3;5862:50;5935:48;5976:6;5967;5961:13;5935:48;:::i;:::-;5925:58;-1:-1:-1;6041:12:1;;;;6006:15;;;;5835:1;5828:9;5799:264;;;-1:-1:-1;;6099:22:1;;;6079:18;;;6072:50;6175:13;;6197:24;;;6279:15;;;;6239;;;-1:-1:-1;6175:13:1;-1:-1:-1;6314:1:1;6324:189;6340:8;6335:3;6332:17;6324:189;;;6409:15;;6395:30;;6486:17;;;;6447:14;;;;6368:1;6359:11;6324:189;;;-1:-1:-1;;;6566:2:1;6551:18;;;;6544:34;;;;-1:-1:-1;6530:5:1;5140:1444;-1:-1:-1;;;5140:1444:1:o;6589:377::-;6657:6;6665;6718:2;6706:9;6697:7;6693:23;6689:32;6686:52;;;6734:1;6731;6724:12;6686:52;6770:9;6757:23;6747:33;;6830:2;6819:9;6815:18;6802:32;-1:-1:-1;;;;;6867:5:1;6863:54;6856:5;6853:65;6843:93;;6932:1;6929;6922:12;6843:93;6955:5;6945:15;;;6589:377;;;;;:::o;6971:184::-;-1:-1:-1;;;7020:1:1;7013:88;7120:4;7117:1;7110:15;7144:4;7141:1;7134:15;7160:407;7314:2;7299:18;;7347:1;7336:13;;7326:201;;-1:-1:-1;;;7380:1:1;7373:88;7484:4;7481:1;7474:15;7512:4;7509:1;7502:15;7326:201;7536:25;;;7160:407;:::o;7572:616::-;7759:6;7767;7775;7783;7791;7844:3;7832:9;7823:7;7819:23;7815:33;7812:53;;;7861:1;7858;7851:12;7812:53;7897:9;7884:23;7874:33;;7954:2;7943:9;7939:18;7926:32;7916:42;;7977:53;8022:7;8017:2;8006:9;8002:18;7977:53;:::i;:::-;7967:63;;8049:60;8101:7;8095:3;8084:9;8080:19;8049:60;:::i;:::-;8039:70;;8128:54;8174:7;8168:3;8157:9;8153:19;8128:54;:::i;:::-;8118:64;;7572:616;;;;;;;;:::o;9940:184::-;-1:-1:-1;;;9989:1:1;9982:88;10089:4;10086:1;10079:15;10113:4;10110:1;10103:15;10129:184;-1:-1:-1;;;10178:1:1;10171:88;10278:4;10275:1;10268:15;10302:4;10299:1;10292:15;10318:135;10357:3;-1:-1:-1;;10378:17:1;;10375:43;;;10398:18;;:::i;:::-;-1:-1:-1;10445:1:1;10434:13;;10318:135::o;10864:128::-;10904:3;10935:1;10931:6;10928:1;10925:13;10922:39;;;10941:18;;:::i;:::-;-1:-1:-1;10977:9:1;;10864:128::o;10997:125::-;11037:4;11065:1;11062;11059:8;11056:34;;;11070:18;;:::i;:::-;-1:-1:-1;11107:9:1;;10997:125::o;13989:184::-;-1:-1:-1;;;14038:1:1;14031:88;14138:4;14135:1;14128:15;14162:4;14159:1;14152:15;14178:120;14218:1;14244;14234:35;;14249:18;;:::i;:::-;-1:-1:-1;14283:9:1;;14178:120::o;14303:168::-;14343:7;14409:1;14405;14401:6;14397:14;14394:1;14391:21;14386:1;14379:9;14372:17;14368:45;14365:71;;;14416:18;;:::i;:::-;-1:-1:-1;14456:9:1;;14303:168::o;16599:112::-;16631:1;16657;16647:35;;16662:18;;:::i;:::-;-1:-1:-1;16696:9:1;;16599:112::o
Swarm Source
ipfs://d9ebee3f7103406b1765c7ba0608003646125e0fd2f1fc7be84b3ed92c48bc9e
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.