aboutsummaryrefslogtreecommitdiffstats
path: root/packages/migrations/artifacts/2.0.0/ExchangeWrapper.json
blob: e6d61934009aa11077a141430372bbff842085da (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
{
    "schemaVersion": "2.0.0",
    "contractName": "ExchangeWrapper",
    "compilerOutput": {
        "abi": [
            {
                "constant": false,
                "inputs": [
                    {
                        "components": [
                            {
                                "name": "makerAddress",
                                "type": "address"
                            },
                            {
                                "name": "takerAddress",
                                "type": "address"
                            },
                            {
                                "name": "feeRecipientAddress",
                                "type": "address"
                            },
                            {
                                "name": "senderAddress",
                                "type": "address"
                            },
                            {
                                "name": "makerAssetAmount",
                                "type": "uint256"
                            },
                            {
                                "name": "takerAssetAmount",
                                "type": "uint256"
                            },
                            {
                                "name": "makerFee",
                                "type": "uint256"
                            },
                            {
                                "name": "takerFee",
                                "type": "uint256"
                            },
                            {
                                "name": "expirationTimeSeconds",
                                "type": "uint256"
                            },
                            {
                                "name": "salt",
                                "type": "uint256"
                            },
                            {
                                "name": "makerAssetData",
                                "type": "bytes"
                            },
                            {
                                "name": "takerAssetData",
                                "type": "bytes"
                            }
                        ],
                        "name": "order",
                        "type": "tuple"
                    },
                    {
                        "name": "takerAssetFillAmount",
                        "type": "uint256"
                    },
                    {
                        "name": "salt",
                        "type": "uint256"
                    },
                    {
                        "name": "orderSignature",
                        "type": "bytes"
                    },
                    {
                        "name": "takerSignature",
                        "type": "bytes"
                    }
                ],
                "name": "fillOrder",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "name": "targetOrderEpoch",
                        "type": "uint256"
                    },
                    {
                        "name": "salt",
                        "type": "uint256"
                    },
                    {
                        "name": "makerSignature",
                        "type": "bytes"
                    }
                ],
                "name": "cancelOrdersUpTo",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "inputs": [
                    {
                        "name": "_exchange",
                        "type": "address"
                    }
                ],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "constructor"
            }
        ],
        "evm": {
            "bytecode": {
                "linkReferences": {},
                "object": "0x608060405234801561001057600080fd5b50604051602080610a86833981018060405261002f9190810190610067565b60008054600160a060020a031916600160a060020a0392909216919091179055610099565b6000610060825161008d565b9392505050565b60006020828403121561007957600080fd5b60006100858484610054565b949350505050565b600160a060020a031690565b6109de806100a86000396000f30060806040526004361061004b5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663a2dbfe658114610050578063f7de1c8b14610072575b600080fd5b34801561005c57600080fd5b5061007061006b366004610538565b610092565b005b34801561007e57600080fd5b5061007061008d3660046105f4565b6101e4565b60405133906060907fb4be83d500000000000000000000000000000000000000000000000000000000906100ce908990899088906024016107d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906101a9908890869086908990600401610868565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b5050505050505050505050565b60405133906060907f4f9559b1000000000000000000000000000000000000000000000000000000009061021c908890602401610807565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906102f9908890869086908a908a9060040161081b565b600060405180830381600087803b15801561031357600080fd5b505af1158015610327573d6000803e3d6000fd5b50505050505050505050565b600061033f8235610924565b9392505050565b600080601f8301841361035857600080fd5b50813567ffffffffffffffff81111561037057600080fd5b60208301915083600182028301111561038857600080fd5b9250929050565b6000601f820183136103a057600080fd5b81356103b36103ae826108da565b6108b3565b915080825260208301602083018583830111156103cf57600080fd5b6103da838284610940565b50505092915050565b600061018082840312156103f657600080fd5b6104016101806108b3565b9050600061040f8484610333565b825250602061042084848301610333565b602083015250604061043484828501610333565b604083015250606061044884828501610333565b606083015250608061045c8482850161052c565b60808301525060a06104708482850161052c565b60a08301525060c06104848482850161052c565b60c08301525060e06104988482850161052c565b60e0830152506101006104ad8482850161052c565b610100830152506101206104c38482850161052c565b6101208301525061014082013567ffffffffffffffff8111156104e557600080fd5b6104f18482850161038f565b6101408301525061016082013567ffffffffffffffff81111561051357600080fd5b61051f8482850161038f565b6101608301525092915050565b600061033f823561093d565b600080600080600060a0868803121561055057600080fd5b853567ffffffffffffffff81111561056757600080fd5b610573888289016103e3565b95505060206105848882890161052c565b94505060406105958882890161052c565b935050606086013567ffffffffffffffff8111156105b257600080fd5b6105be8882890161038f565b925050608086013567ffffffffffffffff8111156105db57600080fd5b6105e78882890161038f565b9150509295509295909350565b6000806000806060858703121561060a57600080fd5b6000610616878761052c565b94505060206106278782880161052c565b935050604085013567ffffffffffffffff81111561064457600080fd5b61065087828801610346565b95989497509550505050565b61066581610924565b82525050565b6000828452602084019350610681838584610940565b61068a8361097c565b9093019392505050565b600061069f82610920565b8084526106b381602086016020860161094c565b6106bc8161097c565b9093016020019392505050565b80516000906101808401906106de858261065c565b5060208301516106f1602086018261065c565b506040830151610704604086018261065c565b506060830151610717606086018261065c565b50608083015161072a60808601826107cc565b5060a083015161073d60a08601826107cc565b5060c083015161075060c08601826107cc565b5060e083015161076360e08601826107cc565b506101008301516107786101008601826107cc565b5061012083015161078d6101208601826107cc565b506101408301518482036101408601526107a78282610694565b9150506101608301518482036101608601526107c38282610694565b95945050505050565b6106658161093d565b606080825281016107e681866106c9565b90506107f560208301856107cc565b81810360408301526107c38184610694565b6020810161081582846107cc565b92915050565b6080810161082982886107cc565b610836602083018761065c565b81810360408301526108488186610694565b9050818103606083015261085d81848661066b565b979650505050505050565b6080810161087682876107cc565b610883602083018661065c565b81810360408301526108958185610694565b905081810360608301526108a98184610694565b9695505050505050565b60405181810167ffffffffffffffff811182821017156108d257600080fd5b604052919050565b600067ffffffffffffffff8211156108f157600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b82818337506000910152565b60005b8381101561096757818101518382015260200161094f565b83811115610976576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058207cf6c43855ec3c90051a1652faa76da89c76ad7dcadee12edb0d13b52a6fd4f86c6578706572696d656e74616cf50037",
                "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH2 0xA86 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH2 0x2F SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x67 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x99 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60 DUP3 MLOAD PUSH2 0x8D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x85 DUP5 DUP5 PUSH2 0x54 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x9DE DUP1 PUSH2 0xA8 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xA2DBFE65 DUP2 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF7DE1C8B EQ PUSH2 0x72 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x92 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x8D CALLDATASIZE PUSH1 0x4 PUSH2 0x5F4 JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0xCE SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x1A9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0x4F9559B100000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x21C SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x807 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x2F9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x81B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x924 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B3 PUSH2 0x3AE DUP3 PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x8B3 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DA DUP4 DUP3 DUP5 PUSH2 0x940 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x401 PUSH2 0x180 PUSH2 0x8B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40F DUP5 DUP5 PUSH2 0x333 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x420 DUP5 DUP5 DUP4 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x434 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x448 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x45C DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x470 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x484 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x498 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x4AD DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x4C3 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F1 DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x51F DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x93D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x573 DUP9 DUP3 DUP10 ADD PUSH2 0x3E3 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x584 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x595 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BE DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E7 DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x616 DUP8 DUP8 PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x627 DUP8 DUP3 DUP9 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x650 DUP8 DUP3 DUP9 ADD PUSH2 0x346 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x924 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x681 DUP4 DUP6 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0x68A DUP4 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69F DUP3 PUSH2 0x920 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x6B3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x94C JUMP JUMPDEST PUSH2 0x6BC DUP2 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x6DE DUP6 DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x6F1 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x704 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x717 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x72A PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x73D PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x750 PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x763 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x778 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x78D PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x7A7 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x7C3 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x93D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x7E6 DUP2 DUP7 PUSH2 0x6C9 JUMP JUMPDEST SWAP1 POP PUSH2 0x7F5 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x7CC JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x7C3 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x815 DUP3 DUP5 PUSH2 0x7CC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x829 DUP3 DUP9 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x836 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x848 DUP2 DUP7 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x85D DUP2 DUP5 DUP7 PUSH2 0x66B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x876 DUP3 DUP8 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x883 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x895 DUP2 DUP6 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x8A9 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x967 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x94F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH29 0xF6C43855EC3C90051A1652FAA76DA89C76AD7DCADEE12EDB0D13B52A6F 0xd4 0xf8 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
                "sourceMap": "752:2418:10:-;;;896:99;8:9:-1;5:2;;;30:1;27;20:12;5:2;896:99:10;;;;;;;;;;;;;;;;;;;;;;957:8;:31;;-1:-1:-1;;;;;;957:31:10;-1:-1:-1;;;;;957:31:10;;;;;;;;;;752:2418;;5:122:-1;;83:39;114:6;108:13;83:39;;;74:48;68:59;-1:-1;;;68:59;134:263;;249:2;237:9;228:7;224:23;220:32;217:2;;;265:1;262;255:12;217:2;300:1;317:64;373:7;353:9;317:64;;;307:74;211:186;-1:-1;;;;211:186;404:128;-1:-1;;;;;473:54;;456:76;;752:2418:10;;;;;;"
            },
            "deployedBytecode": {
                "linkReferences": {},
                "object": "0x60806040526004361061004b5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663a2dbfe658114610050578063f7de1c8b14610072575b600080fd5b34801561005c57600080fd5b5061007061006b366004610538565b610092565b005b34801561007e57600080fd5b5061007061008d3660046105f4565b6101e4565b60405133906060907fb4be83d500000000000000000000000000000000000000000000000000000000906100ce908990899088906024016107d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906101a9908890869086908990600401610868565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b5050505050505050505050565b60405133906060907f4f9559b1000000000000000000000000000000000000000000000000000000009061021c908890602401610807565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906102f9908890869086908a908a9060040161081b565b600060405180830381600087803b15801561031357600080fd5b505af1158015610327573d6000803e3d6000fd5b50505050505050505050565b600061033f8235610924565b9392505050565b600080601f8301841361035857600080fd5b50813567ffffffffffffffff81111561037057600080fd5b60208301915083600182028301111561038857600080fd5b9250929050565b6000601f820183136103a057600080fd5b81356103b36103ae826108da565b6108b3565b915080825260208301602083018583830111156103cf57600080fd5b6103da838284610940565b50505092915050565b600061018082840312156103f657600080fd5b6104016101806108b3565b9050600061040f8484610333565b825250602061042084848301610333565b602083015250604061043484828501610333565b604083015250606061044884828501610333565b606083015250608061045c8482850161052c565b60808301525060a06104708482850161052c565b60a08301525060c06104848482850161052c565b60c08301525060e06104988482850161052c565b60e0830152506101006104ad8482850161052c565b610100830152506101206104c38482850161052c565b6101208301525061014082013567ffffffffffffffff8111156104e557600080fd5b6104f18482850161038f565b6101408301525061016082013567ffffffffffffffff81111561051357600080fd5b61051f8482850161038f565b6101608301525092915050565b600061033f823561093d565b600080600080600060a0868803121561055057600080fd5b853567ffffffffffffffff81111561056757600080fd5b610573888289016103e3565b95505060206105848882890161052c565b94505060406105958882890161052c565b935050606086013567ffffffffffffffff8111156105b257600080fd5b6105be8882890161038f565b925050608086013567ffffffffffffffff8111156105db57600080fd5b6105e78882890161038f565b9150509295509295909350565b6000806000806060858703121561060a57600080fd5b6000610616878761052c565b94505060206106278782880161052c565b935050604085013567ffffffffffffffff81111561064457600080fd5b61065087828801610346565b95989497509550505050565b61066581610924565b82525050565b6000828452602084019350610681838584610940565b61068a8361097c565b9093019392505050565b600061069f82610920565b8084526106b381602086016020860161094c565b6106bc8161097c565b9093016020019392505050565b80516000906101808401906106de858261065c565b5060208301516106f1602086018261065c565b506040830151610704604086018261065c565b506060830151610717606086018261065c565b50608083015161072a60808601826107cc565b5060a083015161073d60a08601826107cc565b5060c083015161075060c08601826107cc565b5060e083015161076360e08601826107cc565b506101008301516107786101008601826107cc565b5061012083015161078d6101208601826107cc565b506101408301518482036101408601526107a78282610694565b9150506101608301518482036101608601526107c38282610694565b95945050505050565b6106658161093d565b606080825281016107e681866106c9565b90506107f560208301856107cc565b81810360408301526107c38184610694565b6020810161081582846107cc565b92915050565b6080810161082982886107cc565b610836602083018761065c565b81810360408301526108488186610694565b9050818103606083015261085d81848661066b565b979650505050505050565b6080810161087682876107cc565b610883602083018661065c565b81810360408301526108958185610694565b905081810360608301526108a98184610694565b9695505050505050565b60405181810167ffffffffffffffff811182821017156108d257600080fd5b604052919050565b600067ffffffffffffffff8211156108f157600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b82818337506000910152565b60005b8381101561096757818101518382015260200161094f565b83811115610976576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058207cf6c43855ec3c90051a1652faa76da89c76ad7dcadee12edb0d13b52a6fd4f86c6578706572696d656e74616cf50037",
                "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xA2DBFE65 DUP2 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF7DE1C8B EQ PUSH2 0x72 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x92 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x8D CALLDATASIZE PUSH1 0x4 PUSH2 0x5F4 JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0xCE SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x1A9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0x4F9559B100000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x21C SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x807 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x2F9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x81B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x924 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B3 PUSH2 0x3AE DUP3 PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x8B3 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DA DUP4 DUP3 DUP5 PUSH2 0x940 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x401 PUSH2 0x180 PUSH2 0x8B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40F DUP5 DUP5 PUSH2 0x333 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x420 DUP5 DUP5 DUP4 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x434 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x448 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x45C DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x470 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x484 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x498 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x4AD DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x4C3 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F1 DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x51F DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x93D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x573 DUP9 DUP3 DUP10 ADD PUSH2 0x3E3 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x584 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x595 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BE DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E7 DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x616 DUP8 DUP8 PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x627 DUP8 DUP3 DUP9 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x650 DUP8 DUP3 DUP9 ADD PUSH2 0x346 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x924 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x681 DUP4 DUP6 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0x68A DUP4 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69F DUP3 PUSH2 0x920 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x6B3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x94C JUMP JUMPDEST PUSH2 0x6BC DUP2 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x6DE DUP6 DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x6F1 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x704 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x717 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x72A PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x73D PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x750 PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x763 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x778 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x78D PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x7A7 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x7C3 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x93D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x7E6 DUP2 DUP7 PUSH2 0x6C9 JUMP JUMPDEST SWAP1 POP PUSH2 0x7F5 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x7CC JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x7C3 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x815 DUP3 DUP5 PUSH2 0x7CC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x829 DUP3 DUP9 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x836 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x848 DUP2 DUP7 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x85D DUP2 DUP5 DUP7 PUSH2 0x66B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x876 DUP3 DUP8 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x883 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x895 DUP2 DUP6 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x8A9 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x967 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x94F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH29 0xF6C43855EC3C90051A1652FAA76DA89C76AD7DCADEE12EDB0D13B52A6F 0xd4 0xf8 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
                "sourceMap": "752:2418:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:687;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2481:687:10;;;;;;;;;;;1446:574;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1446:574:10;;;;;;;;;2481:687;2815:154;;2729:10;;2795:17;;2851:27;;2815:154;;2892:5;;2911:20;;2945:14;;2815:154;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2815:154:10;;;49:4:-1;25:18;;61:17;;2815:154:10;182:15:-1;2815:154:10;;;;179:29:-1;;;;160:49;;;-1:-1;3034:8:10;:127;;;;;2815:154;;-1:-1:-1;3034:8:10;;;;;:27;;:127;;3075:4;;3093:12;;2815:154;;3137:14;;3034:127;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3034:127:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3034:127:10;;;;2481:687;;;;;;;:::o;1446:574::-;1704:110;;1618:10;;1684:17;;1740:34;;1704:110;;1788:16;;1704:110;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1704:110:10;;;49:4:-1;25:18;;61:17;;1704:110:10;182:15:-1;1704:110:10;;;;179:29:-1;;;;160:49;;;-1:-1;1886:8:10;:127;;;;;1704:110;;-1:-1:-1;1886:8:10;;;;;:27;;:127;;1927:4;;1945:12;;1704:110;;1989:14;;;;1886:127;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1886:127:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1886:127:10;;;;1446:574;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;144:335;;;251:4;239:17;;235:27;-1:-1;225:2;;276:1;273;266:12;225:2;-1:-1;296:20;;336:18;325:30;;322:2;;;368:1;365;358:12;322:2;402:4;394:6;390:17;378:29;;452:3;445;437:6;433:16;423:8;419:31;416:40;413:2;;;469:1;466;459:12;413:2;218:261;;;;;;488:432;;578:4;566:17;;562:27;-1:-1;552:2;;603:1;600;593:12;552:2;640:6;627:20;662:60;677:44;714:6;677:44;;;662:60;;;653:69;;742:6;735:5;728:21;778:4;770:6;766:17;811:4;804:5;800:16;846:3;837:6;832:3;828:16;825:25;822:2;;;863:1;860;853:12;822:2;873:41;907:6;902:3;897;873:41;;;545:375;;;;;;;;1405:2208;;1516:5;1504:9;1499:3;1495:19;1491:31;1488:2;;;1535:1;1532;1525:12;1488:2;1553:21;1568:5;1553:21;;;1544:30;-1:-1;1632:1;1663:49;1708:3;1688:9;1663:49;;;1639:74;;-1:-1;1782:2;1815:49;1860:3;1836:22;;;1815:49;;;1808:4;1801:5;1797:16;1790:75;1734:142;1941:2;1974:49;2019:3;2010:6;1999:9;1995:22;1974:49;;;1967:4;1960:5;1956:16;1949:75;1886:149;2094:2;2127:49;2172:3;2163:6;2152:9;2148:22;2127:49;;;2120:4;2113:5;2109:16;2102:75;2045:143;2250:3;2284:49;2329:3;2320:6;2309:9;2305:22;2284:49;;;2277:4;2270:5;2266:16;2259:75;2198:147;2407:3;2441:49;2486:3;2477:6;2466:9;2462:22;2441:49;;;2434:4;2427:5;2423:16;2416:75;2355:147;2556:3;2590:49;2635:3;2626:6;2615:9;2611:22;2590:49;;;2583:4;2576:5;2572:16;2565:75;2512:139;2705:3;2739:49;2784:3;2775:6;2764:9;2760:22;2739:49;;;2732:4;2725:5;2721:16;2714:75;2661:139;2867:3;2902:49;2947:3;2938:6;2927:9;2923:22;2902:49;;;2894:5;2887;2883:17;2876:76;2810:153;3013:3;3048:49;3093:3;3084:6;3073:9;3069:22;3048:49;;;3040:5;3033;3029:17;3022:76;2973:136;3197:3;3186:9;3182:19;3169:33;3222:18;3214:6;3211:30;3208:2;;;3254:1;3251;3244:12;3208:2;3290:54;3340:3;3331:6;3320:9;3316:22;3290:54;;;3282:5;3275;3271:17;3264:81;3119:237;3444:3;3433:9;3429:19;3416:33;3469:18;3461:6;3458:30;3455:2;;;3501:1;3498;3491:12;3455:2;3537:54;3587:3;3578:6;3567:9;3563:22;3537:54;;;3529:5;3522;3518:17;3511:81;3366:237;1482:2131;;;;;3620:118;;3687:46;3725:6;3712:20;3687:46;;3745:1081;;;;;;3957:3;3945:9;3936:7;3932:23;3928:33;3925:2;;;3974:1;3971;3964:12;3925:2;4009:31;;4060:18;4049:30;;4046:2;;;4092:1;4089;4082:12;4046:2;4112:75;4179:7;4170:6;4159:9;4155:22;4112:75;;;4102:85;;3988:205;4224:2;4242:53;4287:7;4278:6;4267:9;4263:22;4242:53;;;4232:63;;4203:98;4332:2;4350:53;4395:7;4386:6;4375:9;4371:22;4350:53;;;4340:63;;4311:98;4468:2;4457:9;4453:18;4440:32;4492:18;4484:6;4481:30;4478:2;;;4524:1;4521;4514:12;4478:2;4544:62;4598:7;4589:6;4578:9;4574:22;4544:62;;;4534:72;;4419:193;4671:3;4660:9;4656:19;4643:33;4696:18;4688:6;4685:30;4682:2;;;4728:1;4725;4718:12;4682:2;4748:62;4802:7;4793:6;4782:9;4778:22;4748:62;;;4738:72;;4622:194;3919:907;;;;;;;;;4833:615;;;;;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5041:1;5058:53;5103:7;5083:9;5058:53;;;5048:63;;5020:97;5148:2;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;;;5156:63;;5127:98;5284:2;5273:9;5269:18;5256:32;5308:18;5300:6;5297:30;5294:2;;;5340:1;5337;5330:12;5294:2;5368:64;5424:7;5415:6;5404:9;5400:22;5368:64;;;4952:496;;;;-1:-1;5350:82;-1:-1;;;;4952:496;5455:110;5528:31;5553:5;5528:31;;;5523:3;5516:44;5510:55;;;5593:261;;5701:6;5696:3;5689:19;5725:4;5720:3;5716:14;5709:21;;5755:43;5791:6;5786:3;5779:5;5755:43;;;5819:29;5841:6;5819:29;;;5810:39;;;;5683:171;-1:-1;;;5683:171;5861:297;;5961:38;5993:5;5961:38;;;6016:6;6011:3;6004:19;6028:63;6084:6;6077:4;6072:3;6068:14;6061:4;6054:5;6050:16;6028:63;;;6123:29;6145:6;6123:29;;;6103:50;;;6116:4;6103:50;;5941:217;-1:-1;;;5941:217;6514:2417;6727:22;;6514:2417;;6649:5;6640:15;;;6761:61;6644:3;6727:22;6761:61;;;6670:164;6918:4;6911:5;6907:16;6901:23;6936:62;6992:4;6987:3;6983:14;6970:11;6936:62;;;6844:166;7101:4;7094:5;7090:16;7084:23;7119:62;7175:4;7170:3;7166:14;7153:11;7119:62;;;7020:173;7278:4;7271:5;7267:16;7261:23;7296:62;7352:4;7347:3;7343:14;7330:11;7296:62;;;7203:167;7458:4;7451:5;7447:16;7441:23;7476:62;7532:4;7527:3;7523:14;7510:11;7476:62;;;7380:170;7638:4;7631:5;7627:16;7621:23;7656:62;7712:4;7707:3;7703:14;7690:11;7656:62;;;7560:170;7810:4;7803:5;7799:16;7793:23;7828:62;7884:4;7879:3;7875:14;7862:11;7828:62;;;7740:162;7982:4;7975:5;7971:16;7965:23;8000:62;8056:4;8051:3;8047:14;8034:11;8000:62;;;7912:162;8167:5;8160;8156:17;8150:24;8186:63;8242:5;8237:3;8233:15;8220:11;8186:63;;;8084:177;8337:5;8330;8326:17;8320:24;8356:63;8412:5;8407:3;8403:15;8390:11;8356:63;;;8271:160;8517:5;8510;8506:17;8500:24;8570:3;8564:4;8560:14;8552:5;8547:3;8543:15;8536:39;8590:66;8651:4;8638:11;8590:66;;;8582:74;;8441:227;8754:5;8747;8743:17;8737:24;8807:3;8801:4;8797:14;8789:5;8784:3;8780:15;8773:39;8827:66;8888:4;8875:11;8827:66;;;8819:74;6622:2309;-1:-1;;;;;6622:2309;8938:110;9011:31;9036:5;9011:31;;9055:615;9281:2;9295:47;;;9266:18;;9356:92;9266:18;9434:6;9356:92;;;9348:100;;9459:62;9517:2;9506:9;9502:18;9493:6;9459:62;;;9569:9;9563:4;9559:20;9554:2;9543:9;9539:18;9532:48;9594:66;9655:4;9646:6;9594:66;;9677:193;9785:2;9770:18;;9799:61;9774:9;9833:6;9799:61;;;9756:114;;;;;9877:685;10115:3;10100:19;;10130:61;10104:9;10164:6;10130:61;;;10202:62;10260:2;10249:9;10245:18;10236:6;10202:62;;;10312:9;10306:4;10302:20;10297:2;10286:9;10282:18;10275:48;10337:66;10398:4;10389:6;10337:66;;;10329:74;;10451:9;10445:4;10441:20;10436:2;10425:9;10421:18;10414:48;10476:76;10547:4;10538:6;10530;10476:76;;;10468:84;10086:476;-1:-1;;;;;;;10086:476;10569:665;10797:3;10782:19;;10812:61;10786:9;10846:6;10812:61;;;10884:62;10942:2;10931:9;10927:18;10918:6;10884:62;;;10994:9;10988:4;10984:20;10979:2;10968:9;10964:18;10957:48;11019:66;11080:4;11071:6;11019:66;;;11011:74;;11133:9;11127:4;11123:20;11118:2;11107:9;11103:18;11096:48;11158:66;11219:4;11210:6;11158:66;;;11150:74;10768:466;-1:-1;;;;;;10768:466;11241:256;11303:2;11297:9;11329:17;;;11404:18;11389:34;;11425:22;;;11386:62;11383:2;;;11461:1;11458;11451:12;11383:2;11477;11470:22;11281:216;;-1:-1;11281:216;11504:254;;11643:18;11635:6;11632:30;11629:2;;;11675:1;11672;11665:12;11629:2;-1:-1;11748:4;11719;11696:17;;;;11715:9;11692:33;11738:15;;11566:192;12030:87;12100:12;;12084:33;12222:128;12302:42;12291:54;;12274:76;12357:79;12426:5;12409:27;12665:145;12746:6;12741:3;12736;12723:30;-1:-1;12802:1;12784:16;;12777:27;12716:94;12819:268;12884:1;12891:101;12905:6;12902:1;12899:13;12891:101;;;12972:11;;;12966:18;12953:11;;;12946:39;12927:2;12920:10;12891:101;;;13007:6;13004:1;13001:13;12998:2;;;13072:1;13063:6;13058:3;13054:16;13047:27;12998:2;12868:219;;;;;13095:97;13183:2;13163:14;13179:7;13159:28;;13143:49"
            }
        }
    },
    "sources": {
        "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.sol": {
            "id": 0
        },
        "2.0.0/protocol/Exchange/interfaces/IExchange.sol": {
            "id": 1
        },
        "2.0.0/protocol/Exchange/interfaces/IExchangeCore.sol": {
            "id": 2
        },
        "2.0.0/protocol/Exchange/interfaces/IMatchOrders.sol": {
            "id": 3
        },
        "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.sol": {
            "id": 4
        },
        "2.0.0/protocol/Exchange/interfaces/ITransactions.sol": {
            "id": 5
        },
        "2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.sol": {
            "id": 6
        },
        "2.0.0/protocol/Exchange/libs/LibEIP712.sol": {
            "id": 7
        },
        "2.0.0/protocol/Exchange/libs/LibFillResults.sol": {
            "id": 8
        },
        "2.0.0/protocol/Exchange/libs/LibOrder.sol": {
            "id": 9
        },
        "2.0.0/test/ExchangeWrapper/ExchangeWrapper.sol": {
            "id": 10
        },
        "2.0.0/utils/SafeMath/SafeMath.sol": {
            "id": 11
        }
    },
    "sourceCodes": {
        "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity 0.4.24;\n\n\ncontract IAssetProxyDispatcher {\n\n    /// @dev Registers an asset proxy to its asset proxy id.\n    ///      Once an asset proxy is registered, it cannot be unregistered.\n    /// @param assetProxy Address of new asset proxy to register.\n    function registerAssetProxy(address assetProxy)\n        external;\n\n    /// @dev Gets an asset proxy.\n    /// @param assetProxyId Id of the asset proxy.\n    /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n    function getAssetProxy(bytes4 assetProxyId)\n        external\n        view\n        returns (address);\n}\n",
        "2.0.0/protocol/Exchange/interfaces/IExchange.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IExchangeCore.sol\";\nimport \"./IMatchOrders.sol\";\nimport \"./ISignatureValidator.sol\";\nimport \"./ITransactions.sol\";\nimport \"./IAssetProxyDispatcher.sol\";\nimport \"./IWrapperFunctions.sol\";\n\n\n// solhint-disable no-empty-blocks\ncontract IExchange is\n    IExchangeCore,\n    IMatchOrders,\n    ISignatureValidator,\n    ITransactions,\n    IAssetProxyDispatcher,\n    IWrapperFunctions\n{}\n",
        "2.0.0/protocol/Exchange/interfaces/IExchangeCore.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IExchangeCore {\n\n    /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n    ///      and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n    /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n    function cancelOrdersUpTo(uint256 targetOrderEpoch)\n        external;\n\n    /// @dev Fills the input order.\n    /// @param order Order struct containing order specifications.\n    /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n    /// @param signature Proof that order has been created by maker.\n    /// @return Amounts filled and fees paid by maker and taker.\n    function fillOrder(\n        LibOrder.Order memory order,\n        uint256 takerAssetFillAmount,\n        bytes memory signature\n    )\n        public\n        returns (LibFillResults.FillResults memory fillResults);\n\n    /// @dev After calling, the order can not be filled anymore.\n    /// @param order Order struct containing order specifications.\n    function cancelOrder(LibOrder.Order memory order)\n        public;\n\n    /// @dev Gets information about an order: status, hash, and amount filled.\n    /// @param order Order to gather information on.\n    /// @return OrderInfo Information about the order and its state.\n    ///                   See LibOrder.OrderInfo for a complete description.\n    function getOrderInfo(LibOrder.Order memory order)\n        public\n        view\n        returns (LibOrder.OrderInfo memory orderInfo);\n}\n",
        "2.0.0/protocol/Exchange/interfaces/IMatchOrders.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IMatchOrders {\n\n    /// @dev Match two complementary orders that have a profitable spread.\n    ///      Each order is filled at their respective price point. However, the calculations are\n    ///      carried out as though the orders are both being filled at the right order's price point.\n    ///      The profit made by the left order goes to the taker (who matched the two orders).\n    /// @param leftOrder First order to match.\n    /// @param rightOrder Second order to match.\n    /// @param leftSignature Proof that order was created by the left maker.\n    /// @param rightSignature Proof that order was created by the right maker.\n    /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n    function matchOrders(\n        LibOrder.Order memory leftOrder,\n        LibOrder.Order memory rightOrder,\n        bytes memory leftSignature,\n        bytes memory rightSignature\n    )\n        public\n        returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n}\n",
        "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity 0.4.24;\n\n\ncontract ISignatureValidator {\n\n    /// @dev Approves a hash on-chain using any valid signature type.\n    ///      After presigning a hash, the preSign signature type will become valid for that hash and signer.\n    /// @param signerAddress Address that should have signed the given hash.\n    /// @param signature Proof that the hash has been signed by signer.\n    function preSign(\n        bytes32 hash,\n        address signerAddress,\n        bytes signature\n    )\n        external;\n    \n    /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n    /// @param validatorAddress Address of Validator contract.\n    /// @param approval Approval or disapproval of  Validator contract.\n    function setSignatureValidatorApproval(\n        address validatorAddress,\n        bool approval\n    )\n        external;\n\n    /// @dev Verifies that a signature is valid.\n    /// @param hash Message hash that is signed.\n    /// @param signerAddress Address of signer.\n    /// @param signature Proof of signing.\n    /// @return Validity of order signature.\n    function isValidSignature(\n        bytes32 hash,\n        address signerAddress,\n        bytes memory signature\n    )\n        public\n        view\n        returns (bool isValid);\n}\n",
        "2.0.0/protocol/Exchange/interfaces/ITransactions.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\npragma solidity 0.4.24;\n\n\ncontract ITransactions {\n\n    /// @dev Executes an exchange method call in the context of signer.\n    /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n    /// @param signerAddress Address of transaction signer.\n    /// @param data AbiV2 encoded calldata.\n    /// @param signature Proof of signer transaction by signer.\n    function executeTransaction(\n        uint256 salt,\n        address signerAddress,\n        bytes data,\n        bytes signature\n    )\n        external;\n}\n",
        "2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IWrapperFunctions {\n\n    /// @dev Fills the input order. Reverts if exact takerAssetFillAmount not filled.\n    /// @param order LibOrder.Order struct containing order specifications.\n    /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n    /// @param signature Proof that order has been created by maker.\n    function fillOrKillOrder(\n        LibOrder.Order memory order,\n        uint256 takerAssetFillAmount,\n        bytes memory signature\n    )\n        public\n        returns (LibFillResults.FillResults memory fillResults);\n\n    /// @dev Fills an order with specified parameters and ECDSA signature.\n    ///      Returns false if the transaction would otherwise revert.\n    /// @param order LibOrder.Order struct containing order specifications.\n    /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n    /// @param signature Proof that order has been created by maker.\n    /// @return Amounts filled and fees paid by maker and taker.\n    function fillOrderNoThrow(\n        LibOrder.Order memory order,\n        uint256 takerAssetFillAmount,\n        bytes memory signature\n    )\n        public\n        returns (LibFillResults.FillResults memory fillResults);\n\n    /// @dev Synchronously executes multiple calls of fillOrder.\n    /// @param orders Array of order specifications.\n    /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n    /// @param signatures Proofs that orders have been created by makers.\n    /// @return Amounts filled and fees paid by makers and taker.\n    function batchFillOrders(\n        LibOrder.Order[] memory orders,\n        uint256[] memory takerAssetFillAmounts,\n        bytes[] memory signatures\n    )\n        public\n        returns (LibFillResults.FillResults memory totalFillResults);\n\n    /// @dev Synchronously executes multiple calls of fillOrKill.\n    /// @param orders Array of order specifications.\n    /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n    /// @param signatures Proofs that orders have been created by makers.\n    /// @return Amounts filled and fees paid by makers and taker.\n    function batchFillOrKillOrders(\n        LibOrder.Order[] memory orders,\n        uint256[] memory takerAssetFillAmounts,\n        bytes[] memory signatures\n    )\n        public\n        returns (LibFillResults.FillResults memory totalFillResults);\n\n    /// @dev Fills an order with specified parameters and ECDSA signature.\n    ///      Returns false if the transaction would otherwise revert.\n    /// @param orders Array of order specifications.\n    /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n    /// @param signatures Proofs that orders have been created by makers.\n    /// @return Amounts filled and fees paid by makers and taker.\n    function batchFillOrdersNoThrow(\n        LibOrder.Order[] memory orders,\n        uint256[] memory takerAssetFillAmounts,\n        bytes[] memory signatures\n    )\n        public\n        returns (LibFillResults.FillResults memory totalFillResults);\n\n    /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n    /// @param orders Array of order specifications.\n    /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n    /// @param signatures Proofs that orders have been created by makers.\n    /// @return Amounts filled and fees paid by makers and taker.\n    function marketSellOrders(\n        LibOrder.Order[] memory orders,\n        uint256 takerAssetFillAmount,\n        bytes[] memory signatures\n    )\n        public\n        returns (LibFillResults.FillResults memory totalFillResults);\n\n    /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n    ///      Returns false if the transaction would otherwise revert.\n    /// @param orders Array of order specifications.\n    /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n    /// @param signatures Proofs that orders have been signed by makers.\n    /// @return Amounts filled and fees paid by makers and taker.\n    function marketSellOrdersNoThrow(\n        LibOrder.Order[] memory orders,\n        uint256 takerAssetFillAmount,\n        bytes[] memory signatures\n    )\n        public\n        returns (LibFillResults.FillResults memory totalFillResults);\n\n    /// @dev Synchronously executes multiple calls of fillOrder until total amount of makerAsset is bought by taker.\n    /// @param orders Array of order specifications.\n    /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n    /// @param signatures Proofs that orders have been signed by makers.\n    /// @return Amounts filled and fees paid by makers and taker.\n    function marketBuyOrders(\n        LibOrder.Order[] memory orders,\n        uint256 makerAssetFillAmount,\n        bytes[] memory signatures\n    )\n        public\n        returns (LibFillResults.FillResults memory totalFillResults);\n\n    /// @dev Synchronously executes multiple fill orders in a single transaction until total amount is bought by taker.\n    ///      Returns false if the transaction would otherwise revert.\n    /// @param orders Array of order specifications.\n    /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n    /// @param signatures Proofs that orders have been signed by makers.\n    /// @return Amounts filled and fees paid by makers and taker.\n    function marketBuyOrdersNoThrow(\n        LibOrder.Order[] memory orders,\n        uint256 makerAssetFillAmount,\n        bytes[] memory signatures\n    )\n        public\n        returns (LibFillResults.FillResults memory totalFillResults);\n\n    /// @dev Synchronously cancels multiple orders in a single transaction.\n    /// @param orders Array of order specifications.\n    function batchCancelOrders(LibOrder.Order[] memory orders)\n        public;\n\n    /// @dev Fetches information for all passed in orders\n    /// @param orders Array of order specifications.\n    /// @return Array of OrderInfo instances that correspond to each order.\n    function getOrdersInfo(LibOrder.Order[] memory orders)\n        public\n        view\n        returns (LibOrder.OrderInfo[] memory);\n}\n",
        "2.0.0/protocol/Exchange/libs/LibEIP712.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity 0.4.24;\n\n\ncontract LibEIP712 {\n    // EIP191 header for EIP712 prefix\n    string constant internal EIP191_HEADER = \"\\x19\\x01\";\n\n    // EIP712 Domain Name value\n    string constant internal EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n    // EIP712 Domain Version value\n    string constant internal EIP712_DOMAIN_VERSION = \"2\";\n\n    // Hash of the EIP712 Domain Separator Schema\n    bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n        \"EIP712Domain(\",\n        \"string name,\",\n        \"string version,\",\n        \"address verifyingContract\",\n        \")\"\n    ));\n\n    // Hash of the EIP712 Domain Separator data\n    // solhint-disable-next-line var-name-mixedcase\n    bytes32 public EIP712_DOMAIN_HASH;\n\n    constructor ()\n        public\n    {\n        EIP712_DOMAIN_HASH = keccak256(abi.encode(\n            EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n            keccak256(bytes(EIP712_DOMAIN_NAME)),\n            keccak256(bytes(EIP712_DOMAIN_VERSION)),\n            address(this)\n        ));\n    }\n\n    /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n    /// @param hashStruct The EIP712 hash struct.\n    /// @return EIP712 hash applied to this EIP712 Domain.\n    function hashEIP712Message(bytes32 hashStruct)\n        internal\n        view\n        returns (bytes32)\n    {\n        return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n    }\n}\n",
        "2.0.0/protocol/Exchange/libs/LibFillResults.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity 0.4.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\n\ncontract LibFillResults is\n    SafeMath\n{\n\n    struct FillResults {\n        uint256 makerAssetFilledAmount;  // Total amount of makerAsset(s) filled.\n        uint256 takerAssetFilledAmount;  // Total amount of takerAsset(s) filled.\n        uint256 makerFeePaid;            // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n        uint256 takerFeePaid;            // Total amount of ZRX paid by taker to feeRecipients(s).\n    }\n\n    struct MatchedFillResults {\n        FillResults left;                    // Amounts filled and fees paid of left order.\n        FillResults right;                   // Amounts filled and fees paid of right order.\n        uint256 leftMakerAssetSpreadAmount;  // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n    }\n\n    /// @dev Adds properties of both FillResults instances.\n    ///      Modifies the first FillResults instance specified.\n    /// @param totalFillResults Fill results instance that will be added onto.\n    /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n    function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n        internal\n        pure\n    {\n        totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n        totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n        totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n        totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n    }\n}\n",
        "2.0.0/protocol/Exchange/libs/LibOrder.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity 0.4.24;\n\nimport \"./LibEIP712.sol\";\n\n\ncontract LibOrder is\n    LibEIP712\n{\n\n    // Hash for the EIP712 Order Schema\n    bytes32 constant internal EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n        \"Order(\",\n        \"address makerAddress,\",\n        \"address takerAddress,\",\n        \"address feeRecipientAddress,\",\n        \"address senderAddress,\",\n        \"uint256 makerAssetAmount,\",\n        \"uint256 takerAssetAmount,\",\n        \"uint256 makerFee,\",\n        \"uint256 takerFee,\",\n        \"uint256 expirationTimeSeconds,\",\n        \"uint256 salt,\",\n        \"bytes makerAssetData,\",\n        \"bytes takerAssetData\",\n        \")\"\n    ));\n\n    // A valid order remains fillable until it is expired, fully filled, or cancelled.\n    // An order's state is unaffected by external factors, like account balances.\n    enum OrderStatus {\n        INVALID,                     // Default value\n        INVALID_MAKER_ASSET_AMOUNT,  // Order does not have a valid maker asset amount\n        INVALID_TAKER_ASSET_AMOUNT,  // Order does not have a valid taker asset amount\n        FILLABLE,                    // Order is fillable\n        EXPIRED,                     // Order has already expired\n        FULLY_FILLED,                // Order is fully filled\n        CANCELLED                    // Order has been cancelled\n    }\n\n    // solhint-disable max-line-length\n    struct Order {\n        address makerAddress;           // Address that created the order.      \n        address takerAddress;           // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order.          \n        address feeRecipientAddress;    // Address that will recieve fees when order is filled.      \n        address senderAddress;          // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n        uint256 makerAssetAmount;       // Amount of makerAsset being offered by maker. Must be greater than 0.        \n        uint256 takerAssetAmount;       // Amount of takerAsset being bid on by maker. Must be greater than 0.        \n        uint256 makerFee;               // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n        uint256 takerFee;               // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n        uint256 expirationTimeSeconds;  // Timestamp in seconds at which order expires.          \n        uint256 salt;                   // Arbitrary number to facilitate uniqueness of the order's hash.     \n        bytes makerAssetData;           // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n        bytes takerAssetData;           // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n    }\n    // solhint-enable max-line-length\n\n    struct OrderInfo {\n        uint8 orderStatus;                    // Status that describes order's validity and fillability.\n        bytes32 orderHash;                    // EIP712 hash of the order (see LibOrder.getOrderHash).\n        uint256 orderTakerAssetFilledAmount;  // Amount of order that has already been filled.\n    }\n\n    /// @dev Calculates Keccak-256 hash of the order.\n    /// @param order The order structure.\n    /// @return Keccak-256 EIP712 hash of the order.\n    function getOrderHash(Order memory order)\n        internal\n        view\n        returns (bytes32 orderHash)\n    {\n        orderHash = hashEIP712Message(hashOrder(order));\n        return orderHash;\n    }\n\n    /// @dev Calculates EIP712 hash of the order.\n    /// @param order The order structure.\n    /// @return EIP712 hash of the order.\n    function hashOrder(Order memory order)\n        internal\n        pure\n        returns (bytes32 result)\n    {\n        bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n        bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n        bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n\n        // Assembly for more efficiently computing:\n        //    keccak256(abi.encode(\n        //        order.makerAddress,\n        //        order.takerAddress,\n        //        order.feeRecipientAddress,\n        //        order.senderAddress,\n        //        order.makerAssetAmount,\n        //        order.takerAssetAmount,\n        //        order.makerFee,\n        //        order.takerFee,\n        //        order.expirationTimeSeconds,\n        //        order.salt,\n        //        keccak256(order.makerAssetData),\n        //        keccak256(order.takerAssetData)\n        //    ));\n\n        assembly {\n            // Backup\n            // solhint-disable-next-line space-after-comma\n            let temp1 := mload(sub(order,  32))\n            let temp2 := mload(add(order, 320))\n            let temp3 := mload(add(order, 352))\n            \n            // Hash in place\n            // solhint-disable-next-line space-after-comma\n            mstore(sub(order,  32), schemaHash)\n            mstore(add(order, 320), makerAssetDataHash)\n            mstore(add(order, 352), takerAssetDataHash)\n            result := keccak256(sub(order, 32), 416)\n            \n            // Restore\n            // solhint-disable-next-line space-after-comma\n            mstore(sub(order,  32), temp1)\n            mstore(add(order, 320), temp2)\n            mstore(add(order, 352), temp3)\n        }\n        return result;\n    }\n}\n",
        "2.0.0/test/ExchangeWrapper/ExchangeWrapper.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/interfaces/IExchange.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\n\n\ncontract ExchangeWrapper {\n\n    // Exchange contract.\n    // solhint-disable-next-line var-name-mixedcase\n    IExchange internal EXCHANGE;\n\n    constructor (address _exchange)\n        public\n    {\n        EXCHANGE = IExchange(_exchange);\n    }\n\n    /// @dev Cancels all orders created by sender with a salt less than or equal to the targetOrderEpoch\n    ///      and senderAddress equal to this contract.\n    /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n    /// @param salt Arbitrary value to gaurantee uniqueness of 0x transaction hash.\n    /// @param makerSignature Proof that maker wishes to call this function with given params.\n    function cancelOrdersUpTo(\n        uint256 targetOrderEpoch,\n        uint256 salt,\n        bytes makerSignature\n    )\n        external\n    {\n        address makerAddress = msg.sender;\n\n        // Encode arguments into byte array.\n        bytes memory data = abi.encodeWithSelector(\n            EXCHANGE.cancelOrdersUpTo.selector,\n            targetOrderEpoch\n        );\n\n        // Call `cancelOrdersUpTo` via `executeTransaction`.\n        EXCHANGE.executeTransaction(\n            salt,\n            makerAddress,\n            data,\n            makerSignature\n        );\n    }\n\n    /// @dev Fills an order using `msg.sender` as the taker.\n    /// @param order Order struct containing order specifications.\n    /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n    /// @param salt Arbitrary value to gaurantee uniqueness of 0x transaction hash.\n    /// @param orderSignature Proof that order has been created by maker.\n    /// @param takerSignature Proof that taker wishes to call this function with given params.\n    function fillOrder(\n        LibOrder.Order memory order,\n        uint256 takerAssetFillAmount,\n        uint256 salt,\n        bytes memory orderSignature,\n        bytes memory takerSignature\n    )\n        public\n    {\n        address takerAddress = msg.sender;\n\n        // Encode arguments into byte array.\n        bytes memory data = abi.encodeWithSelector(\n            EXCHANGE.fillOrder.selector,\n            order,\n            takerAssetFillAmount,\n            orderSignature\n        );\n\n        // Call `fillOrder` via `executeTransaction`.\n        EXCHANGE.executeTransaction(\n            salt,\n            takerAddress,\n            data,\n            takerSignature\n        );\n    }\n}\n",
        "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity 0.4.24;\n\n\ncontract SafeMath {\n    function safeMul(uint256 a, uint256 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        if (a == 0) {\n            return 0;\n        }\n        uint256 c = a * b;\n        require(\n            c / a == b,\n            \"UINT256_OVERFLOW\"\n        );\n        return c;\n    }\n\n    function safeDiv(uint256 a, uint256 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        uint256 c = a / b;\n        return c;\n    }\n\n    function safeSub(uint256 a, uint256 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        require(\n            b <= a,\n            \"UINT256_OVERFLOW\"\n        );\n        return a - b;\n    }\n\n    function safeAdd(uint256 a, uint256 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        uint256 c = a + b;\n        require(\n            c >= a,\n            \"UINT256_OVERFLOW\"\n        );\n        return c;\n    }\n\n    function max64(uint64 a, uint64 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        return a >= b ? a : b;\n    }\n\n    function min64(uint64 a, uint64 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        return a < b ? a : b;\n    }\n\n    function max256(uint256 a, uint256 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        return a >= b ? a : b;\n    }\n\n    function min256(uint256 a, uint256 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        return a < b ? a : b;\n    }\n}\n"
    },
    "sourceTreeHashHex": "0x8f987fe89e675259bfeec3e04977656c5a4393696670dd031023b76f85f8bfb7",
    "compiler": {
        "name": "solc",
        "version": "soljson-v0.4.24+commit.e67f0147.js",
        "settings": {
            "optimizer": {
                "enabled": true,
                "runs": 1000000
            },
            "outputSelection": {
                "*": {
                    "*": [
                        "abi",
                        "evm.bytecode.object",
                        "evm.bytecode.sourceMap",
                        "evm.deployedBytecode.object",
                        "evm.deployedBytecode.sourceMap"
                    ]
                }
            }
        }
    },
    "networks": {}
}