{
    "schemaVersion": "2.0.0",
    "contractName": "SignatureValidatorSubContract",
    "compilerOutput": {
        "abi": [
            {
                "constant": true,
                "inputs": [
                    {
                        "internalType": "bytes",
                        "name": "data",
                        "type": "bytes"
                    }
                ],
                "name": "isValid",
                "outputs": [
                    {
                        "internalType": "bool",
                        "name": "",
                        "type": "bool"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [
                    {
                        "internalType": "bytes",
                        "name": "data",
                        "type": "bytes"
                    }
                ],
                "name": "amountRemaining",
                "outputs": [
                    {
                        "internalType": "uint256",
                        "name": "",
                        "type": "uint256"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "arguments",
                "outputs": [
                    {
                        "internalType": "string",
                        "name": "",
                        "type": "string"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "internalType": "bytes",
                        "name": "data",
                        "type": "bytes"
                    }
                ],
                "name": "participate",
                "outputs": [
                    {
                        "internalType": "bool",
                        "name": "",
                        "type": "bool"
                    }
                ],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            }
        ],
        "devdoc": {
            "methods": {}
        },
        "evm": {
            "bytecode": {
                "linkReferences": {},
                "object": "0x6101e060405261012b6080818152906109a460a03980516100289160009160209091019061003b565b5034801561003557600080fd5b506100d6565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061007c57805160ff19168380011785556100a9565b828001600101855582156100a9579182015b828111156100a957825182559160200191906001019061008e565b506100b59291506100b9565b5090565b6100d391905b808211156100b557600081556001016100bf565b90565b6108bf806100e56000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a03e738146100515780635b2ac04a146100d55780637528de0d14610157578063d7d49123146101d4575b600080fd5b6100c16004803603602081101561006757600080fd5b81019060208101813564010000000081111561008257600080fd5b82018360208201111561009457600080fd5b803590602001918460018302840111640100000000831117156100b657600080fd5b509092509050610244565b604080519115158252519081900360200190f35b610145600480360360208110156100eb57600080fd5b81019060208101813564010000000081111561010657600080fd5b82018360208201111561011857600080fd5b8035906020019184600183028401116401000000008311171561013a57600080fd5b50909250905061047d565b60408051918252519081900360200190f35b61015f610485565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610199578181015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100c1600480360360208110156101ea57600080fd5b81019060208101813564010000000081111561020557600080fd5b82018360208201111561021757600080fd5b8035906020019184600183028401116401000000008311171561023957600080fd5b50909250905061051b565b600080610291600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610523169050565b905060006102df601486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff61052b169050565b9050600061032d603487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff61052b169050565b9050606061037e6054600289898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610533169050565b905060606103cf605660058a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610533169050565b9050606061041d605b8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff6105bd169050565b905060006104608a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105d292505050565b905061046d328284610730565b9750505050505050505b92915050565b600092915050565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105115780601f106104e657610100808354040283529160200191610511565b820191906000526020600020905b8154815290600101906020018083116104f457829003601f168201915b5050505050905090565b600192915050565b016014015190565b016020015190565b606080826040519080825280601f01601f191660200182016040528015610561576020820181803883390190505b509050835b8484018110156105b45785818151811061057c57fe5b602001015160f81c60f81b828683038151811061059557fe5b60200101906001600160f81b031916908160001a905350600101610566565b50949350505050565b60606105cb83836041610533565b9392505050565b6000806105e5838263ffffffff61052316565b905060006105fa84601463ffffffff61052b16565b9050600061060f85603463ffffffff61052b16565b90506060610626866054600263ffffffff61053316565b9050606061063d876056600563ffffffff61053316565b9050848484848460405160200180866001600160a01b03166001600160a01b031660601b815260140185815260200184815260200183805190602001908083835b6020831061069d5780518252601f19909201916020918201910161067e565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106106e55780518252601f1990920191602091820191016106c6565b6001836020036101000a038019825116818451168082178552505050505050905001955050505050506040516020818303038152906040528051906020012095505050505050919050565b600061074b8261073f85610768565b9063ffffffff6107b916565b6001600160a01b0316846001600160a01b03161490509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008060008084516041146107d45760009350505050610477565b50505060208201516040830151606084015160001a601b8110156107f657601b015b8060ff16601b1415801561080e57508060ff16601c14155b1561081f5760009350505050610477565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015610876573d6000803e3d6000fd5b50505060206040510351935050505061047756fea265627a7a7231582082ba18882d4e42a2a99d39b8d806128209ad23ff2c051327e58903d0e56ecead64736f6c634300050b00327b226d616b6572223a5b7b226461746174797065223a2261646472657373222c226e616d65223a227465737441646472657373227d2c7b226461746174797065223a2275696e74222c226e616d65223a227465737455696e74227d2c7b226461746174797065223a22696e74222c226e616d65223a2274657374496e74227d2c7b226461746174797065223a226279746573222c226e616d65223a2274776f4279746573227d2c7b226461746174797065223a226279746573222c226e616d65223a22666976654279746573227d2c7b226461746174797065223a227369676e6174757265222c226e616d65223a227369676e6174757265222c20227369676e61747572654669656c6473223a205b302c20312c20322c20332c20345d7d5d2c2274616b6572223a5b5d7d",
                "opcodes": "PUSH2 0x1E0 PUSH1 0x40 MSTORE PUSH2 0x12B PUSH1 0x80 DUP2 DUP2 MSTORE SWAP1 PUSH2 0x9A4 PUSH1 0xA0 CODECOPY DUP1 MLOAD PUSH2 0x28 SWAP2 PUSH1 0x0 SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x3B JUMP JUMPDEST POP CALLVALUE DUP1 ISZERO PUSH2 0x35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x7C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xA9 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xA9 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xA9 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x8E JUMP JUMPDEST POP PUSH2 0xB5 SWAP3 SWAP2 POP PUSH2 0xB9 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xD3 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xB5 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xBF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x8BF DUP1 PUSH2 0xE5 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA03E738 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x5B2AC04A EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0x7528DE0D EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0xD7D49123 EQ PUSH2 0x1D4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x244 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x118 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x47D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15F PUSH2 0x485 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x199 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x181 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x51B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x291 PUSH1 0x0 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x523 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2DF PUSH1 0x14 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x52B AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x32D PUSH1 0x34 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x52B AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x37E PUSH1 0x54 PUSH1 0x2 DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x533 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x3CF PUSH1 0x56 PUSH1 0x5 DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x533 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x41D PUSH1 0x5B DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x5BD AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x460 DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x5D2 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x46D ORIGIN DUP3 DUP5 PUSH2 0x730 JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x511 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4E6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x511 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4F4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST ADD PUSH1 0x14 ADD MLOAD SWAP1 JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x561 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP4 JUMPDEST DUP5 DUP5 ADD DUP2 LT ISZERO PUSH2 0x5B4 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x57C JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP3 DUP7 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH2 0x595 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x566 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5CB DUP4 DUP4 PUSH1 0x41 PUSH2 0x533 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x5E5 DUP4 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x523 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5FA DUP5 PUSH1 0x14 PUSH4 0xFFFFFFFF PUSH2 0x52B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x60F DUP6 PUSH1 0x34 PUSH4 0xFFFFFFFF PUSH2 0x52B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x626 DUP7 PUSH1 0x54 PUSH1 0x2 PUSH4 0xFFFFFFFF PUSH2 0x533 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x63D DUP8 PUSH1 0x56 PUSH1 0x5 PUSH4 0xFFFFFFFF PUSH2 0x533 AND JUMP JUMPDEST SWAP1 POP DUP5 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x69D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x67E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP6 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x6E5 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x6C6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP6 POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74B DUP3 PUSH2 0x73F DUP6 PUSH2 0x768 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7B9 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3C DUP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x5C SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 MLOAD PUSH1 0x41 EQ PUSH2 0x7D4 JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x477 JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH1 0x1B DUP2 LT ISZERO PUSH2 0x7F6 JUMPI PUSH1 0x1B ADD JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x80E JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x81F JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x477 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP5 AND DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x876 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP4 POP POP POP POP PUSH2 0x477 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP3 0xba XOR DUP9 0x2d 0x4e TIMESTAMP LOG2 0xa9 SWAP14 CODECOPY 0xb8 0xd8 MOD SLT DUP3 MULMOD 0xad 0x23 SELFDESTRUCT 0x2c SDIV SGT 0x27 0xe5 DUP10 SUB 0xd0 0xe5 PUSH15 0xCEAD64736F6C634300050B00327B22 PUSH14 0x616B6572223A5B7B226461746174 PUSH26 0x7065223A2261646472657373222C226E616D65223A2274657374 COINBASE PUSH5 0x6472657373 0x22 PUSH30 0x2C7B226461746174797065223A2275696E74222C226E616D65223A227465 PUSH20 0x7455696E74227D2C7B226461746174797065223A 0x22 PUSH10 0x6E74222C226E616D6522 GASPRICE 0x22 PUSH21 0x657374496E74227D2C7B226461746174797065223A 0x22 PUSH3 0x797465 PUSH20 0x222C226E616D65223A2274776F4279746573227D 0x2c PUSH28 0x226461746174797065223A226279746573222C226E616D65223A2266 PUSH10 0x76654279746573227D2C PUSH28 0x226461746174797065223A227369676E6174757265222C226E616D65 0x22 GASPRICE 0x22 PUSH20 0x69676E6174757265222C20227369676E61747572 PUSH6 0x4669656C6473 0x22 GASPRICE KECCAK256 JUMPDEST ADDRESS 0x2c KECCAK256 BALANCE 0x2c KECCAK256 ORIGIN 0x2c KECCAK256 CALLER 0x2c KECCAK256 CALLVALUE 0x5d PUSH30 0x5D2C2274616B6572223A5B5D7D0000000000000000000000000000000000 ",
                "sourceMap": "430:329:17:-;336:1657;430:329;;336:1657;430:329;;;336:1657;430:329;;;;;;;;;;;;;;;:::i;:::-;;336:1657;8:9:-1;5:2;;;30:1;27;20:12;5:2;336:1657:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;336:1657:17;;;-1:-1:-1;336:1657:17;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
            },
            "deployedBytecode": {
                "linkReferences": {},
                "object": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a03e738146100515780635b2ac04a146100d55780637528de0d14610157578063d7d49123146101d4575b600080fd5b6100c16004803603602081101561006757600080fd5b81019060208101813564010000000081111561008257600080fd5b82018360208201111561009457600080fd5b803590602001918460018302840111640100000000831117156100b657600080fd5b509092509050610244565b604080519115158252519081900360200190f35b610145600480360360208110156100eb57600080fd5b81019060208101813564010000000081111561010657600080fd5b82018360208201111561011857600080fd5b8035906020019184600183028401116401000000008311171561013a57600080fd5b50909250905061047d565b60408051918252519081900360200190f35b61015f610485565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610199578181015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100c1600480360360208110156101ea57600080fd5b81019060208101813564010000000081111561020557600080fd5b82018360208201111561021757600080fd5b8035906020019184600183028401116401000000008311171561023957600080fd5b50909250905061051b565b600080610291600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610523169050565b905060006102df601486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff61052b169050565b9050600061032d603487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff61052b169050565b9050606061037e6054600289898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610533169050565b905060606103cf605660058a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610533169050565b9050606061041d605b8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff6105bd169050565b905060006104608a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105d292505050565b905061046d328284610730565b9750505050505050505b92915050565b600092915050565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105115780601f106104e657610100808354040283529160200191610511565b820191906000526020600020905b8154815290600101906020018083116104f457829003601f168201915b5050505050905090565b600192915050565b016014015190565b016020015190565b606080826040519080825280601f01601f191660200182016040528015610561576020820181803883390190505b509050835b8484018110156105b45785818151811061057c57fe5b602001015160f81c60f81b828683038151811061059557fe5b60200101906001600160f81b031916908160001a905350600101610566565b50949350505050565b60606105cb83836041610533565b9392505050565b6000806105e5838263ffffffff61052316565b905060006105fa84601463ffffffff61052b16565b9050600061060f85603463ffffffff61052b16565b90506060610626866054600263ffffffff61053316565b9050606061063d876056600563ffffffff61053316565b9050848484848460405160200180866001600160a01b03166001600160a01b031660601b815260140185815260200184815260200183805190602001908083835b6020831061069d5780518252601f19909201916020918201910161067e565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106106e55780518252601f1990920191602091820191016106c6565b6001836020036101000a038019825116818451168082178552505050505050905001955050505050506040516020818303038152906040528051906020012095505050505050919050565b600061074b8261073f85610768565b9063ffffffff6107b916565b6001600160a01b0316846001600160a01b03161490509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008060008084516041146107d45760009350505050610477565b50505060208201516040830151606084015160001a601b8110156107f657601b015b8060ff16601b1415801561080e57508060ff16601c14155b1561081f5760009350505050610477565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015610876573d6000803e3d6000fd5b50505060206040510351935050505061047756fea265627a7a7231582082ba18882d4e42a2a99d39b8d806128209ad23ff2c051327e58903d0e56ecead64736f6c634300050b0032",
                "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA03E738 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x5B2AC04A EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0x7528DE0D EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0xD7D49123 EQ PUSH2 0x1D4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x244 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x118 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x47D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15F PUSH2 0x485 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x199 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x181 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x51B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x291 PUSH1 0x0 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x523 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2DF PUSH1 0x14 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x52B AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x32D PUSH1 0x34 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x52B AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x37E PUSH1 0x54 PUSH1 0x2 DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x533 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x3CF PUSH1 0x56 PUSH1 0x5 DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x533 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x41D PUSH1 0x5B DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0x5BD AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x460 DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x5D2 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x46D ORIGIN DUP3 DUP5 PUSH2 0x730 JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x511 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4E6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x511 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4F4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST ADD PUSH1 0x14 ADD MLOAD SWAP1 JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x561 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP4 JUMPDEST DUP5 DUP5 ADD DUP2 LT ISZERO PUSH2 0x5B4 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x57C JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP3 DUP7 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH2 0x595 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x566 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5CB DUP4 DUP4 PUSH1 0x41 PUSH2 0x533 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x5E5 DUP4 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x523 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5FA DUP5 PUSH1 0x14 PUSH4 0xFFFFFFFF PUSH2 0x52B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x60F DUP6 PUSH1 0x34 PUSH4 0xFFFFFFFF PUSH2 0x52B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x626 DUP7 PUSH1 0x54 PUSH1 0x2 PUSH4 0xFFFFFFFF PUSH2 0x533 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x63D DUP8 PUSH1 0x56 PUSH1 0x5 PUSH4 0xFFFFFFFF PUSH2 0x533 AND JUMP JUMPDEST SWAP1 POP DUP5 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x69D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x67E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP6 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x6E5 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x6C6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP6 POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74B DUP3 PUSH2 0x73F DUP6 PUSH2 0x768 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7B9 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3C DUP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x5C SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 MLOAD PUSH1 0x41 EQ PUSH2 0x7D4 JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x477 JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH1 0x1B DUP2 LT ISZERO PUSH2 0x7F6 JUMPI PUSH1 0x1B ADD JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x80E JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x81F JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x477 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP5 AND DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x876 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP4 POP POP POP POP PUSH2 0x477 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP3 0xba XOR DUP9 0x2d 0x4e TIMESTAMP LOG2 0xa9 SWAP14 CODECOPY 0xb8 0xd8 MOD SLT DUP3 MULMOD 0xad 0x23 SELFDESTRUCT 0x2c SDIV SGT 0x27 0xe5 DUP10 SUB 0xd0 0xe5 PUSH15 0xCEAD64736F6C634300050B00320000 ",
                "sourceMap": "336:1657:17:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;336:1657:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;865:496;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;865:496:17;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;865:496:17;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;865:496:17;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;865:496:17;;-1:-1:-1;865:496:17;-1:-1:-1;865:496:17;:::i;:::-;;;;;;;;;;;;;;;;;;1367:100;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1367:100:17;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;1367:100:17;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1367:100:17;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1367:100:17;;-1:-1:-1;1367:100:17;-1:-1:-1;1367:100:17;:::i;:::-;;;;;;;;;;;;;;;;766:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;766:93:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:94;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1473:94:17;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;1473:94:17;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1473:94:17;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1473:94:17;;-1:-1:-1;1473:94:17;-1:-1:-1;1473:94:17;:::i;865:496::-;926:4;942:19;964:18;980:1;964:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;964:15:17;;:18;-1:-1:-1;;964:18:17;:15;:18;;-1:-1:-1;964:18:17:i;:::-;942:40;;992:13;1008:16;1021:2;1008:4;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1008:12:17;;:16;-1:-1:-1;;1008:16:17;:12;:16;;-1:-1:-1;1008:16:17:i;:::-;992:32;;1034:11;1048:15;1060:2;1048:4;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1048:11:17;;:15;-1:-1:-1;;1048:15:17;:11;:15;;-1:-1:-1;1048:15:17:i;:::-;1034:29;;1073:21;1097:20;1111:2;1115:1;1097:4;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1097:13:17;;:20;;-1:-1:-1;;1097:20:17;:13;:20;;-1:-1:-1;1097:20:17:i;:::-;1073:44;;1127:22;1152:20;1166:2;1170:1;1152:4;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1152:13:17;;:20;;-1:-1:-1;;1152:20:17;:13;:20;;-1:-1:-1;1152:20:17:i;:::-;1127:45;;1182:22;1207:21;1225:2;1207:4;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1207:17:17;;:21;-1:-1:-1;;1207:21:17;:17;:21;;-1:-1:-1;1207:21:17:i;:::-;1182:46;;1238:12;1253:18;1266:4;;1253:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1253:12:17;;-1:-1:-1;;;1253:18:17:i;:::-;1238:33;;1289:65;1327:9;1338:4;1344:9;1289:37;:65::i;:::-;1282:72;;;;;;;;;865:496;;;;;:::o;1367:100::-;1436:4;1367:100;;;;:::o;766:93::-;842:10;835:17;;;;;;;;-1:-1:-1;;835:17:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;810:13;;835:17;;842:10;;835:17;;842:10;835:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;766:93;:::o;1473:94::-;1556:4;1473:94;;;;:::o;52:171:18:-;185:16;203:2;181:25;175:32;;156:61::o;229:167::-;358:16;376:2;354:25;348:32;;328:62::o;571:282::-;656:12;680:19;712:6;702:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;702:17:18;87:34:-1;135:17;;-1:-1;702:17:18;-1:-1:-1;680:39:18;-1:-1:-1;742:5:18;729:95;762:5;753:6;:14;749:1;:18;729:95;;;806:4;811:1;806:7;;;;;;;;;;;;;;;;788:6;797:5;795:1;:7;788:15;;;;;;;;;;;:25;-1:-1:-1;;;;;788:25:18;;;;;;;;-1:-1:-1;769:3:18;;729:95;;;-1:-1:-1;840:6:18;571:282;-1:-1:-1;;;;571:282:18:o;859:139::-;935:12;966:25;975:4;981:5;988:2;966:8;:25::i;:::-;959:32;859:139;-1:-1:-1;;;859:139:18:o;1573:418:17:-;1637:7;;1678:18;:4;1637:7;1678:18;:15;:18;:::i;:::-;1656:40;-1:-1:-1;1706:13:17;1722:16;:4;1735:2;1722:16;:12;:16;:::i;:::-;1706:32;-1:-1:-1;1748:11:17;1762:15;:4;1774:2;1762:15;:11;:15;:::i;:::-;1748:29;-1:-1:-1;1787:21:17;1811:20;:4;1825:2;1829:1;1811:20;:13;:20;:::i;:::-;1787:44;-1:-1:-1;1841:22:17;1866:20;:4;1880:2;1884:1;1866:20;:13;:20;:::i;:::-;1841:45;;1931:11;1944:8;1954:7;1963:8;1973:9;1914:69;;;;;;-1:-1:-1;;;;;1914:69:17;-1:-1:-1;;;;;1914:69:17;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1914:69:17;;;;;;;;;;-1:-1:-1;1914:69:17;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1914:69:17;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1914:69:17;;;1904:80;;;;;;1897:87;;;;;;;1573:418;;;:::o;577:194:19:-;684:4;713:53;756:9;713:34;:9;:32;:34::i;:::-;:42;:53;:42;:53;:::i;:::-;-1:-1:-1;;;;;703:63:19;:6;-1:-1:-1;;;;;703:63:19;;696:70;;577:194;;;;;:::o;1785:265:11:-;1984:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1984:58:11;;;;;;;1974:69;;;;;;1785:265::o;609:1026::-;687:7;706:9;725;744:7;804:9;:16;824:2;804:22;800:72;;858:1;842:19;;;;;;;800:72;-1:-1:-1;;;1166:4:11;1151:20;;1145:27;1211:4;1196:20;;1190:27;1264:4;1249:20;;1243:27;1240:1;1235:36;1390:2;1386:6;;1382:44;;;1413:2;1408:7;1382:44;1503:1;:7;;1508:2;1503:7;;:18;;;;;1514:1;:7;;1519:2;1514:7;;1503:18;1499:130;;;1553:1;1537:19;;;;;;;1499:130;1594:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1594:24:11;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1594:24:11;;;;;;;;1587:31;;;;;;"
            }
        }
    },
    "sources": {
        "test/SignatureValidatorSubContract.sol": {
            "id": 17
        },
        "@kosu/subcontract-sdk/contracts/SubContract.sol": {
            "id": 20
        },
        "@kosu/subcontract-sdk/contracts/BytesDecoder.sol": {
            "id": 18
        },
        "@kosu/subcontract-sdk/contracts/SignatureVerification.sol": {
            "id": 19
        },
        "openzeppelin-solidity/contracts/cryptography/ECDSA.sol": {
            "id": 11
        },
        "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol": {
            "id": 13
        },
        "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": {
            "id": 14
        },
        "openzeppelin-solidity/contracts/math/SafeMath.sol": {
            "id": 12
        }
    },
    "sourceCodes": {
        "test/SignatureValidatorSubContract.sol": "pragma solidity ^0.5.0;\n\nimport \"@kosu/subcontract-sdk/contracts/SubContract.sol\";\nimport \"@kosu/subcontract-sdk/contracts/BytesDecoder.sol\";\nimport \"@kosu/subcontract-sdk/contracts/SignatureVerification.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\n\ncontract SignatureValidatorSubContract is SubContract {\n    using BytesDecoder for bytes;\n    string private _arguments = '{\"maker\":[{\"datatype\":\"address\",\"name\":\"testAddress\"},{\"datatype\":\"uint\",\"name\":\"testUint\"},{\"datatype\":\"int\",\"name\":\"testInt\"},{\"datatype\":\"bytes\",\"name\":\"twoBytes\"},{\"datatype\":\"bytes\",\"name\":\"fiveBytes\"},{\"datatype\":\"signature\",\"name\":\"signature\", \"signatureFields\": [0, 1, 2, 3, 4]}],\"taker\":[]}';\n\n    function arguments() external view returns (string memory) {\n        return _arguments;\n    }\n\n    function isValid(bytes calldata data) external view returns (bool) {\n        address testAddress = data.getAddress(0);\n        uint testUint = data.getUint(20);\n        int testInt = data.getInt(52);\n        bytes memory twoBytes = data.getBytes(84, 2);\n        bytes memory fiveBytes = data.getBytes(86, 5);\n        bytes memory signature = data.getSignature(91);\n        bytes32 hash = getOrderHash(data);\n\n        return SignatureVerification.verifySignature(tx.origin, hash, signature);\n    }\n\n    function amountRemaining(bytes calldata data) external view returns (uint) {\n        return 0;\n    }\n\n    function participate(bytes calldata data) external returns (bool) {\n        return true;\n    }\n\n    function getOrderHash(bytes memory data) internal view returns (bytes32) {\n        address testAddress = data.getAddress(0);\n        uint testUint = data.getUint(20);\n        int testInt = data.getInt(52);\n        bytes memory twoBytes = data.getBytes(84, 2);\n        bytes memory fiveBytes = data.getBytes(86, 5);\n\n        return keccak256(abi.encodePacked(testAddress, testUint, testInt, twoBytes, fiveBytes));\n    }\n}",
        "@kosu/subcontract-sdk/contracts/SubContract.sol": "pragma solidity ^0.5.0;\n\n/** @title SubContract\n    @author Freydal\n*/\ninterface SubContract {\n\n    /** @dev Defines interface for reporting argument json.\n        @notice Defines interface for reporting argument json.\n        @return JSON string representing arguments.\n    */\n    function arguments() external view returns (string memory);\n\n    /** @dev Defines interface for Kosu Order validation.\n        @notice Defines interface for Kosu Order validation.\n        @param data Kosu Order serialized based on arguments.\n        @return boolean representing validity of order\n    */\n    function isValid(bytes calldata data) external view returns (bool);\n\n    /** @dev Defines interface for determining remaining amount available in Kosu order\n        @notice Defines interface for determining remaining amount available in Kosu order\n        @param data Kosu Order serialized based on arguments.\n        @return Number of asset available to be taken\n    */\n    function amountRemaining(bytes calldata data) external view returns (uint);\n\n    /** @dev Defines interface to settlement of Kosu order\n        @notice Defines interface to settlement of Kosu order\n        @param data Kosu Order serialized based on arguments.\n        @return Number of asset successfully taken\n    */\n    function participate(bytes calldata data) external returns (bool);\n}\n",
        "@kosu/subcontract-sdk/contracts/BytesDecoder.sol": "pragma solidity ^0.5.0;\n\nlibrary BytesDecoder {\n    function getAddress(bytes memory this, uint index) internal pure returns (address a) {\n        assembly {\n            a := mload(add(add(this, index), 20))\n        }\n    }\n\n    function getUint(bytes memory this, uint index) internal pure returns (uint ui) {\n        assembly {\n            ui := mload(add(add(this, index), 32))\n        }\n    }\n\n    function getInt(bytes memory this, uint index) internal pure returns (int i) {\n        assembly {\n            i := mload(add(add(this, index), 32))\n        }\n    }\n\n    function getBytes(bytes memory this, uint start, uint length) internal pure returns (bytes memory) {\n        bytes memory result = new bytes(length);\n        for(uint i = start; i < length + start; i++) {\n            result[i-start] = this[i];\n        }\n        return result;\n    }\n\n    function getSignature(bytes memory this, uint start) internal pure returns (bytes memory) {\n        return getBytes(this, start, 65);\n    }\n}",
        "@kosu/subcontract-sdk/contracts/SignatureVerification.sol": "pragma solidity ^0.5.0;\n\nimport \"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\";\nimport \"./BytesDecoder.sol\";\n\n/** @title SignatureVerification\n*/\nlibrary SignatureVerification {\n  using ECDSA for bytes32;\n  using BytesDecoder for bytes;\n\n  /** @dev Recovers the hash with the v, r and s.  And compares to the signer.\n      @notice Recovers the hash with the v, r and s.  And compares to the signer.\n      @param signer Signer address\n      @param orderHash Hashed Kosu order\n      @param signature The signature\n      @return Validity of the signature boolean\n  */\n  function verifySignature(address signer, bytes32 orderHash, bytes memory signature) pure internal returns (bool) {\n    return signer == orderHash.toEthSignedMessageHash().recover(signature);\n  }\n\n}\n",
        "openzeppelin-solidity/contracts/cryptography/ECDSA.sol": "pragma solidity ^0.5.0;\n\n/**\n * @title Elliptic curve signature operations\n * @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d\n * TODO Remove this library once solidity supports passing a signature to ecrecover.\n * See https://github.com/ethereum/solidity/issues/864\n */\n\nlibrary ECDSA {\n    /**\n     * @dev Recover signer address from a message by using their signature\n     * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.\n     * @param signature bytes signature, the signature is generated using web3.eth.sign()\n     */\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n        bytes32 r;\n        bytes32 s;\n        uint8 v;\n\n        // Check the signature length\n        if (signature.length != 65) {\n            return (address(0));\n        }\n\n        // Divide the signature in r, s and v variables\n        // ecrecover takes the signature parameters, and the only way to get them\n        // currently is to use assembly.\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            r := mload(add(signature, 0x20))\n            s := mload(add(signature, 0x40))\n            v := byte(0, mload(add(signature, 0x60)))\n        }\n\n        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions\n        if (v < 27) {\n            v += 27;\n        }\n\n        // If the version is correct return the signer address\n        if (v != 27 && v != 28) {\n            return (address(0));\n        } else {\n            return ecrecover(hash, v, r, s);\n        }\n    }\n\n    /**\n     * toEthSignedMessageHash\n     * @dev prefix a bytes32 value with \"\\x19Ethereum Signed Message:\"\n     * and hash the result\n     */\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n        // 32 is the length in bytes of hash,\n        // enforced by the type signature above\n        return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n    }\n}\n",
        "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol": "pragma solidity ^0.5.0;\n\nimport \"./IERC20.sol\";\nimport \"../../math/SafeMath.sol\";\n\n/**\n * @title Standard ERC20 token\n *\n * @dev Implementation of the basic standard token.\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\n * Originally based on code by FirstBlood:\n * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol\n *\n * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for\n * all accounts just by listening to said events. Note that this isn't required by the specification, and other\n * compliant implementations may not do it.\n */\ncontract ERC20 is IERC20 {\n    using SafeMath for uint256;\n\n    mapping (address => uint256) private _balances;\n\n    mapping (address => mapping (address => uint256)) private _allowed;\n\n    uint256 private _totalSupply;\n\n    /**\n    * @dev Total number of tokens in existence\n    */\n    function totalSupply() public view returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n    * @dev Gets the balance of the specified address.\n    * @param owner The address to query the balance of.\n    * @return An uint256 representing the amount owned by the passed address.\n    */\n    function balanceOf(address owner) public view returns (uint256) {\n        return _balances[owner];\n    }\n\n    /**\n     * @dev Function to check the amount of tokens that an owner allowed to a spender.\n     * @param owner address The address which owns the funds.\n     * @param spender address The address which will spend the funds.\n     * @return A uint256 specifying the amount of tokens still available for the spender.\n     */\n    function allowance(address owner, address spender) public view returns (uint256) {\n        return _allowed[owner][spender];\n    }\n\n    /**\n    * @dev Transfer token for a specified address\n    * @param to The address to transfer to.\n    * @param value The amount to be transferred.\n    */\n    function transfer(address to, uint256 value) public returns (bool) {\n        _transfer(msg.sender, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\n     * Beware that changing an allowance with this method brings the risk that someone may use both the old\n     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\n     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     */\n    function approve(address spender, uint256 value) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = value;\n        emit Approval(msg.sender, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev Transfer tokens from one address to another.\n     * Note that while this function emits an Approval event, this is not required as per the specification,\n     * and other compliant implementations may not emit the event.\n     * @param from address The address which you want to send tokens from\n     * @param to address The address which you want to transfer to\n     * @param value uint256 the amount of tokens to be transferred\n     */\n    function transferFrom(address from, address to, uint256 value) public returns (bool) {\n        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);\n        _transfer(from, to, value);\n        emit Approval(from, msg.sender, _allowed[from][msg.sender]);\n        return true;\n    }\n\n    /**\n     * @dev Increase the amount of tokens that an owner allowed to a spender.\n     * approve should be called when allowed_[_spender] == 0. To increment\n     * allowed value is better to use this function to avoid 2 calls (and wait until\n     * the first transaction is mined)\n     * From MonolithDAO Token.sol\n     * Emits an Approval event.\n     * @param spender The address which will spend the funds.\n     * @param addedValue The amount of tokens to increase the allowance by.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);\n        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n        return true;\n    }\n\n    /**\n     * @dev Decrease the amount of tokens that an owner allowed to a spender.\n     * approve should be called when allowed_[_spender] == 0. To decrement\n     * allowed value is better to use this function to avoid 2 calls (and wait until\n     * the first transaction is mined)\n     * From MonolithDAO Token.sol\n     * Emits an Approval event.\n     * @param spender The address which will spend the funds.\n     * @param subtractedValue The amount of tokens to decrease the allowance by.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue);\n        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n        return true;\n    }\n\n    /**\n    * @dev Transfer token for a specified addresses\n    * @param from The address to transfer from.\n    * @param to The address to transfer to.\n    * @param value The amount to be transferred.\n    */\n    function _transfer(address from, address to, uint256 value) internal {\n        require(to != address(0));\n\n        _balances[from] = _balances[from].sub(value);\n        _balances[to] = _balances[to].add(value);\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Internal function that mints an amount of the token and assigns it to\n     * an account. This encapsulates the modification of balances such that the\n     * proper events are emitted.\n     * @param account The account that will receive the created tokens.\n     * @param value The amount that will be created.\n     */\n    function _mint(address account, uint256 value) internal {\n        require(account != address(0));\n\n        _totalSupply = _totalSupply.add(value);\n        _balances[account] = _balances[account].add(value);\n        emit Transfer(address(0), account, value);\n    }\n\n    /**\n     * @dev Internal function that burns an amount of the token of a given\n     * account.\n     * @param account The account whose tokens will be burnt.\n     * @param value The amount that will be burnt.\n     */\n    function _burn(address account, uint256 value) internal {\n        require(account != address(0));\n\n        _totalSupply = _totalSupply.sub(value);\n        _balances[account] = _balances[account].sub(value);\n        emit Transfer(account, address(0), value);\n    }\n\n    /**\n     * @dev Internal function that burns an amount of the token of a given\n     * account, deducting from the sender's allowance for said account. Uses the\n     * internal burn function.\n     * Emits an Approval event (reflecting the reduced allowance).\n     * @param account The account whose tokens will be burnt.\n     * @param value The amount that will be burnt.\n     */\n    function _burnFrom(address account, uint256 value) internal {\n        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);\n        _burn(account, value);\n        emit Approval(account, msg.sender, _allowed[account][msg.sender]);\n    }\n}\n",
        "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": "pragma solidity ^0.5.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n    function transfer(address to, uint256 value) external returns (bool);\n\n    function approve(address spender, uint256 value) external returns (bool);\n\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n\n    function totalSupply() external view returns (uint256);\n\n    function balanceOf(address who) external view returns (uint256);\n\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n",
        "openzeppelin-solidity/contracts/math/SafeMath.sol": "pragma solidity ^0.5.0;\n\n/**\n * @title SafeMath\n * @dev Unsigned math operations with safety checks that revert on error\n */\nlibrary SafeMath {\n    /**\n    * @dev Multiplies two unsigned integers, reverts on overflow.\n    */\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        uint256 c = a * b;\n        require(c / a == b);\n\n        return c;\n    }\n\n    /**\n    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.\n    */\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Solidity only automatically asserts when dividing by 0\n        require(b > 0);\n        uint256 c = a / b;\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n        return c;\n    }\n\n    /**\n    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).\n    */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b <= a);\n        uint256 c = a - b;\n\n        return c;\n    }\n\n    /**\n    * @dev Adds two unsigned integers, reverts on overflow.\n    */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c >= a);\n\n        return c;\n    }\n\n    /**\n    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\n    * reverts when dividing by zero.\n    */\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b != 0);\n        return a % b;\n    }\n}\n"
    },
    "sourceTreeHashHex": "0x987a0ecd5c07a179314cc20bb3c10f8a4a76a7d18cf8f3ebcbec82a8847de923",
    "compiler": {
        "name": "solc",
        "version": "soljson-v0.5.11+commit.c082d0b4.js",
        "settings": {
            "optimizer": {
                "enabled": true,
                "runs": 200,
                "details": {
                    "yul": true,
                    "deduplicate": true,
                    "cse": true,
                    "constantOptimizer": true
                }
            },
            "outputSelection": {
                "*": {
                    "*": [
                        "abi",
                        "devdoc",
                        "evm.bytecode.object",
                        "evm.bytecode.sourceMap",
                        "evm.deployedBytecode.object",
                        "evm.deployedBytecode.sourceMap"
                    ]
                }
            },
            "evmVersion": "constantinople",
            "remappings": [
                "@kosu/subcontract-sdk=/Users/hen/GitHub/km/packages/kosu-system-contracts/node_modules/@kosu/subcontract-sdk",
                "openzeppelin-solidity=/Users/hen/GitHub/km/node_modules/openzeppelin-solidity",
                "@0x/contracts-exchange=/Users/hen/GitHub/km/node_modules/@0x/contracts-exchange",
                "@0x/contracts-exchange-libs=/Users/hen/GitHub/km/node_modules/@0x/contracts-exchange-libs",
                "@0x/contracts-utils=/Users/hen/GitHub/km/node_modules/@0x/contracts-utils"
            ]
        }
    },
    "networks": {}
}
