{
  "contractName": "BatchExchange",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "IMPROVEMENT_DENOMINATOR",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSecondsRemainingInBatch",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "token",
          "type": "address"
        },
        {
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "requestWithdraw",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "FEE_FOR_LISTING_TOKEN_IN_OWL",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "token",
          "type": "address"
        },
        {
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "AMOUNT_MINIMUM",
      "outputs": [
        {
          "name": "",
          "type": "uint128"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "currentPrices",
      "outputs": [
        {
          "name": "",
          "type": "uint128"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "orders",
      "outputs": [
        {
          "name": "buyToken",
          "type": "uint16"
        },
        {
          "name": "sellToken",
          "type": "uint16"
        },
        {
          "name": "validFrom",
          "type": "uint32"
        },
        {
          "name": "validUntil",
          "type": "uint32"
        },
        {
          "name": "priceNumerator",
          "type": "uint128"
        },
        {
          "name": "priceDenominator",
          "type": "uint128"
        },
        {
          "name": "usedAmount",
          "type": "uint128"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "UNLIMITED_ORDER_AMOUNT",
      "outputs": [
        {
          "name": "",
          "type": "uint128"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "numTokens",
      "outputs": [
        {
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastCreditBatchId",
      "outputs": [
        {
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "latestSolution",
      "outputs": [
        {
          "name": "batchId",
          "type": "uint32"
        },
        {
          "name": "solutionSubmitter",
          "type": "address"
        },
        {
          "name": "feeReward",
          "type": "uint256"
        },
        {
          "name": "objectiveValue",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "user",
          "type": "address"
        },
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getPendingDeposit",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "user",
          "type": "address"
        },
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getPendingWithdraw",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "user",
          "type": "address"
        },
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getBalance",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "FEE_DENOMINATOR",
      "outputs": [
        {
          "name": "",
          "type": "uint128"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ENCODED_AUCTION_ELEMENT_WIDTH",
      "outputs": [
        {
          "name": "",
          "type": "uint128"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "BATCH_TIME",
      "outputs": [
        {
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentBatchId",
      "outputs": [
        {
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "token",
          "type": "address"
        },
        {
          "name": "amount",
          "type": "uint256"
        },
        {
          "name": "batchId",
          "type": "uint32"
        }
      ],
      "name": "requestFutureWithdraw",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "user",
          "type": "address"
        },
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "hasValidWithdrawRequest",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_TOKENS",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "user",
          "type": "address"
        },
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_TOUCHED_ORDERS",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "maxTokens",
          "type": "uint256"
        },
        {
          "name": "_feeToken",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "index",
          "type": "uint16"
        },
        {
          "indexed": true,
          "name": "buyToken",
          "type": "uint16"
        },
        {
          "indexed": true,
          "name": "sellToken",
          "type": "uint16"
        },
        {
          "indexed": false,
          "name": "validFrom",
          "type": "uint32"
        },
        {
          "indexed": false,
          "name": "validUntil",
          "type": "uint32"
        },
        {
          "indexed": false,
          "name": "priceNumerator",
          "type": "uint128"
        },
        {
          "indexed": false,
          "name": "priceDenominator",
          "type": "uint128"
        }
      ],
      "name": "OrderPlacement",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "id",
          "type": "uint16"
        }
      ],
      "name": "TokenListing",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "id",
          "type": "uint16"
        }
      ],
      "name": "OrderCancellation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "id",
          "type": "uint16"
        }
      ],
      "name": "OrderDeletion",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "orderId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "name": "sellToken",
          "type": "uint16"
        },
        {
          "indexed": false,
          "name": "buyToken",
          "type": "uint16"
        },
        {
          "indexed": false,
          "name": "executedSellAmount",
          "type": "uint128"
        },
        {
          "indexed": false,
          "name": "executedBuyAmount",
          "type": "uint128"
        }
      ],
      "name": "Trade",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "orderId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "name": "sellToken",
          "type": "uint16"
        },
        {
          "indexed": false,
          "name": "buyToken",
          "type": "uint16"
        },
        {
          "indexed": false,
          "name": "executedSellAmount",
          "type": "uint128"
        },
        {
          "indexed": false,
          "name": "executedBuyAmount",
          "type": "uint128"
        }
      ],
      "name": "TradeReversion",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "submitter",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "utility",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "disregardedUtility",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "burntFees",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "lastAuctionBurntFees",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "prices",
          "type": "uint128[]"
        },
        {
          "indexed": false,
          "name": "tokenIdsForPrice",
          "type": "uint16[]"
        }
      ],
      "name": "SolutionSubmission",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "batchId",
          "type": "uint32"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "batchId",
          "type": "uint32"
        }
      ],
      "name": "WithdrawRequest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "addToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "buyToken",
          "type": "uint16"
        },
        {
          "name": "sellToken",
          "type": "uint16"
        },
        {
          "name": "validUntil",
          "type": "uint32"
        },
        {
          "name": "buyAmount",
          "type": "uint128"
        },
        {
          "name": "sellAmount",
          "type": "uint128"
        }
      ],
      "name": "placeOrder",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "buyTokens",
          "type": "uint16[]"
        },
        {
          "name": "sellTokens",
          "type": "uint16[]"
        },
        {
          "name": "validFroms",
          "type": "uint32[]"
        },
        {
          "name": "validUntils",
          "type": "uint32[]"
        },
        {
          "name": "buyAmounts",
          "type": "uint128[]"
        },
        {
          "name": "sellAmounts",
          "type": "uint128[]"
        }
      ],
      "name": "placeValidFromOrders",
      "outputs": [
        {
          "name": "orderIds",
          "type": "uint16[]"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "orderIds",
          "type": "uint16[]"
        }
      ],
      "name": "cancelOrders",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "cancellations",
          "type": "uint16[]"
        },
        {
          "name": "buyTokens",
          "type": "uint16[]"
        },
        {
          "name": "sellTokens",
          "type": "uint16[]"
        },
        {
          "name": "validFroms",
          "type": "uint32[]"
        },
        {
          "name": "validUntils",
          "type": "uint32[]"
        },
        {
          "name": "buyAmounts",
          "type": "uint128[]"
        },
        {
          "name": "sellAmounts",
          "type": "uint128[]"
        }
      ],
      "name": "replaceOrders",
      "outputs": [
        {
          "name": "",
          "type": "uint16[]"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "batchId",
          "type": "uint32"
        },
        {
          "name": "claimedObjectiveValue",
          "type": "uint256"
        },
        {
          "name": "owners",
          "type": "address[]"
        },
        {
          "name": "orderIds",
          "type": "uint16[]"
        },
        {
          "name": "buyVolumes",
          "type": "uint128[]"
        },
        {
          "name": "prices",
          "type": "uint128[]"
        },
        {
          "name": "tokenIdsForPrice",
          "type": "uint16[]"
        }
      ],
      "name": "submitSolution",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "tokenAddressToIdMap",
      "outputs": [
        {
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "id",
          "type": "uint16"
        }
      ],
      "name": "tokenIdToAddressMap",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "hasToken",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "user",
          "type": "address"
        },
        {
          "name": "offset",
          "type": "uint16"
        },
        {
          "name": "pageSize",
          "type": "uint16"
        }
      ],
      "name": "getEncodedUserOrdersPaginated",
      "outputs": [
        {
          "name": "elements",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "previousPageUser",
          "type": "address"
        },
        {
          "name": "pageSize",
          "type": "uint16"
        }
      ],
      "name": "getUsersPaginated",
      "outputs": [
        {
          "name": "users",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getEncodedUserOrders",
      "outputs": [
        {
          "name": "elements",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "previousPageUser",
          "type": "address"
        },
        {
          "name": "previousPageUserOffset",
          "type": "uint16"
        },
        {
          "name": "pageSize",
          "type": "uint16"
        }
      ],
      "name": "getEncodedUsersPaginated",
      "outputs": [
        {
          "name": "elements",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEncodedOrders",
      "outputs": [
        {
          "name": "elements",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "batchId",
          "type": "uint32"
        }
      ],
      "name": "acceptingSolutions",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentObjectiveValue",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"IMPROVEMENT_DENOMINATOR\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSecondsRemainingInBatch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getEncodedOrders\",\"outputs\":[{\"name\":\"elements\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"buyToken\",\"type\":\"uint16\"},{\"name\":\"sellToken\",\"type\":\"uint16\"},{\"name\":\"validUntil\",\"type\":\"uint32\"},{\"name\":\"buyAmount\",\"type\":\"uint128\"},{\"name\":\"sellAmount\",\"type\":\"uint128\"}],\"name\":\"placeOrder\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"batchId\",\"type\":\"uint32\"},{\"name\":\"claimedObjectiveValue\",\"type\":\"uint256\"},{\"name\":\"owners\",\"type\":\"address[]\"},{\"name\":\"orderIds\",\"type\":\"uint16[]\"},{\"name\":\"buyVolumes\",\"type\":\"uint128[]\"},{\"name\":\"prices\",\"type\":\"uint128[]\"},{\"name\":\"tokenIdsForPrice\",\"type\":\"uint16[]\"}],\"name\":\"submitSolution\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"tokenIdToAddressMap\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"requestWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"FEE_FOR_LISTING_TOKEN_IN_OWL\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"previousPageUser\",\"type\":\"address\"},{\"name\":\"pageSize\",\"type\":\"uint16\"}],\"name\":\"getUsersPaginated\",\"outputs\":[{\"name\":\"users\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"orderIds\",\"type\":\"uint16[]\"}],\"name\":\"cancelOrders\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"AMOUNT_MINIMUM\",\"outputs\":[{\"name\":\"\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeToken\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"buyTokens\",\"type\":\"uint16[]\"},{\"name\":\"sellTokens\",\"type\":\"uint16[]\"},{\"name\":\"validFroms\",\"type\":\"uint32[]\"},{\"name\":\"validUntils\",\"type\":\"uint32[]\"},{\"name\":\"buyAmounts\",\"type\":\"uint128[]\"},{\"name\":\"sellAmounts\",\"type\":\"uint128[]\"}],\"name\":\"placeValidFromOrders\",\"outputs\":[{\"name\":\"orderIds\",\"type\":\"uint16[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"currentPrices\",\"outputs\":[{\"name\":\"\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getEncodedUserOrders\",\"outputs\":[{\"name\":\"elements\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"orders\",\"outputs\":[{\"name\":\"buyToken\",\"type\":\"uint16\"},{\"name\":\"sellToken\",\"type\":\"uint16\"},{\"name\":\"validFrom\",\"type\":\"uint32\"},{\"name\":\"validUntil\",\"type\":\"uint32\"},{\"name\":\"priceNumerator\",\"type\":\"uint128\"},{\"name\":\"priceDenominator\",\"type\":\"uint128\"},{\"name\":\"usedAmount\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"UNLIMITED_ORDER_AMOUNT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"numTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"lastCreditBatchId\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"previousPageUser\",\"type\":\"address\"},{\"name\":\"previousPageUserOffset\",\"type\":\"uint16\"},{\"name\":\"pageSize\",\"type\":\"uint16\"}],\"name\":\"getEncodedUsersPaginated\",\"outputs\":[{\"name\":\"elements\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"hasToken\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"latestSolution\",\"outputs\":[{\"name\":\"batchId\",\"type\":\"uint32\"},{\"name\":\"solutionSubmitter\",\"type\":\"address\"},{\"name\":\"feeReward\",\"type\":\"uint256\"},{\"name\":\"objectiveValue\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPendingDeposit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"cancellations\",\"type\":\"uint16[]\"},{\"name\":\"buyTokens\",\"type\":\"uint16[]\"},{\"name\":\"sellTokens\",\"type\":\"uint16[]\"},{\"name\":\"validFroms\",\"type\":\"uint32[]\"},{\"name\":\"validUntils\",\"type\":\"uint32[]\"},{\"name\":\"buyAmounts\",\"type\":\"uint128[]\"},{\"name\":\"sellAmounts\",\"type\":\"uint128[]\"}],\"name\":\"replaceOrders\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPendingWithdraw\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"batchId\",\"type\":\"uint32\"}],\"name\":\"acceptingSolutions\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"addToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"FEE_DENOMINATOR\",\"outputs\":[{\"name\":\"\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ENCODED_AUCTION_ELEMENT_WIDTH\",\"outputs\":[{\"name\":\"\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BATCH_TIME\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentBatchId\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"offset\",\"type\":\"uint16\"},{\"name\":\"pageSize\",\"type\":\"uint16\"}],\"name\":\"getEncodedUserOrdersPaginated\",\"outputs\":[{\"name\":\"elements\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"tokenAddressToIdMap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"batchId\",\"type\":\"uint32\"}],\"name\":\"requestFutureWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"hasValidWithdrawRequest\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_TOKENS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_TOUCHED_ORDERS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentObjectiveValue\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"maxTokens\",\"type\":\"uint256\"},{\"name\":\"_feeToken\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":true,\"name\":\"buyToken\",\"type\":\"uint16\"},{\"indexed\":true,\"name\":\"sellToken\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"validFrom\",\"type\":\"uint32\"},{\"indexed\":false,\"name\":\"validUntil\",\"type\":\"uint32\"},{\"indexed\":false,\"name\":\"priceNumerator\",\"type\":\"uint128\"},{\"indexed\":false,\"name\":\"priceDenominator\",\"type\":\"uint128\"}],\"name\":\"OrderPlacement\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"TokenListing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"OrderCancellation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"OrderDeletion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"orderId\",\"type\":\"uint16\"},{\"indexed\":true,\"name\":\"sellToken\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"buyToken\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"executedSellAmount\",\"type\":\"uint128\"},{\"indexed\":false,\"name\":\"executedBuyAmount\",\"type\":\"uint128\"}],\"name\":\"Trade\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"orderId\",\"type\":\"uint16\"},{\"indexed\":true,\"name\":\"sellToken\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"buyToken\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"executedSellAmount\",\"type\":\"uint128\"},{\"indexed\":false,\"name\":\"executedBuyAmount\",\"type\":\"uint128\"}],\"name\":\"TradeReversion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"submitter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"utility\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"disregardedUtility\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"burntFees\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"lastAuctionBurntFees\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"prices\",\"type\":\"uint128[]\"},{\"indexed\":false,\"name\":\"tokenIdsForPrice\",\"type\":\"uint16[]\"}],\"name\":\"SolutionSubmission\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"batchId\",\"type\":\"uint32\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"batchId\",\"type\":\"uint32\"}],\"name\":\"WithdrawRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"@gnosis/dfusion-team <https://github.com/orgs/gnosis/teams/dfusion-team/members>\",\"methods\":{\"addToken(address)\":{\"details\":\"Used to list a new token on the contract: Hence, making it available for exchange in an auction.\",\"params\":{\"token\":\"ERC20 token to be listed.     * Requirements: - `maxTokens` has not already been reached - `token` has not already been added\"}},\"cancelOrders(uint16[])\":{\"details\":\"a user facing function used to cancel orders. If the order is valid for the batch that is currently being solved, it sets order expiry to that batchId. Otherwise it removes it from storage. Can be called multiple times (e.g. to eventually free storage once order is expired).\",\"params\":{\"orderIds\":\"referencing the indices of user's orders to be cancelled     * Emits an {OrderCancellation} or {OrderDeletion} with sender's address and orderId\"}},\"constructor\":{\"details\":\"Constructor determines exchange parameters\",\"params\":{\"_feeToken\":\"Address of ERC20 fee token.\",\"maxTokens\":\"The maximum number of tokens that can be listed.\"}},\"deposit(address,uint256)\":{\"details\":\"credits user with deposit amount on next epoch (given by getCurrentBatchId)\",\"params\":{\"amount\":\"number of token(s) to be credited to user's account     * Emits an {Deposit} event with relevent deposit information.     * Requirements: - token transfer to contract is successfull\",\"token\":\"address of token to be deposited\"}},\"getBalance(address,address)\":{\"details\":\"fetches and returns user's balance\",\"params\":{\"token\":\"address of ERC20 token return Current `token` balance of `user`'s account\",\"user\":\"address of user\"}},\"getCurrentBatchId()\":{\"details\":\"getter function to determine current auction id. return current batchId\"},\"getCurrentObjectiveValue()\":{\"details\":\"gets the objective value of currently winning solution.\",\"return\":\"objective function evaluation of the currently winning solution, or zero if no solution proposed.\"},\"getEncodedOrders()\":{\"details\":\"View returning all byte-encoded sell orders\",\"return\":\"encoded bytes representing all orders ordered by (user, index)\"},\"getEncodedUserOrders(address)\":{\"details\":\"View returning all byte-encoded sell orders for specified user\",\"params\":{\"user\":\"address of user whose orders are being queried\"},\"return\":\"encoded bytes representing all orders\"},\"getEncodedUserOrdersPaginated(address,uint16,uint16)\":{\"details\":\"View returning all byte-encoded sell orders for specified user\",\"params\":{\"offset\":\"uint determining the starting orderIndex\",\"pageSize\":\"uint determining the count of elements to be viewed\",\"user\":\"address of user whose orders are being queried\"},\"return\":\"encoded bytes representing all orders\"},\"getEncodedUsersPaginated(address,uint16,uint16)\":{\"details\":\"View returning byte-encoded sell orders in paginated form\",\"params\":{\"pageSize\":\"uint determining the count of orders to be returned per page\",\"previousPageUser\":\"address of last user received in the previous page (address(0) for first page)\",\"previousPageUserOffset\":\"the number of orders received for the last user on the previous page (0 for first page).\"},\"return\":\"encoded bytes representing a page of orders ordered by (user, index)\"},\"getPendingDeposit(address,address)\":{\"details\":\"getter function used to display pending deposit\",\"params\":{\"token\":\"address of ERC20 token return amount and batchId of deposit's transfer if any (else 0)\",\"user\":\"address of user\"}},\"getPendingWithdraw(address,address)\":{\"details\":\"getter function used to display pending withdraw\",\"params\":{\"token\":\"address of ERC20 token return amount and batchId when withdraw was requested if any (else 0)\",\"user\":\"address of user\"}},\"getSecondsRemainingInBatch()\":{\"details\":\"used to determine how much time is left in a batch return seconds remaining in current batch\"},\"getUsersPaginated(address,uint16)\":{\"details\":\"View returning all byte-encoded users in paginated form\",\"params\":{\"pageSize\":\"uint determining the count of users to be returned per page\",\"previousPageUser\":\"address of last user received in last pages (address(0) for first page)\"},\"return\":\"encoded packed bytes of user addresses\"},\"hasToken(address)\":{\"details\":\"View returning a bool attesting whether token was already added\",\"params\":{\"addr\":\"address of the token to be checked\"},\"return\":\"bool attesting whether token was already added\"},\"hasValidWithdrawRequest(address,address)\":{\"details\":\"Used to determine if user has a valid pending withdraw request of specific token\",\"params\":{\"token\":\"address of ERC20 token return true if `user` has valid withdraw request for `token`, otherwise false\",\"user\":\"address of user\"}},\"placeOrder(uint16,uint16,uint32,uint128,uint128)\":{\"details\":\"A user facing function used to place limit sell orders in auction with expiry defined by batchId\",\"params\":{\"buyAmount\":\"relative minimum amount of requested buy amount\",\"buyToken\":\"id of token to be bought\",\"sellAmount\":\"maximum amount of sell token to be exchanged\",\"sellToken\":\"id of token to be sold\",\"validUntil\":\"batchId representing order's expiry\"},\"return\":\"orderId defined as the index in user's order array     * Emits an {OrderPlacement} event with all relevant order details.\"},\"placeValidFromOrders(uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])\":{\"details\":\"A user facing function used to place limit sell orders in auction with expiry defined by batchId Note that parameters are passed as arrays and the indices correspond to each order.\",\"params\":{\"buyAmounts\":\"relative minimum amount of requested buy amounts\",\"buyTokens\":\"ids of tokens to be bought\",\"sellAmounts\":\"maximum amounts of sell token to be exchanged\",\"sellTokens\":\"ids of tokens to be sold\",\"validFroms\":\"batchIds representing order's validity start time\",\"validUntils\":\"batchIds representing order's expiry\"},\"return\":\"`orderIds` an array of indices in which `msg.sender`'s orders are included     * Emits an {OrderPlacement} event with all relevant order details.\"},\"replaceOrders(uint16[],uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])\":{\"details\":\"A user facing wrapper to cancel and place new orders in the same transaction.\",\"params\":{\"buyAmounts\":\"relative minimum amount of requested buy amounts in new orders\",\"buyTokens\":\"ids of tokens to be bought in new orders\",\"cancellations\":\"indices of orders to be cancelled\",\"sellAmounts\":\"maximum amounts of sell token to be exchanged in new orders\",\"sellTokens\":\"ids of tokens to be sold in new orders\",\"validFroms\":\"batchIds representing order's validity start time in new orders\",\"validUntils\":\"batchIds represnnting order's expiry in new orders\"},\"return\":\"an array of indices in which `msg.sender`'s new orders are included     * Emits {OrderCancellation} events for all cancelled orders and {OrderPlacement} events with relevant new order details.\"},\"requestFutureWithdraw(address,uint256,uint32)\":{\"details\":\"Signals and initiates user's intent to withdraw.\",\"params\":{\"amount\":\"number of token(s) to be withdrawn\",\"batchId\":\"state index at which request is to be made.     * Emits an {WithdrawRequest} event with relevent request information.\",\"token\":\"address of token to be withdrawn\"}},\"requestWithdraw(address,uint256)\":{\"details\":\"Signals and initiates user's intent to withdraw.\",\"params\":{\"amount\":\"number of token(s) to be withdrawn     * Emits an {WithdrawRequest} event with relevent request information.\",\"token\":\"address of token to be withdrawn\"}},\"submitSolution(uint32,uint256,address[],uint16[],uint128[],uint128[],uint16[])\":{\"details\":\"a solver facing function called for auction settlement\",\"params\":{\"batchId\":\"index of auction solution is referring to\",\"buyVolumes\":\"executed buy amounts for each order identified by index of owner-orderId arrays\",\"orderIds\":\"array of order indices used in parallel with owners to identify touched order\",\"owners\":\"array of addresses corresponding to touched orders\",\"prices\":\"list of prices for touched tokens indexed by next parameter\",\"tokenIdsForPrice\":\"price[i] is the price for the token with tokenID tokenIdsForPrice[i]\"},\"return\":\"the computed objective value of the solution     * Requirements: - Solutions for this `batchId` are currently being accepted. - Claimed objetive value is a great enough improvement on the current winning solution - Fee Token price is non-zero - `tokenIdsForPrice` is sorted. - Number of touched orders does not exceed `MAX_TOUCHED_ORDERS`. - Each touched order is valid at current `batchId`. - Each touched order's `executedSellAmount` does not exceed its remaining amount. - Limit Price of each touched order is respected. - Solution's objective evaluation must be positive.     * Sub Requirements: Those nested within other functions - checkAndOverrideObjectiveValue; Objetive value is a great enough improvement on the current winning solution - checkTokenConservation; for all, non-fee, tokens total amount sold == total amount bought\"},\"tokenAddressToIdMap(address)\":{\"details\":\"View returning ID of listed tokens\",\"params\":{\"addr\":\"address of listed token.\"},\"return\":\"tokenId as stored within the contract.\"},\"tokenIdToAddressMap(uint16)\":{\"details\":\"View returning address of listed token by ID\",\"params\":{\"id\":\"tokenId as stored, via BiMap, within the contract.\"},\"return\":\"address of (listed) token\"},\"withdraw(address,address)\":{\"details\":\"Claims pending withdraw - can be called on behalf of others\",\"params\":{\"token\":\"address of token to be withdrawn\",\"user\":\"address of user who withdraw is being claimed.     * Emits an {Withdraw} event stating that `user` withdrew `amount` of `token`     * Requirements: - withdraw was requested in previous epoch - token was received from exchange in current auction batch\"}}},\"title\":\"BatchExchange - A decentralized exchange for any ERC20 token as a multi-token batch auction with uniform clearing prices. For more information visit: <https://github.com/gnosis/dex-contracts>\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/felixleupold/Gnosis/dex-contracts/contracts/BatchExchange.sol\":\"BatchExchange\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/felixleupold/Gnosis/dex-contracts/contracts/BatchExchange.sol\":{\"keccak256\":\"0x86ee38a100f345aa50cf92c1acfe46068b4f18ecd39437117292f15574002f69\",\"urls\":[\"bzzr://f368b30c2ffe351b79494cbb883cb4cce413036d86e5f0b355fd72f9c06b64ab\",\"dweb:/ipfs/QmaGRaBKLWJXxYG6JmAcTNSqWUnY1uneBFUVtNrkfyLbXk\"]},\"/Users/felixleupold/Gnosis/dex-contracts/contracts/EpochTokenLocker.sol\":{\"keccak256\":\"0x6a0e16a44b858c3af0e4e0113af93bf23160f175f36c524f9e753085d8de9978\",\"urls\":[\"bzzr://d6178f1d3533ed733e7eba91d12ce1597711e5b74ad1a4492aed9dc28a8d5c97\",\"dweb:/ipfs/QmeVeD8xeZUfwRi4BCBhrBWCHUDF3tdzwwYDgSNr5T4xPo\"]},\"/Users/felixleupold/Gnosis/dex-contracts/contracts/libraries/TokenConservation.sol\":{\"keccak256\":\"0x674557850e56ef6a716bb1dc528479e290238c592d0764bc7144cc1e811cedea\",\"urls\":[\"bzzr://f6a943472678132ef59cf3b2f131daf28952c1b72cd0e28bda46050dd577a29b\",\"dweb:/ipfs/QmbQsAgu7Fd6i84A98DxXemSnW3UkgccXxNnZLKvtuzHdE\"]},\"@gnosis.pm/owl-token/contracts/5/TokenOWL.sol\":{\"keccak256\":\"0x79dd31b4211c98b57c6c4b85c4902a786c0a1f2549b0481496a322955880c6e4\",\"urls\":[\"bzzr://9004a7707bca62b408542476343c3bd6ca17be5509a3f17e7495ff011495d3c6\",\"dweb:/ipfs/QmNaoSa5P6Py6ZhuqXZeeW6eyG8Hx7FYJFygXPNVBeXSJV\"]},\"@gnosis.pm/solidity-data-structures/contracts/libraries/IdToAddressBiMap.sol\":{\"keccak256\":\"0xde850dc49a037a4acbd792d295afed2222f2d6cd3780240317db2d1ca8ccebc0\",\"urls\":[\"bzzr://900a7be0f54054d59ccb3225f788d77dbf44ea22e6b8d7bd7d295f079c8932f0\",\"dweb:/ipfs/QmNQTeooqchHdMjQfRUmCjwyTUg5PJ4z6he3ym5YUsm8Lm\"]},\"@gnosis.pm/solidity-data-structures/contracts/libraries/IterableAppendOnlySet.sol\":{\"keccak256\":\"0x1447fbecc010c778476e135325a5c8fec70d02d71f736fae8cfccd85ae481241\",\"urls\":[\"bzzr://eea3ac90e8b9e299179c21134dfbf8be2d5ae1276816f2f95f63b836e11e285e\",\"dweb:/ipfs/QmZMn8wVzmr49CXjaix5BMWSNybkDv6BeSQpAFr3btaxuu\"]},\"@gnosis.pm/util-contracts/contracts/GnosisStandardToken.sol\":{\"keccak256\":\"0xdec5028208406e811c449a04e2932f7efeae629388cb6124550b8b048a645556\",\"urls\":[\"bzzr://f3d13a708f543b3ce72745cab321e6daf25d935fd12ba55a4152f1113eb6d5e4\",\"dweb:/ipfs/QmRPMmVo88kdtvo2Yo9xDJrQkpYSUENwK1xSEhZnHhViZ7\"]},\"@gnosis.pm/util-contracts/contracts/Math.sol\":{\"keccak256\":\"0x857768cd0d460e33778dcde29e997b539640bbf37ea23832213b2e5039147ea5\",\"urls\":[\"bzzr://628f7e63a0d6a092aad389b70cc55d6d9c10cd9753f3644d5ea9dc75a3314a8e\",\"dweb:/ipfs/QmP4NxUFWoJjGi8NoZgmzre3MHfRXLtDniwLojH5TVc9LD\"]},\"@gnosis.pm/util-contracts/contracts/Proxy.sol\":{\"keccak256\":\"0x2ff8795110cceafcab1010f157a4dd33e46378bb88fbdc3c313a6f0d62e3444f\",\"urls\":[\"bzzr://66d77feaf648ca17dd620f3e27463b4b6e6031fec7ccd64dfffc4c30bd57b467\",\"dweb:/ipfs/QmQTKFQxUoP37Up8JPeWh47Ta46qAMtWTZ7VnQrGypR67i\"]},\"@gnosis.pm/util-contracts/contracts/Token.sol\":{\"keccak256\":\"0x364778f634c900ed83553e17ef1284bd33fa68a738e668f664b4a0fa675bb586\",\"urls\":[\"bzzr://cb31caaf3364dbf5d688adb10de074284845b142c26d23a47b09ee510dd4a432\",\"dweb:/ipfs/QmVE5i2jcg6aCSjY8asvUwPbrZWtpLyA4uWukQXBbFvqpc\"]},\"@openzeppelin/contracts/drafts/SignedSafeMath.sol\":{\"keccak256\":\"0xf1587a6daea33c93e85fff4e205967183de459159aafcb01b7397fb7ec1f9f77\",\"urls\":[\"bzzr://3fa5ad67118819b61448882baec9ca9964dde65630f574ab3c38841110082923\",\"dweb:/ipfs/QmTaR64X6RsWzXvVGxPCaAoW7ZZ8Fhiii4ddRo7QpQGBrx\"]},\"@openzeppelin/contracts/math/Math.sol\":{\"keccak256\":\"0x4b5aa451e4e8801478708f94b118a7821c0500d676255eaf89fc78c14856ce4e\",\"urls\":[\"bzzr://200d5728b32858918810d8d7a8db1406ee9b157ad5026f050e6d864a696b9080\",\"dweb:/ipfs/QmS6tW81u8E4tvzVfVuqEuMCkdwAozQ6pKJPRBR4JEVmQp\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzzr://292843005e754e752644f767477ec5ad7a1ffc91ddb18c38b8079c62f3993cad\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzzr://cf2d583b8dce38d0617fdcd65f2fd9f126fe17b7f683b5a515ea9d2762d8b062\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x6f2c9955d65c522b80f4b8792f076512d2df947d2112cbc4d98a4781ed42ede2\",\"urls\":[\"bzzr://d2ff5aadcb697bc27ca3b0f6c40b4998e8cf0a1bd0f761d1df6d5981777841ae\",\"dweb:/ipfs/QmTDkFzKnrpiV1UKnSoiZAHPuguWzokrr4pFbSPvyaSo56\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzzr://4e1d23731da27602b8c552e54fb9976dadf8cf46a8f90a3c8c1b85fe044618b9\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]},\"@openzeppelin/contracts/utils/SafeCast.sol\":{\"keccak256\":\"0xb7353a57c9e371c85983df8997caf9bb6fa60c3744b34b2bfcf4faa52d06eaec\",\"urls\":[\"bzzr://ca1f1bd047ccacf8ea1b40270c12baab9f1bf9359bbd1cc305e3209e5a812eaa\",\"dweb:/ipfs/QmPaVZM2QRb5JQ5HSRUzrUt6VsknmZE5c4MqH6wuFyxYoA\"]},\"solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xd6de53e5467708105d5f6ea98c56882dba0023a6d634cdb3bd03d89ac0d75ae2\",\"urls\":[\"bzzr://5f09be217da67a20ed8f1d3913782ed1ed0c73b03b4216c53ba1ca16585c1a86\",\"dweb:/ipfs/QmVQHbSiWSrFLXaRriAMkYnoNeHJaoqSACdjqoNX7HxJGQ\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162005d4d38038062005d4d833981810160405260408110156200003757600080fd5b5080516020918201516000808052600584527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc80546001600160801b031916670de0b6b3a76400001790556002839055600380546001600160a01b038085166201000090810262010000600160b01b03199093169290921792839055604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152306004820152600019602482015290519697959692909304169363095ea7b3936044808501949293928390030190829087803b1580156200011a57600080fd5b505af11580156200012f573d6000803e3d6000fd5b505050506040513d60208110156200014657600080fd5b506200015d9050816001600160e01b036200016516565b505062000403565b60025460035461ffff1610620001dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d617820746f6b656e7320726561636865640000000000000000000000000000604482015290519081900360640190fd5b60035461ffff16156200027c57600354604080517f4417f4db000000000000000000000000000000000000000000000000000000008152336004820152678ac7230489e8000060248201529051620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b1580156200026257600080fd5b505af115801562000277573d6000803e3d6000fd5b505050505b600354604080517f9f3cb655000000000000000000000000000000000000000000000000000000008152600e600482015261ffff90921660248301526001600160a01b03831660448301525173__IdToAddressBiMap______________________91639f3cb655916064808301926020929190829003018186803b1580156200030457600080fd5b505af415801562000319573d6000803e3d6000fd5b505050506040513d60208110156200033057600080fd5b50516200039e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015290519081900360640190fd5b600354604080516001600160a01b038416815261ffff909216602083015280517fe4b282c4351ffe36572a572de193a7de086edc47c9e62669fe6ab49fc53a33139281900390910190a1506003805461ffff8082166001011661ffff19909116179055565b61593a80620004136000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806395466a4611610146578063e1d5f64e116100c3578063f36b635511610087578063f36b635514611217578063f3f479821461124f578063f47c84c51461127d578063f940e38514611285578063fb736d32146112b3578063ff97c626146112bb57610253565b8063e1d5f64e146111a1578063e48c015e146111a9578063e720ac8e146111b1578063ed2da357146111b9578063ef574d23146111f157610253565b8063c33eb9f61161010a578063c33eb9f6146110f4578063c49598fb14611122578063d48bfca714611145578063d4fac45d1461116b578063d73792a91461119957610253565b806395466a4614610c4c5780639bb0f59914610c845780639cc84ed314610cbe578063b3c0afa114610cfb578063c1ef283814610d4757610253565b80634bdc1b4c116101d457806372f3dd391161019857806372f3dd3914610b38578063793b8c6d14610b5e5780637fb47b0614610bde5780638e499bcf14610be6578063907767c014610c0557610253565b80634bdc1b4c146106cf57806361ed16d014610770578063647846a51461079457806365cc3e781461079c57806366367c1014610b1757610253565b80632f10d0821161021b5780632f10d08214610600578063397a1b281461063d57806341e383ed1461066b57806343383ac31461067357806347e7ef24146106a357610253565b8063094c7e191461025857806317569c1d1461027257806323d4a3c91461027a57806326c3d394146102f75780632e4c83bd14610345575b600080fd5b6102606112c3565b60408051918252519081900360200190f35b6102606112c8565b6102826112d5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102bc5781810151838201526020016102a4565b50505050905090810190601f1680156102e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610260600480360360a081101561030d57600080fd5b5061ffff813581169160208101359091169063ffffffff604082013516906001600160801b036060820135811691608001351661144e565b610260600480360360e081101561035b57600080fd5b63ffffffff82351691602081013591810190606081016040820135600160201b81111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460208302840111600160201b831117156103ba57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561040957600080fd5b82018360208201111561041b57600080fd5b803590602001918460208302840111600160201b8311171561043c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561048b57600080fd5b82018360208201111561049d57600080fd5b803590602001918460208302840111600160201b831117156104be57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561050d57600080fd5b82018360208201111561051f57600080fd5b803590602001918460208302840111600160201b8311171561054057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561058f57600080fd5b8201836020820111156105a157600080fd5b803590602001918460208302840111600160201b831117156105c257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611473945050505050565b6106216004803603602081101561061657600080fd5b503561ffff16611e96565b604080516001600160a01b039092168252519081900360200190f35b6106696004803603604081101561065357600080fd5b506001600160a01b038135169060200135611f2a565b005b610260611f40565b6102826004803603604081101561068957600080fd5b5080356001600160a01b0316906020013561ffff16611f4c565b610669600480360360408110156106b957600080fd5b506001600160a01b03813516906020013561214c565b610669600480360360208110156106e557600080fd5b810190602081018135600160201b8111156106ff57600080fd5b82018360208201111561071157600080fd5b803590602001918460208302840111600160201b8311171561073257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061224d945050505050565b6107786124cc565b604080516001600160801b039092168252519081900360200190f35b6106216124d2565b610ac7600480360360c08110156107b257600080fd5b810190602081018135600160201b8111156107cc57600080fd5b8201836020820111156107de57600080fd5b803590602001918460208302840111600160201b831117156107ff57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561084e57600080fd5b82018360208201111561086057600080fd5b803590602001918460208302840111600160201b8311171561088157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108d057600080fd5b8201836020820111156108e257600080fd5b803590602001918460208302840111600160201b8311171561090357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561095257600080fd5b82018360208201111561096457600080fd5b803590602001918460208302840111600160201b8311171561098557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156109d457600080fd5b8201836020820111156109e657600080fd5b803590602001918460208302840111600160201b83111715610a0757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610a5657600080fd5b820183602082011115610a6857600080fd5b803590602001918460208302840111600160201b83111715610a8957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506124e7945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b03578181015183820152602001610aeb565b505050509050019250505060405180910390f35b61077860048036036020811015610b2d57600080fd5b503561ffff166125d5565b61028260048036036020811015610b4e57600080fd5b50356001600160a01b03166125f0565b610b8a60048036036040811015610b7457600080fd5b506001600160a01b038135169060200135612600565b6040805161ffff988916815296909716602087015263ffffffff948516868801529290931660608501526001600160801b03908116608085015291821660a08401521660c082015290519081900360e00190f35b61077861267e565b610bee612684565b6040805161ffff9092168252519081900360200190f35b610c3360048036036040811015610c1b57600080fd5b506001600160a01b038135811691602001351661268e565b6040805163ffffffff9092168252519081900360200190f35b61028260048036036060811015610c6257600080fd5b506001600160a01b038135169061ffff602082013581169160400135166126b1565b610caa60048036036020811015610c9a57600080fd5b50356001600160a01b031661285a565b604080519115158252519081900360200190f35b610cc66128bf565b6040805163ffffffff90951685526001600160a01b039093166020850152838301919091526060830152519081900360800190f35b610d2960048036036040811015610d1157600080fd5b506001600160a01b03813581169160200135166128e3565b6040805192835263ffffffff90911660208301528051918290030190f35b610ac7600480360360e0811015610d5d57600080fd5b810190602081018135600160201b811115610d7757600080fd5b820183602082011115610d8957600080fd5b803590602001918460208302840111600160201b83111715610daa57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610df957600080fd5b820183602082011115610e0b57600080fd5b803590602001918460208302840111600160201b83111715610e2c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e7b57600080fd5b820183602082011115610e8d57600080fd5b803590602001918460208302840111600160201b83111715610eae57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610efd57600080fd5b820183602082011115610f0f57600080fd5b803590602001918460208302840111600160201b83111715610f3057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f7f57600080fd5b820183602082011115610f9157600080fd5b803590602001918460208302840111600160201b83111715610fb257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561100157600080fd5b82018360208201111561101357600080fd5b803590602001918460208302840111600160201b8311171561103457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561108357600080fd5b82018360208201111561109557600080fd5b803590602001918460208302840111600160201b831117156110b657600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061293d945050505050565b610d296004803603604081101561110a57600080fd5b506001600160a01b0381358116916020013516612962565b610caa6004803603602081101561113857600080fd5b503563ffffffff166129bc565b6106696004803603602081101561115b57600080fd5b50356001600160a01b03166129f0565b6102606004803603604081101561118157600080fd5b506001600160a01b0381358116916020013516612c15565b610778612d3e565b610778612d44565b610c33612d49565b610c33612d4f565b610282600480360360608110156111cf57600080fd5b506001600160a01b038135169061ffff60208201358116916040013516612d57565b610bee6004803603602081101561120757600080fd5b50356001600160a01b0316612ecd565b6106696004803603606081101561122d57600080fd5b5080356001600160a01b0316906020810135906040013563ffffffff16612f32565b610caa6004803603604081101561126557600080fd5b506001600160a01b0381358116916020013516613039565b6102606130b1565b6106696004803603604081101561129b57600080fd5b506001600160a01b03813581169160200135166130b7565b6102606132ae565b6102606132b3565b606481565b61012c4281900690035b90565b600d54606090600160a01b90046001600160601b0316156112d2576000600c73__IterableAppendOnlySet_________________6368fb2bc290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561134457600080fd5b505af4158015611358573d6000803e3d6000fd5b505050506040513d602081101561136e57600080fd5b5051905060005b8061144957611393611386836125f0565b849063ffffffff6132e616565b600d549093506001600160a01b03838116911614156113b457506001611444565b6040805163218777b360e21b8152600c60048201526001600160a01b0384166024820152905173__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b15801561141557600080fd5b505af4158015611429573d6000803e3d6000fd5b505050506040513d602081101561143f57600080fd5b505191505b611375565b505090565b6000611465868661145d612d4f565b878787613363565b61ffff169695505050505050565b600061147e886129bc565b6114b95760405162461bcd60e51b815260040180806020018281038252602f8152602001806156af602f913960400191505060405180910390fd5b6114c2876138cf565b6114fd5760405162461bcd60e51b815260040180806020018281038252603f81526020018061580a603f913960400191505060405180910390fd5b61150683613902565b6115415760405162461bcd60e51b815260040180806020018281038252602c815260200180615723602c913960400191505060405180910390fd5b8160008151811061154e57fe5b602002602001015161ffff16600014156115af576040805162461bcd60e51b815260206004820152601a60248201527f46656520746f6b656e2068617320666978656420707269636521000000000000604482015290519081900360640190fd5b6115b882613959565b6115f35760405162461bcd60e51b81526004018080602001828103825260218152602001806157c36021913960400191505060405180910390fd5b601e865111156116345760405162461bcd60e51b81526004018080602001828103825260238152602001806156096023913960400191505060405180910390fd5b600061163e6139b1565b9050611648613a43565b6116528484613e12565b61165e60076000615446565b606061166984613f00565b90506000805b8951811015611ab757611680615467565b600460008c848151811061169057fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208a83815181106116c457fe5b602002602001015161ffff16815481106116da57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201529050611771818e613f37565b6117b5576040805162461bcd60e51b815260206004820152601060248201526f13dc99195c881a5cc81a5b9d985b1a5960821b604482015290519081900360640190fd5b6000806117d58b85815181106117c757fe5b602002602001015184613f6a565b90925090506127106001600160801b03831610156118245760405162461bcd60e51b81526004018080602001828103825260238152602001806155e66023913960400191505060405180910390fd5b6127106001600160801b038216101561186e5760405162461bcd60e51b81526004018080602001828103825260248152602001806158726024913960400191505060405180910390fd5b825160208401516118899188918c868663ffffffff613fb816565b806001600160801b031661189c8461406c565b6001600160801b031610156118e25760405162461bcd60e51b81526004018080602001828103825260318152602001806157716031913960400191505060405180910390fd5b60a0830151611903906001600160801b03848116911663ffffffff61407b16565b6080840151611924906001600160801b03848116911663ffffffff61407b16565b1115611977576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974207072696365206e6f742073617469736669656400000000000000604482015290519081900360640190fd5b61199161198483856140d4565b869063ffffffff61420716565b94506119c48d85815181106119a257fe5b60200260200101518d86815181106119b657fe5b602002602001015183614261565b6119f78d85815181106119d357fe5b60200260200101516119e88560000151611e96565b846001600160801b03166143f8565b826020015161ffff168c8581518110611a0c57fe5b602002602001015161ffff168e8681518110611a2457fe5b60200260200101516001600160a01b03167fafa5bc1fb80950b7cb2353ba0cf16a6d68de75801f2dac54b2dae9268450010a86600001518587604051808461ffff1661ffff168152602001836001600160801b03166001600160801b03168152602001826001600160801b03166001600160801b03168152602001935050505060405180910390a450505060010161166f565b5060005b8951811015611c1157611acc615467565b600460008c8481518110611adc57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208a8381518110611b1057fe5b602002602001015161ffff1681548110611b2657fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c08201528a51909250611bd1908b9085908110611bc357fe5b602002602001015183613f6a565b915050611c078c8481518110611be357fe5b6020026020010151611bf88460200151611e96565b836001600160801b0316614458565b5050600101611abb565b506000805b8a51811015611d3c57611d32611d25600460008e8581518110611c3557fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208c8481518110611c6957fe5b602002602001015161ffff1681548110611c7f57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201528d518e9085908110611d1857fe5b60200260200101516144c1565b839063ffffffff61420716565b9150600101611c16565b5060006002611d4a856145c4565b81611d5157fe5b0490506000611d7683611d6a868563ffffffff61420716565b9063ffffffff6145e216565b9050611d8181614624565b611d8a8261466d565b611d9385614689565b611da08e8d8d8d8c614758565b336001600160a01b03167f2140b6253bf38aea0a4ac9e9e6427b256e4035d60df4a85bb139ce975eb6b41d8585858a8e8e604051808781526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611e2d578181015183820152602001611e15565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611e6c578181015183820152602001611e54565b505050509050019850505050505050505060405180910390a29d9c50505050505050505050505050565b60408051632ffeb2d760e21b8152600e600482015261ffff83166024820152905160009173__IdToAddressBiMap______________________9163bffacb5c91604480820192602092909190829003018186803b158015611ef657600080fd5b505af4158015611f0a573d6000803e3d6000fd5b505050506040513d6020811015611f2057600080fd5b505190505b919050565b611f3c8282611f37612d4f565b612f32565b5050565b678ac7230489e8000081565b600d54606090600160a01b90046001600160601b0316611f6b57612146565b6000836001600160a01b038116612041576040805163347d95e160e11b8152600c6004820152905173__IterableAppendOnlySet_________________916368fb2bc2916024808301926020929190829003018186803b158015611fce57600080fd5b505af4158015611fe2573d6000803e3d6000fd5b505050506040513d6020811015611ff857600080fd5b5051604080516001600160601b0319606084901b16602082015281518082036014018152603490910190915290915061203890849063ffffffff6132e616565b92506001909101905b8361ffff168261ffff161080156120665750600d546001600160a01b03828116911614155b15612143576040805163218777b360e21b8152600c60048201526001600160a01b0383166024820152905173__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b1580156120cc57600080fd5b505af41580156120e0573d6000803e3d6000fd5b505050506040513d60208110156120f657600080fd5b5051604080516001600160601b0319606084901b16602082015281518082036014018152603490910190915290915061213690849063ffffffff6132e616565b9250600190910190612041565b50505b92915050565b612156338361489b565b6121628233308461495b565b336000908152602081815260408083206001600160a01b0386168452909152902060010154612197908263ffffffff61420716565b336000908152602081815260408083206001600160a01b03871684529091529020600101556121c4612d4f565b336000818152602081815260408083206001600160a01b0388168085529252909120600201805463ffffffff191663ffffffff94909416939093179092557fc11cc34e93c67a93382b99f2498e9937198798f3c1c2888008ffc0eeb82f68c48361222c612d4f565b6040805192835263ffffffff90911660208301528051918290030190a35050565b60006001612259612d4f565b03905060005b82518161ffff1610156124c75733600090815260046020526040902083516123399190859061ffff851690811061229257fe5b602002602001015161ffff16815481106122a857fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c082015283613f37565b6123f5573360009081526004602052604090208351849061ffff841690811061235e57fe5b602002602001015161ffff168154811061237457fe5b60009182526020822060029091020180546001600160e01b031916815560010155825133907f7b0a9854603fbbe7606a58b70d113bd0d1ec8475f1b8cc9603c2d377e67835cd90859061ffff85169081106123cb57fe5b6020026020010151604051808261ffff1661ffff16815260200191505060405180910390a26124bf565b3360009081526004602052604090208351839190859061ffff851690811061241957fe5b602002602001015161ffff168154811061242f57fe5b906000526020600020906002020160000160086101000a81548163ffffffff021916908363ffffffff160217905550336001600160a01b03167f7a02963a37046835196f1a3185a036fd67cfca72283e46e4b3cdb99939851937848361ffff168151811061249957fe5b6020026020010151604051808261ffff1661ffff16815260200191505060405180910390a25b60010161225f565b505050565b61271081565b6003546201000090046001600160a01b031681565b60608651604051908082528060200260200182016040528015612514578160200160208202803883390190505b50905060005b87518110156125ca576125a388828151811061253257fe5b602002602001015188838151811061254657fe5b602002602001015188848151811061255a57fe5b602002602001015188858151811061256e57fe5b602002602001015188868151811061258257fe5b602002602001015188878151811061259657fe5b6020026020010151613363565b8282815181106125af57fe5b61ffff9092166020928302919091019091015260010161251a565b509695505050505050565b6005602052600090815260409020546001600160801b031681565b6060612146826000600019612d57565b6004602052816000526040600020818154811061261957fe5b60009182526020909120600290910201805460019091015461ffff808316945062010000830416925063ffffffff600160201b8304811692600160401b8104909116916001600160801b03600160601b90920482169181811691600160801b90041687565b60001981565b60035461ffff1681565b600160209081526000928352604080842090915290825290205463ffffffff1681565b600d54606090600160a01b90046001600160601b03166126d057612853565b82846001600160a01b038116612761576040805163347d95e160e11b8152600c6004820152905173__IterableAppendOnlySet_________________916368fb2bc2916024808301926020929190829003018186803b15801561273257600080fd5b505af4158015612746573d6000803e3d6000fd5b505050506040513d602081101561275c57600080fd5b505190505b825161ffff85169060709004101561285057612797611386828460706001600160801b031687518161278f57fe5b048803612d57565b600d549093506001600160a01b03828116911614156127b857506128539050565b6040805163218777b360e21b8152600c60048201526001600160a01b038316602482015290516000935073__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b15801561281d57600080fd5b505af4158015612831573d6000803e3d6000fd5b505050506040513d602081101561284757600080fd5b50519050612761565b50505b9392505050565b60408051636e8930a360e11b8152600e60048201526001600160a01b0383166024820152905160009173__IdToAddressBiMap______________________9163dd12614691604480820192602092909190829003018186803b158015611ef657600080fd5b600654600954600a54600b5463ffffffff909316926001600160a01b039092169184565b6000806128ee6154a3565b5050506001600160a01b039182166000908152602081815260408083209390941682529182528290208251808401909352600181015480845260029091015463ffffffff169290910182905291565b60606129488861224d565b6129568787878787876124e7565b98975050505050505050565b60008061296d6154a3565b5050506001600160a01b039182166000908152602081815260408083209390941682529182528290208251808401909352600381015480845260049091015463ffffffff169290910182905291565b600060016129c8612d4f565b0363ffffffff168263ffffffff161480156121465750603c6129e86112c8565b101592915050565b60025460035461ffff1610612a41576040805162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b604482015290519081900360640190fd5b60035461ffff1615612ac55760035460408051634417f4db60e01b8152336004820152678ac7230489e8000060248201529051620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b158015612aac57600080fd5b505af1158015612ac0573d6000803e3d6000fd5b505050505b60035460408051639f3cb65560e01b8152600e600482015261ffff90921660248301526001600160a01b03831660448301525173__IdToAddressBiMap______________________91639f3cb655916064808301926020929190829003018186803b158015612b3357600080fd5b505af4158015612b47573d6000803e3d6000fd5b505050506040513d6020811015612b5d57600080fd5b5051612bb0576040805162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015290519081900360640190fd5b600354604080516001600160a01b038416815261ffff909216602083015280517fe4b282c4351ffe36572a572de193a7de086edc47c9e62669fe6ab49fc53a33139281900390910190a1506003805461ffff8082166001011661ffff19909116179055565b6001600160a01b03808316600090815260208181526040808320938516835292905290812054612c43612d4f565b6001600160a01b038086166000908152602081815260408083209388168352929052206002015463ffffffff91821691161015612cb5576001600160a01b0380851660009081526020818152604080832093871683529290522060010154612cb290829063ffffffff61420716565b90505b612cbd612d4f565b6001600160a01b038086166000908152602081815260408083209388168352929052206004015463ffffffff91821691161015612853576001600160a01b0380851660009081526020818152604080832093871683529290522060030154612d3690612d2990836149bb565b829063ffffffff6145e216565b949350505050565b6103e881565b607081565b61012c81565b61012c420490565b6060825b6001600160a01b038516600090815260046020526040902054612d849061ffff868601166149bb565b8161ffff161015612ec557612ebb612eae86612df688612df1600460008c6001600160a01b03166001600160a01b031681526020019081526020016000208761ffff1681548110612dd157fe5b600091825260209091206002909102015462010000900461ffff16611e96565b612c15565b6001600160a01b0389166000908152600460205260409020805461ffff8716908110612e1e57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201526149d1565b839063ffffffff6132e616565b9150600101612d5b565b509392505050565b6040805163b3129e1f60e01b8152600e60048201526001600160a01b0383166024820152905160009173__IdToAddressBiMap______________________9163b3129e1f91604480820192602092909190829003018186803b158015611ef657600080fd5b612f3c3384613039565b15612f4b57612f4b33846130b7565b612f53612d4f565b63ffffffff168163ffffffff161015612f9d5760405162461bcd60e51b81526004018080602001828103825260228152602001806158e46022913960400191505060405180910390fd5b60408051808201825283815263ffffffff83811660208084018281523360008181528084528781206001600160a01b038c16808352908552908890209651600388015591516004909601805463ffffffff19169690951695909517909355845187815290810191909152835191937f2c6245af506f0fc1089918c02c1d01bde9cc807609b334b3e7644d6dfb5a6c5e92918290030190a3505050565b6000613043612d4f565b6001600160a01b038085166000908152602081815260408083209387168352929052206004015463ffffffff91821691161080156128535750506001600160a01b0391821660009081526020818152604080832093909416825291909152206004015463ffffffff16151590565b60025481565b6130c1828261489b565b6130c9612d4f565b6001600160a01b038084166000908152602081815260408083209386168352929052206004015463ffffffff9182169116106131365760405162461bcd60e51b81526004018080602001828103825260268152602001806157e46026913960400191505060405180910390fd5b61313e612d4f565b6001600160a01b0380841660009081526001602090815260408083209386168352929052205463ffffffff9182169116106131aa5760405162461bcd60e51b81526004018080602001828103825260458152602001806156de6045913960600191505060405180910390fd5b6001600160a01b03828116600090815260208181526040808320938516835292905290812080546003909101546131e191906149bb565b6001600160a01b0380851660009081526020818152604080832093871683529290522054909150613218908263ffffffff6145e216565b6001600160a01b0384811660009081526020818152604080832093871683529290529081209182556003820155600401805463ffffffff1916905561325e828483614c08565b816001600160a01b0316836001600160a01b03167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040518082815260200191505060405180910390a3505050565b601e81565b600060016132bf612d4f565b60065463ffffffff908116929091031614156132de5750600b546112d2565b5060006112d2565b6060806040519050835180825260208201818101602087015b818310156133175780518352602092830192016132ff565b50855184518101855292509050808201602086015b8183101561334457805183526020928301920161332c565b508651929092011591909101601f01601f191660405250905092915050565b6040805163ab8978b760e01b8152600e600482015261ffff88166024820152905160009173__IdToAddressBiMap______________________9163ab8978b791604480820192602092909190829003018186803b1580156133c357600080fd5b505af41580156133d7573d6000803e3d6000fd5b505050506040513d60208110156133ed57600080fd5b5051613440576040805162461bcd60e51b815260206004820152601860248201527f42757920746f6b656e206d757374206265206c69737465640000000000000000604482015290519081900360640190fd5b6040805163ab8978b760e01b8152600e600482015261ffff88166024820152905173__IdToAddressBiMap______________________9163ab8978b7916044808301926020929190829003018186803b15801561349c57600080fd5b505af41580156134b0573d6000803e3d6000fd5b505050506040513d60208110156134c657600080fd5b5051613519576040805162461bcd60e51b815260206004820152601960248201527f53656c6c20746f6b656e206d757374206265206c697374656400000000000000604482015290519081900360640190fd5b8561ffff168761ffff161415613576576040805162461bcd60e51b815260206004820152601c60248201527f45786368616e676520746f6b656e73206e6f742064697374696e637400000000604482015290519081900360640190fd5b61357e612d4f565b63ffffffff168563ffffffff1610156135c85760405162461bcd60e51b815260040180806020018281038252602281526020018061574f6022913960400191505060405180910390fd5b60046000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060e001604052808961ffff1681526020018861ffff1681526020018763ffffffff1681526020018663ffffffff168152602001856001600160801b03168152602001846001600160801b0316815260200160006001600160801b03168152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555060408201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600c6101000a8154816001600160801b0302191690836001600160801b0316021790555060a08201518160010160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555050505060006137cf600160046000336001600160a01b03166001600160a01b031681526020019081526020016000208054905003614c5a565b6040805161ffff808416825263ffffffff808b1660208401528916828401526001600160801b038089166060840152871660808301529151929350818a1692918b169133917fdecf6fde8243981299f7b7a776f29a9fc67a2c9848e25d77c50eb11fa58a7e21919081900360a00190a460408051634743bd0360e11b8152600c6004820152336024820152905173__IterableAppendOnlySet_________________91638e877a06916044808301926020929190829003018186803b15801561389757600080fd5b505af41580156138ab573d6000803e3d6000fd5b505050506040513d60208110156138c157600080fd5b509098975050505050505050565b60006138ea60656138de6132b3565b9063ffffffff61407b16565b6138fb83606463ffffffff61407b16565b1192915050565b6000805b8251811015613950576127106001600160801b031683828151811061392757fe5b60200260200101516001600160801b03161015613948576000915050611f25565b600101613906565b50600192915050565b600060015b82518110156139505782600182038151811061397657fe5b602002602001015161ffff1683828151811061398e57fe5b602002602001015161ffff16116139a9576000915050611f25565b60010161395e565b60006139bb614ca1565b613a3d57600354600a5460408051634417f4db60e01b8152306004820152602481019290925251620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b158015613a1a57600080fd5b505af1158015613a2e573d6000803e3d6000fd5b5050600a5492506112d2915050565b50600090565b613a4b614ca1565b15613e105760005b600754811015613be057600060066001018281548110613a6f57fe5b60009182526020822060029091020154600780546001600160a01b0390921693509084908110613a9b57fe5b906000526020600020906002020160010160109054906101000a900461ffff169050613ac5615467565b6001600160a01b0383166000908152600460205260409020805461ffff8416908110613aed57fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c082015260078054919350613bad9187908110613b8a57fe5b60009182526020909120600160029092020101546001600160801b031683613f6a565b915050613bd084613bc18460200151611e96565b836001600160801b0316614cc3565b505060019092019150613a539050565b5060005b600754811015613ded57600060066001018281548110613c0057fe5b60009182526020822060029091020154600780546001600160a01b0390921693509084908110613c2c57fe5b906000526020600020906002020160010160109054906101000a900461ffff169050613c56615467565b6001600160a01b0383166000908152600460205260409020805461ffff8416908110613c7e57fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c0820152600780549193508291613d41919088908110613d1e57fe5b60009182526020909120600160029092020101546001600160801b031684613f6a565b91509150613d50858583614d30565b613d7085613d618560000151611e96565b846001600160801b0316614dd0565b60208084015184516040805161ffff92831681526001600160801b0380871695820195909552938616848201525191811692908716916001600160a01b038916917fb7214f648cea2a7c47aaea7e7aafef610de8d04366d26f66879d076516964eae919081900360600190a4505060019093019250613be4915050565b50600954613e10906001600160a01b0316613e086000611e96565b600a54614dd0565b565b60005b600854811015613e8b5760006005600060066002018481548110613e3557fe5b60009182526020808320601083040154600f9092166002026101000a90910461ffff168352820192909252604001902080546001600160801b0319166001600160801b0392909216919091179055600101613e15565b5060005b81518110156124c757828181518110613ea457fe5b602002602001015160056000848481518110613ebc57fe5b60209081029190910181015161ffff16825281019190915260400160002080546001600160801b0319166001600160801b0392909216919091179055600101613e8f565b60608151600101604051908082528060200260200182016040528015613f30578160200160208202803883390190505b5092915050565b60008163ffffffff16836040015163ffffffff161115801561285357505060609091015163ffffffff9182169116101590565b805161ffff90811660009081526005602090815260408083205491850151909316825291812054909182918291613faf9187916001600160801b039081169116614e0e565b94959350505050565b6000613fc48685614e45565b90506000613fd28686614e45565b9050614003846001600160801b0316898481518110613fed57fe5b6020026020010151614f2b90919063ffffffff16565b88838151811061400f57fe5b60200260200101818152505061404a836001600160801b031689838151811061403457fe5b6020026020010151614f9090919063ffffffff16565b88828151811061405657fe5b6020026020010181815250505050505050505050565b60c081015160a0909101510390565b60008261408a57506000612146565b8282028284828161409757fe5b04146128535760405162461bcd60e51b81526004018080602001828103825260218152602001806157a26021913960400191505060405180910390fd5b6080810151815161ffff9081166000908152600560209081526040808320549186015190931682529181205490928392614139926001600160801b03928316926141249289929082169116614e0e565b6001600160801b03169063ffffffff61407b16565b835161ffff1660009081526005602052604081205460a08601519293509091614194916001600160801b03908116916138de9161417e9187911663ffffffff614ff516565b6001600160801b0389169063ffffffff6145e216565b60a085018051865161ffff166000908152600560205260408120549251939450926141eb926001600160801b03928316926141df92918116916138de9189911663ffffffff61503716565b9063ffffffff614ff516565b90506141fd828263ffffffff6145e216565b9695505050505050565b600082820183811015612853576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600460205260409020805461431e919061ffff851690811061428e57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c0820152615079565b156124c757614396614391826001600160801b031660046000876001600160a01b03166001600160a01b031681526020019081526020016000208561ffff168154811061436757fe5b6000918252602090912060029091020160010154600160801b90046001600160801b031690614207565b6150b3565b6001600160a01b0384166000908152600460205260409020805461ffff85169081106143be57fe5b906000526020600020906002020160010160106101000a8154816001600160801b0302191690836001600160801b03160217905550505050565b6144028383613039565b1561444d5761440f612d4f565b6001600160a01b038481166000908152600160209081526040808320938716835292905220805463ffffffff191663ffffffff929092169190911790555b6124c7838383614cc3565b6144628383612c15565b8111156144b6576040805162461bcd60e51b815260206004820152601e60248201527f416d6f756e742065786365656473207573657227732062616c616e63652e0000604482015290519081900360640190fd5b6124c7838383614dd0565b6000806144ef6144d08561406c565b6001600160801b03166144ea85612df18860200151611e96565b6149bb565b60a085015160208087015161ffff166000908152600590915260408120549293509161452d916001600160801b03918216911663ffffffff61407b16565b855161ffff1660009081526005602052604081205460808801519293509091614578916103e7916141df916103e8916138de916001600160801b03918216911663ffffffff61407b16565b905060008183111561459757614594838363ffffffff6145e216565b90505b60a08701516145b9906001600160801b03166141df868463ffffffff61407b16565b979650505050505050565b6000816000815181106145d357fe5b60200260200101519050919050565b600061285383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506150f7565b61462d816138cf565b6146685760405162461bcd60e51b815260040180806020018281038252603b81526020018061562c603b913960400191505060405180910390fd5b600b55565b600a819055614686336146806000611e96565b836143f8565b50565b60008160008151811061469857fe5b6020026020010151136146dc5760405162461bcd60e51b81526004018080602001828103825260298152602001806158496029913960400191505060405180910390fd5b60015b8151811015611f3c578181815181106146f457fe5b6020026020010151600014614750576040805162461bcd60e51b815260206004820181905260248201527f546f6b656e20636f6e736572766174696f6e20646f6573206e6f7420686f6c64604482015290519081900360640190fd5b6001016146df565b6006805463ffffffff191663ffffffff871617905560005b845181101561486d576006600101604051806060016040528087848151811061479557fe5b60200260200101516001600160a01b031681526020018584815181106147b757fe5b60200260200101516001600160801b031681526020018684815181106147d957fe5b60209081029190910181015161ffff908116909252835460018082018655600095865294829020845160029092020180546001600160a01b0319166001600160a01b039092169190911781559083015190840180546040909401516001600160801b03199094166001600160801b039092169190911761ffff60801b1916600160801b939092169290920217905501614770565b5080516148819060089060208401906154ba565b5050600980546001600160a01b0319163317905550505050565b6001600160a01b038083166000908152602081815260408083209385168352929052206002015463ffffffff1680158015906148e357506148da612d4f565b63ffffffff1681105b156124c7576001600160a01b038381166000908152602081815260408083209386168352929052206001810154905461491b91614207565b6001600160a01b0393841660009081526020818152604080832095909616825293909352928220928355506001820155600201805463ffffffff19169055565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526149b590859061518e565b50505050565b60008183106149ca5781612853565b5090919050565b604080516001600160601b0319606086901b166020820152815180820360140181526034820183526054808301869052835180840390910181526074909201909252614a2490829063ffffffff6132e616565b82516040805160f09290921b6001600160f01b03191660208301528051600281840301815260229092019052909150614a5e9082906132e6565b9050614aa18260200151604051602001808261ffff1661ffff1660f01b8152600201915050604051602081830303815290604052826132e690919063ffffffff16565b9050614ae88260400151604051602001808263ffffffff1663ffffffff1660e01b8152600401915050604051602081830303815290604052826132e690919063ffffffff16565b9050614b2f8260600151604051602001808263ffffffff1663ffffffff1660e01b8152600401915050604051602081830303815290604052826132e690919063ffffffff16565b9050614b7c826080015160405160200180826001600160801b03166001600160801b031660801b8152601001915050604051602081830303815290604052826132e690919063ffffffff16565b9050614bc98260a0015160405160200180826001600160801b03166001600160801b031660801b8152601001915050604051602081830303815290604052826132e690919063ffffffff16565b9050612d36614bd78361406c565b6040805160809290921b6001600160801b0319166020830152805160108184030181526030909201905282906132e6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124c790849061518e565b6000620100008210614c9d5760405162461bcd60e51b81526004018080602001828103825260268152602001806155c06026913960400191505060405180910390fd5b5090565b60006001614cad612d4f565b60065463ffffffff908116929091031614905090565b614ccd838361489b565b6001600160a01b0380841660009081526020818152604080832093861683529290522054614d01908263ffffffff61420716565b6001600160a01b0393841660009081526020818152604080832095909616825293909352929091209190915550565b6001600160a01b03831660009081526004602052604090208054614d5d919061ffff851690811061428e57fe5b156124c757614396614391826001600160801b031660046000876001600160a01b03166001600160a01b031681526020019081526020016000208561ffff1681548110614da657fe5b6000918252602090912060029091020160010154600160801b90046001600160801b0316906145e2565b614dda838361489b565b6001600160a01b0380841660009081526020818152604080832093861683529290522054614d01908263ffffffff6145e216565b6000612d366143916001600160801b03808516906141df906103e8906138de906103e79084908c8116908c1663ffffffff61407b16565b600061ffff8316614e5857506000612146565b8151600090600019015b818110614ede57600060028383010490508561ffff16858281518110614e8457fe5b602002602001015161ffff161415614ea3576001019250612146915050565b8561ffff16858281518110614eb457fe5b602002602001015161ffff161015614ed157806001019250614ed8565b6001810391505b50614e62565b6040805162461bcd60e51b815260206004820152601c60248201527f5072696365206e6f742070726f766964656420666f7220746f6b656e00000000604482015290519081900360640190fd5b6000818303818312801590614f405750838113155b80614f555750600083128015614f5557508381135b6128535760405162461bcd60e51b81526004018080602001828103825260248152602001806158966024913960400191505060405180910390fd5b6000828201818312801590614fa55750838112155b80614fba5750600083128015614fba57508381125b6128535760405162461bcd60e51b815260040180806020018281038252602181526020018061568e6021913960400191505060405180910390fd5b600061285383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615346565b600061285383836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506153ab565b60006000196001600160801b031682608001516001600160801b03161415801561214657505060a001516001600160801b03908116141590565b6000600160801b8210614c9d5760405162461bcd60e51b81526004018080602001828103825260278152602001806156676027913960400191505060405180910390fd5b600081848411156151865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561514b578181015183820152602001615133565b50505050905090810190601f1680156151785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6151a0826001600160a01b031661540d565b6151f1576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061522f5780518252601f199092019160209182019101615210565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615291576040519150601f19603f3d011682016040523d82523d6000602084013e615296565b606091505b5091509150816152ed576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156149b55780806020019051602081101561530957600080fd5b50516149b55760405162461bcd60e51b815260040180806020018281038252602a8152602001806158ba602a913960400191505060405180910390fd5b600081836153955760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561514b578181015183820152602001615133565b5060008385816153a157fe5b0495945050505050565b600081836153fa5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561514b578181015183820152602001615133565b5082848161540457fe5b06949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612d36575050151592915050565b5080546000825560020290600052602060002090810190614686919061555f565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b82805482825590600052602060002090600f016010900481019282156155535791602002820160005b8382111561552357835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026154e3565b80156155515782816101000a81549061ffff0219169055600201602081600101049283019260010302615523565b505b50614c9d9291506155a0565b6112d291905b80821115614c9d5780546001600160a01b031916815560018101805471ffffffffffffffffffffffffffffffffffff19169055600201615565565b6112d291905b80821115614c9d57805461ffff191681556001016155a656fe53616665436173743a2076616c756520646f65736e27742066697420696e203136206269747362757920616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d536f6c7574696f6e2065786365656473204d41585f544f55434845445f4f52444552534e6577206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e53616665436173743a2076616c756520646f65736e27742066697420696e2031323820626974735369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77536f6c7574696f6e7320617265206e6f206c6f6e67657220616363657074656420666f7220746869732062617463685769746864726177206e6f7420706f737369626c6520666f7220746f6b656e20746861742069732074726164656420696e207468652063757272656e742061756374696f6e4174206c65617374206f6e65207072696365206c6f776572207468616e20414d4f554e545f4d494e494d554d4f72646572732063616e277420626520706c6163656420696e207468652070617374657865637574656453656c6c416d6f756e7420626967676572207468616e2073706563696669656420696e206f72646572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7770726963657320617265206e6f74206f72646572656420627920746f6b656e4964776974686472617720776173206e6f7420726567697374657265642070726576696f75736c79436c61696d6564206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e546f6b656e20636f6e736572766174696f6e2061742030206d75737420626520706f7369746976652e73656c6c20616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564526571756573742063616e6e6f74206265206d61646520696e207468652070617374a265627a7a723058202f0b1eee434c5ba5c6b479e1151d5185f81bebb79cb7370deecb2cdc6ce9ae2664736f6c634300050a0032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102535760003560e01c806395466a4611610146578063e1d5f64e116100c3578063f36b635511610087578063f36b635514611217578063f3f479821461124f578063f47c84c51461127d578063f940e38514611285578063fb736d32146112b3578063ff97c626146112bb57610253565b8063e1d5f64e146111a1578063e48c015e146111a9578063e720ac8e146111b1578063ed2da357146111b9578063ef574d23146111f157610253565b8063c33eb9f61161010a578063c33eb9f6146110f4578063c49598fb14611122578063d48bfca714611145578063d4fac45d1461116b578063d73792a91461119957610253565b806395466a4614610c4c5780639bb0f59914610c845780639cc84ed314610cbe578063b3c0afa114610cfb578063c1ef283814610d4757610253565b80634bdc1b4c116101d457806372f3dd391161019857806372f3dd3914610b38578063793b8c6d14610b5e5780637fb47b0614610bde5780638e499bcf14610be6578063907767c014610c0557610253565b80634bdc1b4c146106cf57806361ed16d014610770578063647846a51461079457806365cc3e781461079c57806366367c1014610b1757610253565b80632f10d0821161021b5780632f10d08214610600578063397a1b281461063d57806341e383ed1461066b57806343383ac31461067357806347e7ef24146106a357610253565b8063094c7e191461025857806317569c1d1461027257806323d4a3c91461027a57806326c3d394146102f75780632e4c83bd14610345575b600080fd5b6102606112c3565b60408051918252519081900360200190f35b6102606112c8565b6102826112d5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102bc5781810151838201526020016102a4565b50505050905090810190601f1680156102e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610260600480360360a081101561030d57600080fd5b5061ffff813581169160208101359091169063ffffffff604082013516906001600160801b036060820135811691608001351661144e565b610260600480360360e081101561035b57600080fd5b63ffffffff82351691602081013591810190606081016040820135600160201b81111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460208302840111600160201b831117156103ba57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561040957600080fd5b82018360208201111561041b57600080fd5b803590602001918460208302840111600160201b8311171561043c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561048b57600080fd5b82018360208201111561049d57600080fd5b803590602001918460208302840111600160201b831117156104be57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561050d57600080fd5b82018360208201111561051f57600080fd5b803590602001918460208302840111600160201b8311171561054057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561058f57600080fd5b8201836020820111156105a157600080fd5b803590602001918460208302840111600160201b831117156105c257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611473945050505050565b6106216004803603602081101561061657600080fd5b503561ffff16611e96565b604080516001600160a01b039092168252519081900360200190f35b6106696004803603604081101561065357600080fd5b506001600160a01b038135169060200135611f2a565b005b610260611f40565b6102826004803603604081101561068957600080fd5b5080356001600160a01b0316906020013561ffff16611f4c565b610669600480360360408110156106b957600080fd5b506001600160a01b03813516906020013561214c565b610669600480360360208110156106e557600080fd5b810190602081018135600160201b8111156106ff57600080fd5b82018360208201111561071157600080fd5b803590602001918460208302840111600160201b8311171561073257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061224d945050505050565b6107786124cc565b604080516001600160801b039092168252519081900360200190f35b6106216124d2565b610ac7600480360360c08110156107b257600080fd5b810190602081018135600160201b8111156107cc57600080fd5b8201836020820111156107de57600080fd5b803590602001918460208302840111600160201b831117156107ff57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561084e57600080fd5b82018360208201111561086057600080fd5b803590602001918460208302840111600160201b8311171561088157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108d057600080fd5b8201836020820111156108e257600080fd5b803590602001918460208302840111600160201b8311171561090357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561095257600080fd5b82018360208201111561096457600080fd5b803590602001918460208302840111600160201b8311171561098557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156109d457600080fd5b8201836020820111156109e657600080fd5b803590602001918460208302840111600160201b83111715610a0757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610a5657600080fd5b820183602082011115610a6857600080fd5b803590602001918460208302840111600160201b83111715610a8957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506124e7945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b03578181015183820152602001610aeb565b505050509050019250505060405180910390f35b61077860048036036020811015610b2d57600080fd5b503561ffff166125d5565b61028260048036036020811015610b4e57600080fd5b50356001600160a01b03166125f0565b610b8a60048036036040811015610b7457600080fd5b506001600160a01b038135169060200135612600565b6040805161ffff988916815296909716602087015263ffffffff948516868801529290931660608501526001600160801b03908116608085015291821660a08401521660c082015290519081900360e00190f35b61077861267e565b610bee612684565b6040805161ffff9092168252519081900360200190f35b610c3360048036036040811015610c1b57600080fd5b506001600160a01b038135811691602001351661268e565b6040805163ffffffff9092168252519081900360200190f35b61028260048036036060811015610c6257600080fd5b506001600160a01b038135169061ffff602082013581169160400135166126b1565b610caa60048036036020811015610c9a57600080fd5b50356001600160a01b031661285a565b604080519115158252519081900360200190f35b610cc66128bf565b6040805163ffffffff90951685526001600160a01b039093166020850152838301919091526060830152519081900360800190f35b610d2960048036036040811015610d1157600080fd5b506001600160a01b03813581169160200135166128e3565b6040805192835263ffffffff90911660208301528051918290030190f35b610ac7600480360360e0811015610d5d57600080fd5b810190602081018135600160201b811115610d7757600080fd5b820183602082011115610d8957600080fd5b803590602001918460208302840111600160201b83111715610daa57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610df957600080fd5b820183602082011115610e0b57600080fd5b803590602001918460208302840111600160201b83111715610e2c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e7b57600080fd5b820183602082011115610e8d57600080fd5b803590602001918460208302840111600160201b83111715610eae57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610efd57600080fd5b820183602082011115610f0f57600080fd5b803590602001918460208302840111600160201b83111715610f3057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f7f57600080fd5b820183602082011115610f9157600080fd5b803590602001918460208302840111600160201b83111715610fb257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561100157600080fd5b82018360208201111561101357600080fd5b803590602001918460208302840111600160201b8311171561103457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561108357600080fd5b82018360208201111561109557600080fd5b803590602001918460208302840111600160201b831117156110b657600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061293d945050505050565b610d296004803603604081101561110a57600080fd5b506001600160a01b0381358116916020013516612962565b610caa6004803603602081101561113857600080fd5b503563ffffffff166129bc565b6106696004803603602081101561115b57600080fd5b50356001600160a01b03166129f0565b6102606004803603604081101561118157600080fd5b506001600160a01b0381358116916020013516612c15565b610778612d3e565b610778612d44565b610c33612d49565b610c33612d4f565b610282600480360360608110156111cf57600080fd5b506001600160a01b038135169061ffff60208201358116916040013516612d57565b610bee6004803603602081101561120757600080fd5b50356001600160a01b0316612ecd565b6106696004803603606081101561122d57600080fd5b5080356001600160a01b0316906020810135906040013563ffffffff16612f32565b610caa6004803603604081101561126557600080fd5b506001600160a01b0381358116916020013516613039565b6102606130b1565b6106696004803603604081101561129b57600080fd5b506001600160a01b03813581169160200135166130b7565b6102606132ae565b6102606132b3565b606481565b61012c4281900690035b90565b600d54606090600160a01b90046001600160601b0316156112d2576000600c73__IterableAppendOnlySet_________________6368fb2bc290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561134457600080fd5b505af4158015611358573d6000803e3d6000fd5b505050506040513d602081101561136e57600080fd5b5051905060005b8061144957611393611386836125f0565b849063ffffffff6132e616565b600d549093506001600160a01b03838116911614156113b457506001611444565b6040805163218777b360e21b8152600c60048201526001600160a01b0384166024820152905173__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b15801561141557600080fd5b505af4158015611429573d6000803e3d6000fd5b505050506040513d602081101561143f57600080fd5b505191505b611375565b505090565b6000611465868661145d612d4f565b878787613363565b61ffff169695505050505050565b600061147e886129bc565b6114b95760405162461bcd60e51b815260040180806020018281038252602f8152602001806156af602f913960400191505060405180910390fd5b6114c2876138cf565b6114fd5760405162461bcd60e51b815260040180806020018281038252603f81526020018061580a603f913960400191505060405180910390fd5b61150683613902565b6115415760405162461bcd60e51b815260040180806020018281038252602c815260200180615723602c913960400191505060405180910390fd5b8160008151811061154e57fe5b602002602001015161ffff16600014156115af576040805162461bcd60e51b815260206004820152601a60248201527f46656520746f6b656e2068617320666978656420707269636521000000000000604482015290519081900360640190fd5b6115b882613959565b6115f35760405162461bcd60e51b81526004018080602001828103825260218152602001806157c36021913960400191505060405180910390fd5b601e865111156116345760405162461bcd60e51b81526004018080602001828103825260238152602001806156096023913960400191505060405180910390fd5b600061163e6139b1565b9050611648613a43565b6116528484613e12565b61165e60076000615446565b606061166984613f00565b90506000805b8951811015611ab757611680615467565b600460008c848151811061169057fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208a83815181106116c457fe5b602002602001015161ffff16815481106116da57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201529050611771818e613f37565b6117b5576040805162461bcd60e51b815260206004820152601060248201526f13dc99195c881a5cc81a5b9d985b1a5960821b604482015290519081900360640190fd5b6000806117d58b85815181106117c757fe5b602002602001015184613f6a565b90925090506127106001600160801b03831610156118245760405162461bcd60e51b81526004018080602001828103825260238152602001806155e66023913960400191505060405180910390fd5b6127106001600160801b038216101561186e5760405162461bcd60e51b81526004018080602001828103825260248152602001806158726024913960400191505060405180910390fd5b825160208401516118899188918c868663ffffffff613fb816565b806001600160801b031661189c8461406c565b6001600160801b031610156118e25760405162461bcd60e51b81526004018080602001828103825260318152602001806157716031913960400191505060405180910390fd5b60a0830151611903906001600160801b03848116911663ffffffff61407b16565b6080840151611924906001600160801b03848116911663ffffffff61407b16565b1115611977576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974207072696365206e6f742073617469736669656400000000000000604482015290519081900360640190fd5b61199161198483856140d4565b869063ffffffff61420716565b94506119c48d85815181106119a257fe5b60200260200101518d86815181106119b657fe5b602002602001015183614261565b6119f78d85815181106119d357fe5b60200260200101516119e88560000151611e96565b846001600160801b03166143f8565b826020015161ffff168c8581518110611a0c57fe5b602002602001015161ffff168e8681518110611a2457fe5b60200260200101516001600160a01b03167fafa5bc1fb80950b7cb2353ba0cf16a6d68de75801f2dac54b2dae9268450010a86600001518587604051808461ffff1661ffff168152602001836001600160801b03166001600160801b03168152602001826001600160801b03166001600160801b03168152602001935050505060405180910390a450505060010161166f565b5060005b8951811015611c1157611acc615467565b600460008c8481518110611adc57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208a8381518110611b1057fe5b602002602001015161ffff1681548110611b2657fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c08201528a51909250611bd1908b9085908110611bc357fe5b602002602001015183613f6a565b915050611c078c8481518110611be357fe5b6020026020010151611bf88460200151611e96565b836001600160801b0316614458565b5050600101611abb565b506000805b8a51811015611d3c57611d32611d25600460008e8581518110611c3557fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208c8481518110611c6957fe5b602002602001015161ffff1681548110611c7f57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201528d518e9085908110611d1857fe5b60200260200101516144c1565b839063ffffffff61420716565b9150600101611c16565b5060006002611d4a856145c4565b81611d5157fe5b0490506000611d7683611d6a868563ffffffff61420716565b9063ffffffff6145e216565b9050611d8181614624565b611d8a8261466d565b611d9385614689565b611da08e8d8d8d8c614758565b336001600160a01b03167f2140b6253bf38aea0a4ac9e9e6427b256e4035d60df4a85bb139ce975eb6b41d8585858a8e8e604051808781526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611e2d578181015183820152602001611e15565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611e6c578181015183820152602001611e54565b505050509050019850505050505050505060405180910390a29d9c50505050505050505050505050565b60408051632ffeb2d760e21b8152600e600482015261ffff83166024820152905160009173__IdToAddressBiMap______________________9163bffacb5c91604480820192602092909190829003018186803b158015611ef657600080fd5b505af4158015611f0a573d6000803e3d6000fd5b505050506040513d6020811015611f2057600080fd5b505190505b919050565b611f3c8282611f37612d4f565b612f32565b5050565b678ac7230489e8000081565b600d54606090600160a01b90046001600160601b0316611f6b57612146565b6000836001600160a01b038116612041576040805163347d95e160e11b8152600c6004820152905173__IterableAppendOnlySet_________________916368fb2bc2916024808301926020929190829003018186803b158015611fce57600080fd5b505af4158015611fe2573d6000803e3d6000fd5b505050506040513d6020811015611ff857600080fd5b5051604080516001600160601b0319606084901b16602082015281518082036014018152603490910190915290915061203890849063ffffffff6132e616565b92506001909101905b8361ffff168261ffff161080156120665750600d546001600160a01b03828116911614155b15612143576040805163218777b360e21b8152600c60048201526001600160a01b0383166024820152905173__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b1580156120cc57600080fd5b505af41580156120e0573d6000803e3d6000fd5b505050506040513d60208110156120f657600080fd5b5051604080516001600160601b0319606084901b16602082015281518082036014018152603490910190915290915061213690849063ffffffff6132e616565b9250600190910190612041565b50505b92915050565b612156338361489b565b6121628233308461495b565b336000908152602081815260408083206001600160a01b0386168452909152902060010154612197908263ffffffff61420716565b336000908152602081815260408083206001600160a01b03871684529091529020600101556121c4612d4f565b336000818152602081815260408083206001600160a01b0388168085529252909120600201805463ffffffff191663ffffffff94909416939093179092557fc11cc34e93c67a93382b99f2498e9937198798f3c1c2888008ffc0eeb82f68c48361222c612d4f565b6040805192835263ffffffff90911660208301528051918290030190a35050565b60006001612259612d4f565b03905060005b82518161ffff1610156124c75733600090815260046020526040902083516123399190859061ffff851690811061229257fe5b602002602001015161ffff16815481106122a857fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c082015283613f37565b6123f5573360009081526004602052604090208351849061ffff841690811061235e57fe5b602002602001015161ffff168154811061237457fe5b60009182526020822060029091020180546001600160e01b031916815560010155825133907f7b0a9854603fbbe7606a58b70d113bd0d1ec8475f1b8cc9603c2d377e67835cd90859061ffff85169081106123cb57fe5b6020026020010151604051808261ffff1661ffff16815260200191505060405180910390a26124bf565b3360009081526004602052604090208351839190859061ffff851690811061241957fe5b602002602001015161ffff168154811061242f57fe5b906000526020600020906002020160000160086101000a81548163ffffffff021916908363ffffffff160217905550336001600160a01b03167f7a02963a37046835196f1a3185a036fd67cfca72283e46e4b3cdb99939851937848361ffff168151811061249957fe5b6020026020010151604051808261ffff1661ffff16815260200191505060405180910390a25b60010161225f565b505050565b61271081565b6003546201000090046001600160a01b031681565b60608651604051908082528060200260200182016040528015612514578160200160208202803883390190505b50905060005b87518110156125ca576125a388828151811061253257fe5b602002602001015188838151811061254657fe5b602002602001015188848151811061255a57fe5b602002602001015188858151811061256e57fe5b602002602001015188868151811061258257fe5b602002602001015188878151811061259657fe5b6020026020010151613363565b8282815181106125af57fe5b61ffff9092166020928302919091019091015260010161251a565b509695505050505050565b6005602052600090815260409020546001600160801b031681565b6060612146826000600019612d57565b6004602052816000526040600020818154811061261957fe5b60009182526020909120600290910201805460019091015461ffff808316945062010000830416925063ffffffff600160201b8304811692600160401b8104909116916001600160801b03600160601b90920482169181811691600160801b90041687565b60001981565b60035461ffff1681565b600160209081526000928352604080842090915290825290205463ffffffff1681565b600d54606090600160a01b90046001600160601b03166126d057612853565b82846001600160a01b038116612761576040805163347d95e160e11b8152600c6004820152905173__IterableAppendOnlySet_________________916368fb2bc2916024808301926020929190829003018186803b15801561273257600080fd5b505af4158015612746573d6000803e3d6000fd5b505050506040513d602081101561275c57600080fd5b505190505b825161ffff85169060709004101561285057612797611386828460706001600160801b031687518161278f57fe5b048803612d57565b600d549093506001600160a01b03828116911614156127b857506128539050565b6040805163218777b360e21b8152600c60048201526001600160a01b038316602482015290516000935073__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b15801561281d57600080fd5b505af4158015612831573d6000803e3d6000fd5b505050506040513d602081101561284757600080fd5b50519050612761565b50505b9392505050565b60408051636e8930a360e11b8152600e60048201526001600160a01b0383166024820152905160009173__IdToAddressBiMap______________________9163dd12614691604480820192602092909190829003018186803b158015611ef657600080fd5b600654600954600a54600b5463ffffffff909316926001600160a01b039092169184565b6000806128ee6154a3565b5050506001600160a01b039182166000908152602081815260408083209390941682529182528290208251808401909352600181015480845260029091015463ffffffff169290910182905291565b60606129488861224d565b6129568787878787876124e7565b98975050505050505050565b60008061296d6154a3565b5050506001600160a01b039182166000908152602081815260408083209390941682529182528290208251808401909352600381015480845260049091015463ffffffff169290910182905291565b600060016129c8612d4f565b0363ffffffff168263ffffffff161480156121465750603c6129e86112c8565b101592915050565b60025460035461ffff1610612a41576040805162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b604482015290519081900360640190fd5b60035461ffff1615612ac55760035460408051634417f4db60e01b8152336004820152678ac7230489e8000060248201529051620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b158015612aac57600080fd5b505af1158015612ac0573d6000803e3d6000fd5b505050505b60035460408051639f3cb65560e01b8152600e600482015261ffff90921660248301526001600160a01b03831660448301525173__IdToAddressBiMap______________________91639f3cb655916064808301926020929190829003018186803b158015612b3357600080fd5b505af4158015612b47573d6000803e3d6000fd5b505050506040513d6020811015612b5d57600080fd5b5051612bb0576040805162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015290519081900360640190fd5b600354604080516001600160a01b038416815261ffff909216602083015280517fe4b282c4351ffe36572a572de193a7de086edc47c9e62669fe6ab49fc53a33139281900390910190a1506003805461ffff8082166001011661ffff19909116179055565b6001600160a01b03808316600090815260208181526040808320938516835292905290812054612c43612d4f565b6001600160a01b038086166000908152602081815260408083209388168352929052206002015463ffffffff91821691161015612cb5576001600160a01b0380851660009081526020818152604080832093871683529290522060010154612cb290829063ffffffff61420716565b90505b612cbd612d4f565b6001600160a01b038086166000908152602081815260408083209388168352929052206004015463ffffffff91821691161015612853576001600160a01b0380851660009081526020818152604080832093871683529290522060030154612d3690612d2990836149bb565b829063ffffffff6145e216565b949350505050565b6103e881565b607081565b61012c81565b61012c420490565b6060825b6001600160a01b038516600090815260046020526040902054612d849061ffff868601166149bb565b8161ffff161015612ec557612ebb612eae86612df688612df1600460008c6001600160a01b03166001600160a01b031681526020019081526020016000208761ffff1681548110612dd157fe5b600091825260209091206002909102015462010000900461ffff16611e96565b612c15565b6001600160a01b0389166000908152600460205260409020805461ffff8716908110612e1e57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201526149d1565b839063ffffffff6132e616565b9150600101612d5b565b509392505050565b6040805163b3129e1f60e01b8152600e60048201526001600160a01b0383166024820152905160009173__IdToAddressBiMap______________________9163b3129e1f91604480820192602092909190829003018186803b158015611ef657600080fd5b612f3c3384613039565b15612f4b57612f4b33846130b7565b612f53612d4f565b63ffffffff168163ffffffff161015612f9d5760405162461bcd60e51b81526004018080602001828103825260228152602001806158e46022913960400191505060405180910390fd5b60408051808201825283815263ffffffff83811660208084018281523360008181528084528781206001600160a01b038c16808352908552908890209651600388015591516004909601805463ffffffff19169690951695909517909355845187815290810191909152835191937f2c6245af506f0fc1089918c02c1d01bde9cc807609b334b3e7644d6dfb5a6c5e92918290030190a3505050565b6000613043612d4f565b6001600160a01b038085166000908152602081815260408083209387168352929052206004015463ffffffff91821691161080156128535750506001600160a01b0391821660009081526020818152604080832093909416825291909152206004015463ffffffff16151590565b60025481565b6130c1828261489b565b6130c9612d4f565b6001600160a01b038084166000908152602081815260408083209386168352929052206004015463ffffffff9182169116106131365760405162461bcd60e51b81526004018080602001828103825260268152602001806157e46026913960400191505060405180910390fd5b61313e612d4f565b6001600160a01b0380841660009081526001602090815260408083209386168352929052205463ffffffff9182169116106131aa5760405162461bcd60e51b81526004018080602001828103825260458152602001806156de6045913960600191505060405180910390fd5b6001600160a01b03828116600090815260208181526040808320938516835292905290812080546003909101546131e191906149bb565b6001600160a01b0380851660009081526020818152604080832093871683529290522054909150613218908263ffffffff6145e216565b6001600160a01b0384811660009081526020818152604080832093871683529290529081209182556003820155600401805463ffffffff1916905561325e828483614c08565b816001600160a01b0316836001600160a01b03167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040518082815260200191505060405180910390a3505050565b601e81565b600060016132bf612d4f565b60065463ffffffff908116929091031614156132de5750600b546112d2565b5060006112d2565b6060806040519050835180825260208201818101602087015b818310156133175780518352602092830192016132ff565b50855184518101855292509050808201602086015b8183101561334457805183526020928301920161332c565b508651929092011591909101601f01601f191660405250905092915050565b6040805163ab8978b760e01b8152600e600482015261ffff88166024820152905160009173__IdToAddressBiMap______________________9163ab8978b791604480820192602092909190829003018186803b1580156133c357600080fd5b505af41580156133d7573d6000803e3d6000fd5b505050506040513d60208110156133ed57600080fd5b5051613440576040805162461bcd60e51b815260206004820152601860248201527f42757920746f6b656e206d757374206265206c69737465640000000000000000604482015290519081900360640190fd5b6040805163ab8978b760e01b8152600e600482015261ffff88166024820152905173__IdToAddressBiMap______________________9163ab8978b7916044808301926020929190829003018186803b15801561349c57600080fd5b505af41580156134b0573d6000803e3d6000fd5b505050506040513d60208110156134c657600080fd5b5051613519576040805162461bcd60e51b815260206004820152601960248201527f53656c6c20746f6b656e206d757374206265206c697374656400000000000000604482015290519081900360640190fd5b8561ffff168761ffff161415613576576040805162461bcd60e51b815260206004820152601c60248201527f45786368616e676520746f6b656e73206e6f742064697374696e637400000000604482015290519081900360640190fd5b61357e612d4f565b63ffffffff168563ffffffff1610156135c85760405162461bcd60e51b815260040180806020018281038252602281526020018061574f6022913960400191505060405180910390fd5b60046000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060e001604052808961ffff1681526020018861ffff1681526020018763ffffffff1681526020018663ffffffff168152602001856001600160801b03168152602001846001600160801b0316815260200160006001600160801b03168152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555060408201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600c6101000a8154816001600160801b0302191690836001600160801b0316021790555060a08201518160010160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555050505060006137cf600160046000336001600160a01b03166001600160a01b031681526020019081526020016000208054905003614c5a565b6040805161ffff808416825263ffffffff808b1660208401528916828401526001600160801b038089166060840152871660808301529151929350818a1692918b169133917fdecf6fde8243981299f7b7a776f29a9fc67a2c9848e25d77c50eb11fa58a7e21919081900360a00190a460408051634743bd0360e11b8152600c6004820152336024820152905173__IterableAppendOnlySet_________________91638e877a06916044808301926020929190829003018186803b15801561389757600080fd5b505af41580156138ab573d6000803e3d6000fd5b505050506040513d60208110156138c157600080fd5b509098975050505050505050565b60006138ea60656138de6132b3565b9063ffffffff61407b16565b6138fb83606463ffffffff61407b16565b1192915050565b6000805b8251811015613950576127106001600160801b031683828151811061392757fe5b60200260200101516001600160801b03161015613948576000915050611f25565b600101613906565b50600192915050565b600060015b82518110156139505782600182038151811061397657fe5b602002602001015161ffff1683828151811061398e57fe5b602002602001015161ffff16116139a9576000915050611f25565b60010161395e565b60006139bb614ca1565b613a3d57600354600a5460408051634417f4db60e01b8152306004820152602481019290925251620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b158015613a1a57600080fd5b505af1158015613a2e573d6000803e3d6000fd5b5050600a5492506112d2915050565b50600090565b613a4b614ca1565b15613e105760005b600754811015613be057600060066001018281548110613a6f57fe5b60009182526020822060029091020154600780546001600160a01b0390921693509084908110613a9b57fe5b906000526020600020906002020160010160109054906101000a900461ffff169050613ac5615467565b6001600160a01b0383166000908152600460205260409020805461ffff8416908110613aed57fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c082015260078054919350613bad9187908110613b8a57fe5b60009182526020909120600160029092020101546001600160801b031683613f6a565b915050613bd084613bc18460200151611e96565b836001600160801b0316614cc3565b505060019092019150613a539050565b5060005b600754811015613ded57600060066001018281548110613c0057fe5b60009182526020822060029091020154600780546001600160a01b0390921693509084908110613c2c57fe5b906000526020600020906002020160010160109054906101000a900461ffff169050613c56615467565b6001600160a01b0383166000908152600460205260409020805461ffff8416908110613c7e57fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c0820152600780549193508291613d41919088908110613d1e57fe5b60009182526020909120600160029092020101546001600160801b031684613f6a565b91509150613d50858583614d30565b613d7085613d618560000151611e96565b846001600160801b0316614dd0565b60208084015184516040805161ffff92831681526001600160801b0380871695820195909552938616848201525191811692908716916001600160a01b038916917fb7214f648cea2a7c47aaea7e7aafef610de8d04366d26f66879d076516964eae919081900360600190a4505060019093019250613be4915050565b50600954613e10906001600160a01b0316613e086000611e96565b600a54614dd0565b565b60005b600854811015613e8b5760006005600060066002018481548110613e3557fe5b60009182526020808320601083040154600f9092166002026101000a90910461ffff168352820192909252604001902080546001600160801b0319166001600160801b0392909216919091179055600101613e15565b5060005b81518110156124c757828181518110613ea457fe5b602002602001015160056000848481518110613ebc57fe5b60209081029190910181015161ffff16825281019190915260400160002080546001600160801b0319166001600160801b0392909216919091179055600101613e8f565b60608151600101604051908082528060200260200182016040528015613f30578160200160208202803883390190505b5092915050565b60008163ffffffff16836040015163ffffffff161115801561285357505060609091015163ffffffff9182169116101590565b805161ffff90811660009081526005602090815260408083205491850151909316825291812054909182918291613faf9187916001600160801b039081169116614e0e565b94959350505050565b6000613fc48685614e45565b90506000613fd28686614e45565b9050614003846001600160801b0316898481518110613fed57fe5b6020026020010151614f2b90919063ffffffff16565b88838151811061400f57fe5b60200260200101818152505061404a836001600160801b031689838151811061403457fe5b6020026020010151614f9090919063ffffffff16565b88828151811061405657fe5b6020026020010181815250505050505050505050565b60c081015160a0909101510390565b60008261408a57506000612146565b8282028284828161409757fe5b04146128535760405162461bcd60e51b81526004018080602001828103825260218152602001806157a26021913960400191505060405180910390fd5b6080810151815161ffff9081166000908152600560209081526040808320549186015190931682529181205490928392614139926001600160801b03928316926141249289929082169116614e0e565b6001600160801b03169063ffffffff61407b16565b835161ffff1660009081526005602052604081205460a08601519293509091614194916001600160801b03908116916138de9161417e9187911663ffffffff614ff516565b6001600160801b0389169063ffffffff6145e216565b60a085018051865161ffff166000908152600560205260408120549251939450926141eb926001600160801b03928316926141df92918116916138de9189911663ffffffff61503716565b9063ffffffff614ff516565b90506141fd828263ffffffff6145e216565b9695505050505050565b600082820183811015612853576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600460205260409020805461431e919061ffff851690811061428e57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c0820152615079565b156124c757614396614391826001600160801b031660046000876001600160a01b03166001600160a01b031681526020019081526020016000208561ffff168154811061436757fe5b6000918252602090912060029091020160010154600160801b90046001600160801b031690614207565b6150b3565b6001600160a01b0384166000908152600460205260409020805461ffff85169081106143be57fe5b906000526020600020906002020160010160106101000a8154816001600160801b0302191690836001600160801b03160217905550505050565b6144028383613039565b1561444d5761440f612d4f565b6001600160a01b038481166000908152600160209081526040808320938716835292905220805463ffffffff191663ffffffff929092169190911790555b6124c7838383614cc3565b6144628383612c15565b8111156144b6576040805162461bcd60e51b815260206004820152601e60248201527f416d6f756e742065786365656473207573657227732062616c616e63652e0000604482015290519081900360640190fd5b6124c7838383614dd0565b6000806144ef6144d08561406c565b6001600160801b03166144ea85612df18860200151611e96565b6149bb565b60a085015160208087015161ffff166000908152600590915260408120549293509161452d916001600160801b03918216911663ffffffff61407b16565b855161ffff1660009081526005602052604081205460808801519293509091614578916103e7916141df916103e8916138de916001600160801b03918216911663ffffffff61407b16565b905060008183111561459757614594838363ffffffff6145e216565b90505b60a08701516145b9906001600160801b03166141df868463ffffffff61407b16565b979650505050505050565b6000816000815181106145d357fe5b60200260200101519050919050565b600061285383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506150f7565b61462d816138cf565b6146685760405162461bcd60e51b815260040180806020018281038252603b81526020018061562c603b913960400191505060405180910390fd5b600b55565b600a819055614686336146806000611e96565b836143f8565b50565b60008160008151811061469857fe5b6020026020010151136146dc5760405162461bcd60e51b81526004018080602001828103825260298152602001806158496029913960400191505060405180910390fd5b60015b8151811015611f3c578181815181106146f457fe5b6020026020010151600014614750576040805162461bcd60e51b815260206004820181905260248201527f546f6b656e20636f6e736572766174696f6e20646f6573206e6f7420686f6c64604482015290519081900360640190fd5b6001016146df565b6006805463ffffffff191663ffffffff871617905560005b845181101561486d576006600101604051806060016040528087848151811061479557fe5b60200260200101516001600160a01b031681526020018584815181106147b757fe5b60200260200101516001600160801b031681526020018684815181106147d957fe5b60209081029190910181015161ffff908116909252835460018082018655600095865294829020845160029092020180546001600160a01b0319166001600160a01b039092169190911781559083015190840180546040909401516001600160801b03199094166001600160801b039092169190911761ffff60801b1916600160801b939092169290920217905501614770565b5080516148819060089060208401906154ba565b5050600980546001600160a01b0319163317905550505050565b6001600160a01b038083166000908152602081815260408083209385168352929052206002015463ffffffff1680158015906148e357506148da612d4f565b63ffffffff1681105b156124c7576001600160a01b038381166000908152602081815260408083209386168352929052206001810154905461491b91614207565b6001600160a01b0393841660009081526020818152604080832095909616825293909352928220928355506001820155600201805463ffffffff19169055565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526149b590859061518e565b50505050565b60008183106149ca5781612853565b5090919050565b604080516001600160601b0319606086901b166020820152815180820360140181526034820183526054808301869052835180840390910181526074909201909252614a2490829063ffffffff6132e616565b82516040805160f09290921b6001600160f01b03191660208301528051600281840301815260229092019052909150614a5e9082906132e6565b9050614aa18260200151604051602001808261ffff1661ffff1660f01b8152600201915050604051602081830303815290604052826132e690919063ffffffff16565b9050614ae88260400151604051602001808263ffffffff1663ffffffff1660e01b8152600401915050604051602081830303815290604052826132e690919063ffffffff16565b9050614b2f8260600151604051602001808263ffffffff1663ffffffff1660e01b8152600401915050604051602081830303815290604052826132e690919063ffffffff16565b9050614b7c826080015160405160200180826001600160801b03166001600160801b031660801b8152601001915050604051602081830303815290604052826132e690919063ffffffff16565b9050614bc98260a0015160405160200180826001600160801b03166001600160801b031660801b8152601001915050604051602081830303815290604052826132e690919063ffffffff16565b9050612d36614bd78361406c565b6040805160809290921b6001600160801b0319166020830152805160108184030181526030909201905282906132e6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124c790849061518e565b6000620100008210614c9d5760405162461bcd60e51b81526004018080602001828103825260268152602001806155c06026913960400191505060405180910390fd5b5090565b60006001614cad612d4f565b60065463ffffffff908116929091031614905090565b614ccd838361489b565b6001600160a01b0380841660009081526020818152604080832093861683529290522054614d01908263ffffffff61420716565b6001600160a01b0393841660009081526020818152604080832095909616825293909352929091209190915550565b6001600160a01b03831660009081526004602052604090208054614d5d919061ffff851690811061428e57fe5b156124c757614396614391826001600160801b031660046000876001600160a01b03166001600160a01b031681526020019081526020016000208561ffff1681548110614da657fe5b6000918252602090912060029091020160010154600160801b90046001600160801b0316906145e2565b614dda838361489b565b6001600160a01b0380841660009081526020818152604080832093861683529290522054614d01908263ffffffff6145e216565b6000612d366143916001600160801b03808516906141df906103e8906138de906103e79084908c8116908c1663ffffffff61407b16565b600061ffff8316614e5857506000612146565b8151600090600019015b818110614ede57600060028383010490508561ffff16858281518110614e8457fe5b602002602001015161ffff161415614ea3576001019250612146915050565b8561ffff16858281518110614eb457fe5b602002602001015161ffff161015614ed157806001019250614ed8565b6001810391505b50614e62565b6040805162461bcd60e51b815260206004820152601c60248201527f5072696365206e6f742070726f766964656420666f7220746f6b656e00000000604482015290519081900360640190fd5b6000818303818312801590614f405750838113155b80614f555750600083128015614f5557508381135b6128535760405162461bcd60e51b81526004018080602001828103825260248152602001806158966024913960400191505060405180910390fd5b6000828201818312801590614fa55750838112155b80614fba5750600083128015614fba57508381125b6128535760405162461bcd60e51b815260040180806020018281038252602181526020018061568e6021913960400191505060405180910390fd5b600061285383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615346565b600061285383836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506153ab565b60006000196001600160801b031682608001516001600160801b03161415801561214657505060a001516001600160801b03908116141590565b6000600160801b8210614c9d5760405162461bcd60e51b81526004018080602001828103825260278152602001806156676027913960400191505060405180910390fd5b600081848411156151865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561514b578181015183820152602001615133565b50505050905090810190601f1680156151785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6151a0826001600160a01b031661540d565b6151f1576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061522f5780518252601f199092019160209182019101615210565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615291576040519150601f19603f3d011682016040523d82523d6000602084013e615296565b606091505b5091509150816152ed576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156149b55780806020019051602081101561530957600080fd5b50516149b55760405162461bcd60e51b815260040180806020018281038252602a8152602001806158ba602a913960400191505060405180910390fd5b600081836153955760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561514b578181015183820152602001615133565b5060008385816153a157fe5b0495945050505050565b600081836153fa5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561514b578181015183820152602001615133565b5082848161540457fe5b06949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612d36575050151592915050565b5080546000825560020290600052602060002090810190614686919061555f565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b82805482825590600052602060002090600f016010900481019282156155535791602002820160005b8382111561552357835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026154e3565b80156155515782816101000a81549061ffff0219169055600201602081600101049283019260010302615523565b505b50614c9d9291506155a0565b6112d291905b80821115614c9d5780546001600160a01b031916815560018101805471ffffffffffffffffffffffffffffffffffff19169055600201615565565b6112d291905b80821115614c9d57805461ffff191681556001016155a656fe53616665436173743a2076616c756520646f65736e27742066697420696e203136206269747362757920616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d536f6c7574696f6e2065786365656473204d41585f544f55434845445f4f52444552534e6577206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e53616665436173743a2076616c756520646f65736e27742066697420696e2031323820626974735369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77536f6c7574696f6e7320617265206e6f206c6f6e67657220616363657074656420666f7220746869732062617463685769746864726177206e6f7420706f737369626c6520666f7220746f6b656e20746861742069732074726164656420696e207468652063757272656e742061756374696f6e4174206c65617374206f6e65207072696365206c6f776572207468616e20414d4f554e545f4d494e494d554d4f72646572732063616e277420626520706c6163656420696e207468652070617374657865637574656453656c6c416d6f756e7420626967676572207468616e2073706563696669656420696e206f72646572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7770726963657320617265206e6f74206f72646572656420627920746f6b656e4964776974686472617720776173206e6f7420726567697374657265642070726576696f75736c79436c61696d6564206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e546f6b656e20636f6e736572766174696f6e2061742030206d75737420626520706f7369746976652e73656c6c20616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564526571756573742063616e6e6f74206265206d61646520696e207468652070617374a265627a7a723058202f0b1eee434c5ba5c6b479e1151d5185f81bebb79cb7370deecb2cdc6ce9ae2664736f6c634300050a0032",
  "sourceMap": "753:38761:0:-;;;5763:632;8:9:-1;5:2;;;30:1;27;20:12;5:2;5763:632:0;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5763:632:0;;;;;;;6016:16;;;;:13;:16;;;:26;;-1:-1:-1;;;;;;6016:26:0;6035:7;6016:26;;;6052:10;:22;;;6084:8;:30;;-1:-1:-1;;;;;6084:30:0;;;;;;;-1:-1:-1;;;;;;6084:30:0;;;;;;;;;;;5763:632;6268:44;;;;;6293:4;6268:44;;;;-1:-1:-1;;6268:44:0;;;;;;5763:632;;;;6268:8;;;;;;:16;;:44;;;;;5763:632;;6268:44;;;;;;;;:8;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;6268:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6268:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6322:19:0;;-1:-1:-1;6331:9:0;-1:-1:-1;;;;;6322:8:0;:19;:::i;:::-;5763:632;;753:38761;;6687:468;6757:10;;6745:9;;;;:22;6737:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6804:9;;;;:13;6800:177;;6908:8;;:58;;;;;;6925:10;6908:58;;;;1318:8;6908:58;;;;;;:8;;;;-1:-1:-1;;;;;6908:8:0;;:16;;:58;;;;;-1:-1:-1;;6908:58:0;;;;;;;;-1:-1:-1;6908:8:0;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;6908:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6908:58:0;;;;6800:177;7036:9;;6994:59;;;;;;7018:16;6994:59;;;;7036:9;;;;6994:59;;;;-1:-1:-1;;;;;6994:59:0;;;;;;;:16;;:23;;:59;;;;;;;;;;;;;;:16;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;6994:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6994:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6994:59:0;6986:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7117:9;;7097:30;;;-1:-1:-1;;;;;7097:30:0;;;;7117:9;;;;7097:30;;;;;;;;;;;;;;;;-1:-1:-1;7137:9:0;:11;;;;;;;;;-1:-1:-1;;7137:11:0;;;;;;6687:468::o;753:38761::-;;;;;;;",
  "deployedSourceMap": "753:38761:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;753:38761:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1787:53;;;:::i;:::-;;;;;;;;;;;;;;;;6732:177:3;;;:::i;22911:506:0:-;;;:::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;22911:506:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7722:303;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;7722:303:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7722:303:0;;;;;;;;;;;;:::i;13419:4673::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;13419:4673:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;13419:4673:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13419:4673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;13419:4673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13419:4673:0;;;;;;;;-1:-1:-1;13419:4673:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;13419:4673:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13419:4673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;13419:4673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13419:4673:0;;;;;;;;-1:-1:-1;13419:4673:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;13419:4673:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13419:4673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;13419:4673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13419:4673:0;;;;;;;;-1:-1:-1;13419:4673:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;13419:4673:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13419:4673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;13419:4673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13419:4673:0;;;;;;;;-1:-1:-1;13419:4673:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;13419:4673:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13419:4673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;13419:4673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13419:4673:0;;-1:-1:-1;13419:4673:0;;-1:-1:-1;;;;;13419:4673:0:i;18618:145::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18618:145:0;;;;:::i;:::-;;;;-1:-1:-1;;;;;18618:145:0;;;;;;;;;;;;;;2918:137:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2918:137:3;;;;;;;;:::i;:::-;;1263:63:0;;;:::i;20248:650::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20248:650:0;;-1:-1:-1;;;;;20248:650:0;;;;;;;;:::i;2085:566:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2085:566:3;;;;;;;;:::i;9963:578:0:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9963:578:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;9963:578:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9963:578:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;9963:578:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;9963:578:0;;-1:-1:-1;9963:578:0;;-1:-1:-1;;;;;9963:578:0:i;1420:46::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1420:46:0;;;;;;;;;;;;;;2482:24;;;:::i;8794:669::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8794:669:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8794:669:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8794:669:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8794:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8794:669:0;;;;;;;;-1:-1:-1;8794:669:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;8794:669:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8794:669:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8794:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8794:669:0;;;;;;;;-1:-1:-1;8794:669:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;8794:669:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8794:669:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8794:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8794:669:0;;;;;;;;-1:-1:-1;8794:669:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;8794:669:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8794:669:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8794:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8794:669:0;;;;;;;;-1:-1:-1;8794:669:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;8794:669:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8794:669:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8794:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8794:669:0;;;;;;;;-1:-1:-1;8794:669:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;8794:669:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8794:669:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8794:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8794:669:0;;-1:-1:-1;8794:669:0;;-1:-1:-1;;;;;8794:669:0: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;8794:669:0;;;;;;;;;;;;;;;;;2725:47;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2725:47:0;;;;:::i;21107:162::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21107:162:0;-1:-1:-1;;;;;21107:162:0;;:::i;2611:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2611:41:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2611:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1563:60;;;:::i;2385:23::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;972:71:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;972:71:3;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21758:1004:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21758:1004:0;;;;;;;;;;;;;;;;;:::i;18970:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18970:134:0;-1:-1:-1;;;;;18970:134:0;;:::i;:::-;;;;;;;;;;;;;;;;;;2855:34;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;2855:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5597:253:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5597:253:3;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;11393:474:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;11393:474:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;11393:474:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11393:474:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11393:474:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11393:474:0;;;;;;;;-1:-1:-1;11393:474:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;11393:474:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11393:474:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11393:474:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11393:474:0;;;;;;;;-1:-1:-1;11393:474:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;11393:474:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11393:474:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11393:474:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11393:474:0;;;;;;;;-1:-1:-1;11393:474:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;11393:474:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11393:474:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11393:474:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11393:474:0;;;;;;;;-1:-1:-1;11393:474:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;11393:474:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11393:474:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11393:474:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11393:474:0;;;;;;;;-1:-1:-1;11393:474:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;11393:474:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11393:474:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11393:474:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11393:474:0;;;;;;;;-1:-1:-1;11393:474:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;11393:474:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11393:474:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11393:474:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11393:474:0;;-1:-1:-1;11393:474:0;;-1:-1:-1;;;;;11393:474:0:i;6081:258:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6081:258:3;;;;;;;;;;:::i;23423:174:0:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23423:174:0;;;;:::i;6687:468::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6687:468:0;-1:-1:-1;;;;;6687:468:0;;:::i;7107:561:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7107:561:3;;;;;;;;;;:::i;1958:46:0:-;;;:::i;2091:59::-;;;:::i;766:39:3:-;;;:::i;6445:160::-;;;:::i;19450:475:0:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19450:475:0;;;;;;;;;;;;;;;;;:::i;18295:142::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18295:142:0;-1:-1:-1;;;;;18295:142:0;;:::i;3388:604:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3388:604:3;;-1:-1:-1;;;;;3388:604:3;;;;;;;;;;;;;:::i;7939:269::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7939:269:3;;;;;;;;;;:::i;2282:25:0:-;;;:::i;4432:896:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4432:896:3;;;;;;;;;;:::i;1162:47:0:-;;;:::i;23793:237::-;;;:::i;1787:53::-;1837:3;1787:53;:::o;6732:177:3:-;802:3;6885;:16;;;6871:31;;6732:177;;:::o;22911:506:0:-;22997:13;;22960:21;;-1:-1:-1;;;22997:13:0;;-1:-1:-1;;;;;22997:13:0;:17;22993:393;;23030:12;23045:8;:14;;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23045:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23045:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23045:16:0;;-1:-1:-1;23075:9:0;23106:270;23114:4;23106:270;;23149:43;23165:26;23186:4;23165:20;:26::i;:::-;23149:8;;:43;:15;:43;:::i;:::-;23222:13;;23138:54;;-1:-1:-1;;;;;;23214:21:0;;;23222:13;;23214:21;23210:152;;;-1:-1:-1;23266:4:0;23210:152;;;23324:19;;;-1:-1:-1;;;23324:19:0;;:8;:19;;;;-1:-1:-1;;;;;23324:19:0;;;;;;;;:13;;;;:19;;;;;;;;;;;;;;:13;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;23324:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23324:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23324:19:0;;-1:-1:-1;23210:152:0;23106:270;;;22993:393;;22911:506;:::o;7722:303::-;7897:7;7923:95;7942:8;7952:9;7963:19;:17;:19::i;:::-;7984:10;7996:9;8007:10;7923:18;:95::i;:::-;7916:102;;;7722:303;-1:-1:-1;;;;;;7722:303:0:o;13419:4673::-;13707:7;13734:27;13753:7;13734:18;:27::i;:::-;13726:87;;;;-1:-1:-1;;;13726:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13844:59;13881:21;13844:36;:59::i;:::-;13823:169;;;;-1:-1:-1;;;13823:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14010:29;14032:6;14010:21;:29::i;:::-;14002:86;;;;-1:-1:-1;;;14002:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14106:16;14123:1;14106:19;;;;;;;;;;;;;;:24;;14129:1;14106:24;;14098:63;;;;;-1:-1:-1;;;14098:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14179:37;:16;:35;:37::i;:::-;14171:83;;;;-1:-1:-1;;;14171:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1207:2;14272:6;:13;:35;;14264:83;;;;-1:-1:-1;;;14264:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14671:28;14702:25;:23;:25::i;:::-;14671:56;;14737:21;:19;:21::i;:::-;14768:45;14788:6;14796:16;14768:19;:45::i;:::-;14823:28;14830:21;;14823:28;:::i;:::-;14861:33;14897:40;14920:16;14897:22;:40::i;:::-;14861:76;-1:-1:-1;14947:15:0;;14976:1726;15000:6;:13;14996:1;:17;14976:1726;;;15034:18;;:::i;:::-;15055:6;:17;15062:6;15069:1;15062:9;;;;;;;;;;;;;;-1:-1:-1;;;;;15055:17:0;-1:-1:-1;;;;;15055:17:0;;;;;;;;;;;;15073:8;15082:1;15073:11;;;;;;;;;;;;;;15055:30;;;;;;;;;;;;;;;;;;;15034:51;;;;;;;;15055:30;;;;;;;15034:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15034:51:0;;;;;;;;;;;-1:-1:-1;;;15034:51:0;;;;;;;;;-1:-1:-1;;;;;;;;15034:51:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15034:51:0;;;;;;;;;;-1:-1:-1;15107:34:0;15034:51;15133:7;15107:18;:34::i;:::-;15099:63;;;;;-1:-1:-1;;;15099:63:0;;;;;;;;;;;;-1:-1:-1;;;15099:63:0;;;;;;;;;;;;;;;15177:25;15204:26;15234:38;15251:10;15262:1;15251:13;;;;;;;;;;;;;;15266:5;15234:16;:38::i;:::-;15176:96;;-1:-1:-1;15176:96:0;-1:-1:-1;1461:5:0;-1:-1:-1;;;;;15294:35:0;;;;15286:83;;;;-1:-1:-1;;;15286:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1461:5;-1:-1:-1;;;;;15391:36:0;;;;15383:85;;;;-1:-1:-1;;;15383:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15541:14;;15573:15;;;;15482:225;;:17;;15606:16;15640:17;15675:18;15482:225;:41;:225;:::i;:::-;15758:18;-1:-1:-1;;;;;15729:47:0;:25;15748:5;15729:18;:25::i;:::-;-1:-1:-1;;;;;15729:47:0;;;15721:109;;;;-1:-1:-1;;;15721:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16120:22;;;;16098:45;;-1:-1:-1;;;;;16098:21:0;;;;:45;;:21;:45;:::i;:::-;16073:20;;;;16050:44;;-1:-1:-1;;;;;16050:22:0;;;;:44;;:22;:44;:::i;:::-;:93;;16025:177;;;;;-1:-1:-1;;;16025:177:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16320:54;16332:41;16348:17;16367:5;16332:15;:41::i;:::-;16320:7;;:54;:11;:54;:::i;:::-;16310:64;;16388;16409:6;16416:1;16409:9;;;;;;;;;;;;;;16420:8;16429:1;16420:11;;;;;;;;;;;;;;16433:18;16388:20;:64::i;:::-;16466:105;16505:6;16512:1;16505:9;;;;;;;;;;;;;;16516:35;16536:5;:14;;;16516:19;:35::i;:::-;16553:17;-1:-1:-1;;;;;16466:105:0;:38;:105::i;:::-;16620:5;:15;;;16590:101;;16607:8;16616:1;16607:11;;;;;;;;;;;;;;16590:101;;16596:6;16603:1;16596:9;;;;;;;;;;;;;;-1:-1:-1;;;;;16590:101:0;;16637:5;:14;;;16653:18;16673:17;16590:101;;;;;;;;;;;;;-1:-1:-1;;;;;16590:101:0;-1:-1:-1;;;;;16590:101:0;;;;;;-1:-1:-1;;;;;16590:101:0;-1:-1:-1;;;;;16590:101:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;15015:3:0;;14976:1726;;;-1:-1:-1;16793:9:0;16788:303;16812:6;:13;16808:1;:17;16788:303;;;16846:18;;:::i;:::-;16867:6;:17;16874:6;16881:1;16874:9;;;;;;;;;;;;;;-1:-1:-1;;;;;16867:17:0;-1:-1:-1;;;;;16867:17:0;;;;;;;;;;;;16885:8;16894:1;16885:11;;;;;;;;;;;;;;16867:30;;;;;;;;;;;;;;;;;;16846:51;;;;;;;;16867:30;;;;;;;16846:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16846:51:0;;;;;;;;;;;-1:-1:-1;;;16846:51:0;;;;;;;;;-1:-1:-1;;;;;;;;16846:51:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16846:51:0;;;;;;;16961:13;;16846:51;;-1:-1:-1;16944:38:0;;16961:10;;16972:1;;16961:13;;;;;;;;;;;;16976:5;16944:16;:38::i;:::-;16911:71;;;16996:84;17012:6;17019:1;17012:9;;;;;;;;;;;;;;17023:36;17043:5;:15;;;17023:19;:36::i;:::-;17061:18;-1:-1:-1;;;;;16996:84:0;:15;:84::i;:::-;-1:-1:-1;;16827:3:0;;16788:303;;;-1:-1:-1;17100:26:0;;17140:183;17164:6;:13;17160:1;:17;17140:183;;;17219:93;17242:69;17269:6;:17;17276:6;17283:1;17276:9;;;;;;;;;;;;;;-1:-1:-1;;;;;17269:17:0;-1:-1:-1;;;;;17269:17:0;;;;;;;;;;;;17287:8;17296:1;17287:11;;;;;;;;;;;;;;17269:30;;;;;;;;;;;;;;;;;;;17242:69;;;;;;;;17269:30;;;;;;;17242:69;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17242:69:0;;;;;;;;;;;-1:-1:-1;;;17242:69:0;;;;;;;;;-1:-1:-1;;;;;;;;17242:69:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17242:69:0;;;;;;;;;17301:9;;:6;;17308:1;;17301:9;;;;;;;;;;;;17242:26;:69::i;:::-;17219:18;;:93;:22;:93;:::i;:::-;17198:114;-1:-1:-1;17179:3:0;;17140:183;;;;17332:17;17401:1;17360:37;:17;:35;:37::i;:::-;17352:50;;;;;;;-1:-1:-1;17513:22:0;17538:46;17565:18;17538:22;:7;17352:50;17538:22;:11;:22;:::i;:::-;:26;:46;:26;:46;:::i;:::-;17513:71;;17594:46;17625:14;17594:30;:46::i;:::-;17650:41;17681:9;17650:30;:41::i;:::-;17701:42;:17;:40;:42::i;:::-;17753:71;17768:7;17777:6;17785:8;17795:10;17807:16;17753:14;:71::i;:::-;17872:10;-1:-1:-1;;;;;17840:212:0;;17896:7;17917:18;17949:9;17972:20;18006:6;18026:16;17840:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17840:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17840:212:0;;;;;;;;;;;;;;;;;;;;;;;18070:14;13419:4673;-1:-1:-1;;;;;;;;;;;;;13419:4673:0:o;18618:145::-;18705:51;;;-1:-1:-1;;;18705:51:0;;18735:16;18705:51;;;;;;;;;;;;;18679:7;;18705:16;;:29;;:51;;;;;;;;;;;;;;;:16;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;18705:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18705:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18705:51:0;;-1:-1:-1;18618:145:0;;;;:::o;2918:137:3:-;2991:57;3013:5;3020:6;3028:19;:17;:19::i;:::-;2991:21;:57::i;:::-;2918:137;;:::o;1263:63:0:-;1318:8;1263:63;:::o;20248:650::-;20373:13;;20339:18;;-1:-1:-1;;;20373:13:0;;-1:-1:-1;;;;;20373:13:0;20369:61;;20407:12;;20369:61;20439:12;20483:16;-1:-1:-1;;;;;20513:21:0;;20509:160;;20560:16;;;-1:-1:-1;;;20560:16:0;;:8;:16;;;;;;:14;;;;:16;;;;;;;;;;;;;;:14;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;20560:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20560:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20560:16:0;20611:25;;;-1:-1:-1;;;;;;20611:25:0;;;;;20560:16;20611:25;;;;;26:21:-1;;;20611:25:0;22:32:-1;6:49;;20611:25:0;;;;;;;20560:16;;-1:-1:-1;20598:39:0;;:5;;:39;:12;:39;:::i;:::-;20590:47;-1:-1:-1;20651:7:0;;;;;20509:160;20693:8;20685:16;;:5;:16;;;:44;;;;-1:-1:-1;20716:13:0;;-1:-1:-1;;;;;20705:24:0;;;20716:13;;20705:24;;20685:44;20678:192;;;20755:22;;;-1:-1:-1;;;20755:22:0;;:8;:22;;;;-1:-1:-1;;;;;20755:22:0;;;;;;;;:13;;;;:22;;;;;;;;;;;;;;:13;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;20755:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20755:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20755:22:0;20812:25;;;-1:-1:-1;;;;;;20812:25:0;;;;;20755:22;20812:25;;;;;26:21:-1;;;20812:25:0;22:32:-1;6:49;;20812:25:0;;;;;;;20755:22;;-1:-1:-1;20799:39:0;;:5;;:39;:12;:39;:::i;:::-;20791:47;-1:-1:-1;20852:7:0;;;;;20678:192;;;-1:-1:-1;;20248:650:0;;;;;:::o;2085:566:3:-;2150:40;2172:10;2184:5;2150:21;:40::i;:::-;2200:76;2234:5;2242:10;2262:4;2269:6;2200:26;:76::i;:::-;2411:10;2397:13;:25;;;;;;;;;;;-1:-1:-1;;;;;2397:32:3;;;;;;;;;:48;;:55;:89;;2470:6;2397:89;:59;:89;:::i;:::-;2353:10;2339:13;:25;;;;;;;;;;;-1:-1:-1;;;;;2339:32:3;;;;;;;;;:48;;:147;2555:19;:17;:19::i;:::-;2510:10;2496:13;:25;;;;;;;;;;;-1:-1:-1;;;;;2496:32:3;;;;;;;;;;:56;;:78;;-1:-1:-1;;2496:78:3;;;;;;;;;;;;;2589:55;2616:6;2624:19;:17;:19::i;:::-;2589:55;;;;;;;;;;;;;;;;;;;;;;;2085:566;;:::o;9963:578:0:-;10028:25;10078:1;10056:19;:17;:19::i;:::-;:23;;-1:-1:-1;10094:8:0;10089:446;10112:8;:15;10108:1;:19;;;10089:446;;;10179:10;10172:18;;;;:6;:18;;;;;10191:11;;10153:71;;10172:18;10191:8;;:11;;;;;;;;;;;;;;;;10172:31;;;;;;;;;;;;;;;;;;;10153:71;;;;;;;;10172:31;;;;;;;10153:71;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10153:71:0;;;;;;;;;;;-1:-1:-1;;;10153:71:0;;;;;;;;;-1:-1:-1;;;;;;;;10153:71:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10153:71:0;;;;;;;;;10205:18;10153;:71::i;:::-;10148:377;;10258:10;10251:18;;;;:6;:18;;;;;10270:11;;:8;;:11;;;;;;;;;;;;;;;;10251:31;;;;;;;;;;;;;;;;;;;;;;10244:38;;-1:-1:-1;;;;;;10244:38:0;;;;;;10331:11;;10319:10;;10305:38;;10331:8;;10244:38;10331:11;;;;;;;;;;;;;;;10305:38;;;;;;;;;;;;;;;;;;;;;;10148:377;;;10389:10;10382:18;;;;:6;:18;;;;;10401:11;;10427:18;;10382;10401:8;;:11;;;;;;;;;;;;;;;;10382:31;;;;;;;;;;;;;;;;;;;;:42;;;:63;;;;;;;;;;;;;;;;;;10486:10;-1:-1:-1;;;;;10468:42:0;;10498:8;10507:1;10498:11;;;;;;;;;;;;;;;;10468:42;;;;;;;;;;;;;;;;;;;;;;10148:377;10129:3;;10089:446;;;;9963:578;;:::o;1420:46::-;1461:5;1420:46;:::o;2482:24::-;;;;;;-1:-1:-1;;;;;2482:24:0;;:::o;8794:669::-;9065:24;9125:9;:16;9112:30;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;9112:30:0;-1:-1:-1;9101:41:0;-1:-1:-1;9157:9:0;9152:305;9176:9;:16;9172:1;:20;9152:305;;;9227:219;9263:9;9273:1;9263:12;;;;;;;;;;;;;;9293:10;9304:1;9293:13;;;;;;;;;;;;;;9324:10;9335:1;9324:13;;;;;;;;;;;;;;9355:11;9367:1;9355:14;;;;;;;;;;;;;;9387:10;9398:1;9387:13;;;;;;;;;;;;;;9418:11;9430:1;9418:14;;;;;;;;;;;;;;9227:18;:219::i;:::-;9213:8;9222:1;9213:11;;;;;;;;:233;;;;:11;;;;;;;;;;;:233;9194:3;;9152:305;;;;8794:669;;;;;;;;:::o;2725:47::-;;;;;;;;;;;;-1:-1:-1;;;;;2725:47:0;;:::o;21107:162::-;21172:21;21212:50;21242:4;21248:1;-1:-1:-1;;21212:29:0;:50::i;2611:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2611:41:0;;;;;-1:-1:-1;2611:41:0;-1:-1:-1;;;2611:41:0;;;;;-1:-1:-1;;;2611:41:0;;;;;;-1:-1:-1;;;;;;;;2611:41:0;;;;;;;;;;-1:-1:-1;;;2611:41:0;;;;:::o;1563:60::-;-1:-1:-1;;1563:60:0;:::o;2385:23::-;;;;;;:::o;972:71:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21758:1004:0:-;21954:13;;21917:21;;-1:-1:-1;;;21954:13:0;;-1:-1:-1;;;;;21954:13:0;21950:64;;21988:15;;21950:64;22046:22;22100:16;-1:-1:-1;;;;;22130:27:0;;22126:88;;22187:16;;;-1:-1:-1;;;22187:16:0;;:8;:16;;;;;;:14;;;;:16;;;;;;;;;;;;;;:14;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;22187:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22187:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22187:16:0;;-1:-1:-1;22126:88:0;22230:15;;:58;;;;2147:3;;22230:47;:58;22223:533;;;22315:250;22348:203;22399:11;22432:13;2147:3;-1:-1:-1;;;;;22485:47:0;:8;:15;:47;;;;;;22467:8;:66;22348:29;:203::i;22315:250::-;22598:13;;22304:261;;-1:-1:-1;;;;;;22583:28:0;;;22598:13;;22583:28;22579:82;;;-1:-1:-1;22631:15:0;;-1:-1:-1;22631:15:0;22579:82;22719:26;;;-1:-1:-1;;;22719:26:0;;:8;:26;;;;-1:-1:-1;;;;;22719:26:0;;;;;;;;22690:1;;-1:-1:-1;22719:13:0;;;;:26;;;;;;;;;;;;;;:13;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;22719:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22719:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22719:26:0;;-1:-1:-1;22223:533:0;;;21758:1004;;;;;;;;:::o;18970:134::-;19046:51;;;-1:-1:-1;;;19046:51:0;;19074:16;19046:51;;;;-1:-1:-1;;;;;19046:51:0;;;;;;;;19023:4;;19046:16;;:27;;:51;;;;;;;;;;;;;;;:16;:51;;;5:2:-1;;;;30:1;27;20:12;2855:34:0;;;;;;;;;;;;;;-1:-1:-1;;;;;2855:34:0;;;;;:::o;5597:253:3:-;5674:7;5683:6;5701:33;;:::i;:::-;-1:-1:-1;;;;;;;;5737:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;;;;5701:78;;;;;;;;5737:42;;;5701:78;;;;;;;;;;;;;;;;;;;5597:253::o;11393:474:0:-;11696:15;11723:27;11736:13;11723:12;:27::i;:::-;11767:93;11788:9;11799:10;11811;11823:11;11836:10;11848:11;11767:20;:93::i;:::-;11760:100;11393:474;-1:-1:-1;;;;;;;;11393:474:0:o;6081:258:3:-;6159:7;6168:6;6186:34;;:::i;:::-;-1:-1:-1;;;;;;;;6223:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;;;;6186:80;;;;;;;;6223:43;;;6186:80;;;;;;;;;;;;;;;;;;;6081:258::o;23423:174:0:-;23488:4;23544:1;23522:19;:17;:19::i;:::-;:23;23511:34;;:7;:34;;;:79;;;;;23581:9;23549:28;:26;:28::i;:::-;:41;;;23423:174;-1:-1:-1;;23423:174:0:o;6687:468::-;6757:10;;6745:9;;;;:22;6737:53;;;;;-1:-1:-1;;;6737:53:0;;;;;;;;;;;;-1:-1:-1;;;6737:53:0;;;;;;;;;;;;;;;6804:9;;;;:13;6800:177;;6908:8;;:58;;;-1:-1:-1;;;6908:58:0;;6925:10;6908:58;;;;1318:8;6908:58;;;;;;:8;;;;-1:-1:-1;;;;;6908:8:0;;:16;;:58;;;;;-1:-1:-1;;6908:58:0;;;;;;;;-1:-1:-1;6908:8:0;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;6908:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6908:58:0;;;;6800:177;7036:9;;6994:59;;;-1:-1:-1;;;6994:59:0;;7018:16;6994:59;;;;7036:9;;;;6994:59;;;;-1:-1:-1;;;;;6994:59:0;;;;;;;:16;;:23;;:59;;;;;;;;;;;;;;:16;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;6994:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6994:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6994:59:0;6986:96;;;;;-1:-1:-1;;;6986:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7117:9;;7097:30;;;-1:-1:-1;;;;;7097:30:0;;;;7117:9;;;;7097:30;;;;;;;;;;;;;;;;-1:-1:-1;7137:9:0;:11;;;;;;;;;-1:-1:-1;;7137:11:0;;;;;;6687:468::o;7107:561:3:-;-1:-1:-1;;;;;7214:19:3;;;7177:7;7214:19;;;;;;;;;;;:26;;;;;;;;;;;:34;7315:19;:17;:19::i;:::-;-1:-1:-1;;;;;7262:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:50;;;:72;;;;:50;;:72;7258:175;;;-1:-1:-1;;;;;7372:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:42;;:49;7360:62;;:7;;:62;:11;:62;:::i;:::-;7350:72;;7258:175;7500:19;:17;:19::i;:::-;-1:-1:-1;;;;;7446:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:51;;;:73;;;;:51;;:73;7442:196;;;-1:-1:-1;;;;;7566:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:43;;:50;7545:82;;7557:69;;7618:7;7557:8;:69::i;:::-;7545:7;;:82;:11;:82;:::i;:::-;7535:92;7654:7;-1:-1:-1;;;;7107:561:3:o;1958:46:0:-;2000:4;1958:46;:::o;2091:59::-;2147:3;2091:59;:::o;766:39:3:-;802:3;766:39;:::o;6445:160::-;802:3;6581;:16;;6445:160::o;19450:475:0:-;19586:21;19635:6;19619:275;-1:-1:-1;;;;;19656:12:0;;;;;;:6;:12;;;;;:19;19647:48;;;19677:17;;;19647:48;:8;:48::i;:::-;19643:1;:52;;;19619:275;;;19727:156;19760:109;19781:4;19787:64;19798:4;19804:46;19824:6;:12;19831:4;-1:-1:-1;;;;;19824:12:0;-1:-1:-1;;;;;19824:12:0;;;;;;;;;;;;19837:1;19824:15;;;;;;;;;;;;;;;;;;;;;;;:25;;;;;;19804:19;:46::i;:::-;19787:10;:64::i;:::-;-1:-1:-1;;;;;19853:12:0;;;;;;:6;:12;;;;;:15;;;;;;;;;;;;;;;;;;;;;19760:109;;;;;;;;19853:15;;;;;;;19760:109;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19760:109:0;;;;;;;;;;;-1:-1:-1;;;19760:109:0;;;;;;;;;-1:-1:-1;;;;;;;;19760:109:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19760:109:0;;;;;;;;;:20;:109::i;:::-;19727:8;;:156;:15;:156;:::i;:::-;19716:167;-1:-1:-1;19697:3:0;;19619:275;;;-1:-1:-1;19450:475:0;;;;;:::o;18295:142::-;18384:46;;;-1:-1:-1;;;18384:46:0;;18407:16;18384:46;;;;-1:-1:-1;;;;;18384:46:0;;;;;;;;18359:6;;18384:16;;:22;;:46;;;;;;;;;;;;;;;:16;:46;;;5:2:-1;;;;30:1;27;20:12;3388:604:3;3628:42;3652:10;3664:5;3628:23;:42::i;:::-;3624:100;;;3686:27;3695:10;3707:5;3686:8;:27::i;:::-;3752:19;:17;:19::i;:::-;3741:30;;:7;:30;;;;3733:77;;;;-1:-1:-1;;;3733:77:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3872:47;;;;;;;;;;;;;;;;;;;;;;3834:10;-1:-1:-1;3820:25:3;;;;;;;;;-1:-1:-1;;;;;3820:32:3;;;;;;;;;;;;:99;;:49;;;:99;;;;;;;;;-1:-1:-1;;3820:99:3;;;;;;;;;;;;3934:51;;;;;;;;;;;;;;3820:32;;3934:51;;;;;;;;;3388:604;;;:::o;7939:269::-;8022:4;8111:19;:17;:19::i;:::-;-1:-1:-1;;;;;8057:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:51;;;:73;;;;:51;;:73;:144;;;;-1:-1:-1;;;;;;;8146:19:3;;;8200:1;8146:19;;;;;;;;;;;:26;;;;;;;;;;;:51;;;;;:55;;;7939:269::o;2282:25:0:-;;;;:::o;4432:896:3:-;4496:34;4518:4;4524:5;4496:21;:34::i;:::-;4677:19;:17;:19::i;:::-;-1:-1:-1;;;;;4623:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:51;;;:73;;;;:51;;:73;4602:158;;;;-1:-1:-1;;;4602:158:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4824:19;:17;:19::i;:::-;-1:-1:-1;;;;;4791:23:3;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;;:52;;;;:30;;:52;4770:168;;;;-1:-1:-1;;;4770:168:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4974:19:3;;;4948:14;4974:19;;;;;;;;;;;:26;;;;;;;;;;;:34;;5010:43;;;;:50;4965:96;;4974:34;4965:8;:96::i;:::-;-1:-1:-1;;;;;5109:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:34;4948:113;;-1:-1:-1;5109:46:3;;4948:113;5109:46;:38;:46;:::i;:::-;-1:-1:-1;;;;;5072:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;;;:83;;;5172:43;;;5165:50;;;;;-1:-1:-1;;5165:50:3;;;5226:51;5072:26;:19;5270:6;5226:22;:51::i;:::-;5307:5;-1:-1:-1;;;;;5292:29:3;5301:4;-1:-1:-1;;;;;5292:29:3;;5314:6;5292:29;;;;;;;;;;;;;;;;;;4432:896;;;:::o;1162:47:0:-;1207:2;1162:47;:::o;23793:237::-;23850:7;23921:1;23899:19;:17;:19::i;:::-;23873:14;:22;:49;:22;;;23899:23;;;;23873:49;;23869:155;;;-1:-1:-1;23945:29:0;;23938:36;;23869:155;-1:-1:-1;24012:1:0;24005:8;;393:2955:33;527:12;555:22;760:4;754:11;741:24;;917:9;911:16;958:6;947:9;940:25;1200:4;1189:9;1185:20;1349:6;1345:2;1341:15;1543:4;1532:9;1528:20;1370:525;1570:3;1566:2;1563:11;1370:525;;;1871:9;;1860:21;;1677:4;1669:13;;;;1705;1370:525;;;-1:-1:-1;2106:17:33;;2166:16;;2154:29;;2136:48;;2106:17;-1:-1:-1;2328:3:33;-1:-1:-1;2465:15:33;;;2542:4;2526:21;;2494:221;2569:3;2565:2;2562:11;2494:221;;;2691:9;;2680:21;;2606:4;2598:13;;;;2634;2494:221;;;-1:-1:-1;3204:16:33;;3192:29;;;;3185:37;3176:47;;;;3248:2;3172:56;-1:-1:-1;;3153:151:33;3147:4;3140:165;-1:-1:-1;3332:9:33;-1:-1:-1;393:2955:33;;;;:::o;24077:1179:0:-;24313:50;;;-1:-1:-1;;;24313:50:0;;24336:16;24313:50;;;;;;;;;;;;;24287:6;;24313:16;;:22;;:50;;;;;;;;;;;;;;;:16;:50;;;5:2:-1;;;;30:1;27;20:12;5:2;24313:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24313:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24313:50:0;24305:87;;;;;-1:-1:-1;;;24305:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24410:51;;;-1:-1:-1;;;24410:51:0;;24433:16;24410:51;;;;;;;;;;;;;:16;;:22;;:51;;;;;;;;;;;;;;:16;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;24410:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24410:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24410:51:0;24402:89;;;;;-1:-1:-1;;;24402:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24521:9;24509:21;;:8;:21;;;;24501:62;;;;;-1:-1:-1;;;24501:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24594:19;:17;:19::i;:::-;24581:32;;:9;:32;;;;24573:79;;;;-1:-1:-1;;;24573:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24662:6;:18;24669:10;-1:-1:-1;;;;;24662:18:0;-1:-1:-1;;;;;24662:18:0;;;;;;;;;;;;24699:293;;;;;;;;24733:8;24699:293;;;;;;24770:9;24699:293;;;;;;24808:9;24699:293;;;;;;24847:10;24699:293;;;;;;24891:9;-1:-1:-1;;;;;24699:293:0;;;;;24936:10;-1:-1:-1;;;;;24699:293:0;;;;;24976:1;-1:-1:-1;;;;;24699:293:0;;;;24662:340;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;24662:340:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24662:340:0;;;;;-1:-1:-1;;;;;24662:340:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24662:340:0;;;;;-1:-1:-1;;;;;24662:340:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24662:340:0;;;;;-1:-1:-1;;;;;24662:340:0;;;;;;;;;25012:14;25029:42;25058:1;25030:6;:18;25037:10;-1:-1:-1;;;;;25030:18:0;-1:-1:-1;;;;;25030:18:0;;;;;;;;;;;;:25;;;;:29;25029:40;:42::i;:::-;25086:102;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25086:102:0;;;;;;;;;;;;;;;25012:59;;-1:-1:-1;25086:102:0;;;;;;;;25101:10;;25086:102;;;;;;;;;;25198:27;;;-1:-1:-1;;;25198:27:0;;:8;:27;;;;25214:10;25198:27;;;;;;:15;;;;:27;;;;;;;;;;;;;;:15;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;25198:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25198:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25242:7:0;;24077:1179;-1:-1:-1;;;;;;;;24077:1179:0:o;36915:229::-;37007:4;37077:59;37108:27;37077:26;:24;:26::i;:::-;:30;:59;:30;:59;:::i;:::-;37031:43;:14;1837:3;37031:43;:18;:43;:::i;:::-;:105;;36915:229;-1:-1:-1;;36915:229:0:o;39243:269::-;39322:4;;39338:147;39362:7;:14;39358:1;:18;39338:147;;;1461:5;-1:-1:-1;;;;;39401:27:0;:7;39409:1;39401:10;;;;;;;;;;;;;;-1:-1:-1;;;;;39401:27:0;;39397:78;;;39455:5;39448:12;;;;;39397:78;39378:3;;39338:147;;;-1:-1:-1;39501:4:0;;39243:269;-1:-1:-1;;39243:269:0:o;2764:303:6:-;2849:4;2882:1;2865:175;2889:16;:23;2885:1;:27;2865:175;;;2960:16;2981:1;2977;:5;2960:23;;;;;;;;;;;;;;2937:46;;:16;2954:1;2937:19;;;;;;;;;;;;;;:46;;;2933:97;;3010:5;3003:12;;;;;2933:97;2914:3;;2865:175;;25763:254:0;25815:7;25839:25;:23;:25::i;:::-;25834:159;;25880:8;;25912:24;;25880:57;;;-1:-1:-1;;;25880:57:0;;25905:4;25912:24;25880:57;;;;;;;;;;;:8;;;;-1:-1:-1;;;;;25880:8:0;;:16;;:57;;;;;-1:-1:-1;;25880:57:0;;;;;;;;-1:-1:-1;25880:8:0;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;25880:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25958:24:0;;;-1:-1:-1;25951:31:0;;-1:-1:-1;;25951:31:0;25834:159;-1:-1:-1;26009:1:0;25763:254;:::o;29566:1387::-;29619:25;:23;:25::i;:::-;29615:1332;;;29665:9;29660:450;29684:21;:28;29680:32;;29660:450;;;29737:13;29753:14;:21;;29775:1;29753:24;;;;;;;;;;;;;;;;;;;;:30;29818:21;:24;;-1:-1:-1;;;;;29753:30:0;;;;-1:-1:-1;29818:21:0;29840:1;;29818:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;29801:49;;29868:18;;:::i;:::-;-1:-1:-1;;;;;29889:13:0;;;;;;:6;:13;;;;;:22;;;;;;;;;;;;;;;;;;;;29868:43;;;;;;;;29889:22;;;;;;;29868:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29868:43:0;;;;;;;;;;;-1:-1:-1;;;29868:43:0;;;;;;;;;-1:-1:-1;;;;;;;;29868:43:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29868:43:0;;;;;;;29971:21;:24;;29868:43;;-1:-1:-1;29954:56:0;;29993:1;;29971:24;;;;;;;;;;;;;;:31;:24;;;;;:31;;-1:-1:-1;;;;;29971:31:0;30004:5;29954:16;:56::i;:::-;29929:81;;;30028:67;30039:5;30046:36;30066:5;:15;;;30046:19;:36::i;:::-;30084:10;-1:-1:-1;;;;;30028:67:0;:10;:67::i;:::-;-1:-1:-1;;29714:3:0;;;;;-1:-1:-1;29660:450:0;;-1:-1:-1;29660:450:0;;-1:-1:-1;30128:9:0;30123:654;30147:21;:28;30143:32;;30123:654;;;30200:13;30216:14;:21;;30238:1;30216:24;;;;;;;;;;;;;;;;;;;;:30;30281:21;:24;;-1:-1:-1;;;;;30216:30:0;;;;-1:-1:-1;30281:21:0;30303:1;;30281:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;30264:49;;30331:18;;:::i;:::-;-1:-1:-1;;;;;30352:13:0;;;;;;:6;:13;;;;;:22;;;;;;;;;;;;;;;;;;;;30331:43;;;;;;;;30352:22;;;;;;;30331:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30331:43:0;;;;;;;;;;;-1:-1:-1;;;30331:43:0;;;;;;;;;-1:-1:-1;;;;;;;;30331:43:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30331:43:0;;;;;;;30451:21;:24;;30331:43;;-1:-1:-1;30352:22:0;;30434:56;;30451:21;30473:1;;30451:24;;;;;;;;;;;;;;:31;:24;;;;;:31;;-1:-1:-1;;;;;30451:31:0;30484:5;30434:16;:56::i;:::-;30392:98;;;;30508:48;30529:5;30536:7;30545:10;30508:20;:48::i;:::-;30574:79;30599:5;30606:35;30626:5;:14;;;30606:19;:35::i;:::-;30643:9;-1:-1:-1;;;;;30574:79:0;:24;:79::i;:::-;30707:15;;;;;30724:14;;30676:86;;;;;;;;;-1:-1:-1;;;;;30676:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30676:86:0;;;;;;;;;;;;;-1:-1:-1;;30177:3:0;;;;;-1:-1:-1;30123:654:0;;-1:-1:-1;;30123:654:0;;-1:-1:-1;30853:32:0;;30828:108;;-1:-1:-1;;;;;30853:32:0;30887:22;30853:32;30887:19;:22::i;:::-;30911:24;;30828;:108::i;:::-;29566:1387::o;26305:393::-;26416:9;26411:147;26435:31;:38;26431:42;;26411:147;;;26546:1;26494:13;:49;26508:14;:31;;26540:1;26508:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26494:49;;;;;;;;;;;;:53;;-1:-1:-1;;;;;;26494:53:0;-1:-1:-1;;;;;26494:53:0;;;;;;;;;;-1:-1:-1;26475:3:0;26411:147;;;-1:-1:-1;26572:9:0;26567:125;26591:16;:23;26587:1;:27;26567:125;;;26672:6;26679:1;26672:9;;;;;;;;;;;;;;26635:13;:34;26649:16;26666:1;26649:19;;;;;;;;;;;;;;;;;;;26635:34;;;;;;;;;;;;-1:-1:-1;26635:34:0;:46;;-1:-1:-1;;;;;;26635:46:0;-1:-1:-1;;;;;26635:46:0;;;;;;;;;;-1:-1:-1;26616:3:0;26567:125;;562:153:6;633:15;680:16;:23;706:1;680:27;667:41;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;667:41:6;-1:-1:-1;660:48:6;562:153;-1:-1:-1;;562:153:6:o;37430:173:0:-;37516:4;37558:7;37539:26;;:5;:15;;;:26;;;;:57;;;;-1:-1:-1;;37569:16:0;;;;;:27;;;;;;;;;37430:173::o;36267:364::-;36499:14;;36485:29;;;;36362:7;36485:29;;;:13;:29;;;;;;;;;36542:15;;;;36528:30;;;;;;;;;36362:7;;;;;;36419:149;;36454:17;;-1:-1:-1;;;;;36485:29:0;;;;36528:30;36419:21;:149::i;:::-;36586:17;;36267:364;-1:-1:-1;;;;36267:364:0:o;1461:543:6:-;1702:21;1726:42;1741:8;1751:16;1726:14;:42::i;:::-;1702:66;;1778:22;1803:43;1818:9;1829:16;1803:14;:43::i;:::-;1778:68;;1878:42;1909:9;-1:-1:-1;;;;;1902:17:6;1878:4;1883:13;1878:19;;;;;;;;;;;;;;:23;;:42;;;;:::i;:::-;1856:4;1861:13;1856:19;;;;;;;;;;;;;:64;;;;;1953:44;1985:10;-1:-1:-1;;;;;1978:18:6;1953:4;1958:14;1953:20;;;;;;;;;;;;;;:24;;:44;;;;:::i;:::-;1930:4;1935:14;1930:20;;;;;;;;;;;;;:67;;;;;1461:543;;;;;;;;:::o;37802:144:0:-;37923:16;;;;37898:22;;;;;:41;;37802:144::o;2159:459:24:-;2217:7;2458:6;2454:45;;-1:-1:-1;2487:1:24;2480:8;;2454:45;2521:5;;;2525:1;2521;:5;:1;2544:5;;;;;:10;2536:56;;;;-1:-1:-1;;;2536:56:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31831:716:0;32180:20;;;;32114:14;;32100:29;;;;31915:7;32100:29;;;:13;:29;;;;;;;;;32145:15;;;;32131:30;;;;;;;;;31915:7;;;;32069:132;;-1:-1:-1;;;;;32069:132:0;;;;:93;;32091:7;;32100:29;;;;32131:30;32069:21;:93::i;:::-;-1:-1:-1;;;;;32069:110:0;;:132;:110;:132;:::i;:::-;32313:14;;32299:29;;32212:22;32299:29;;;:13;:29;;;;;;32270:22;;;;32042:159;;-1:-1:-1;32212:22:0;;32237:92;;-1:-1:-1;;;;;32299:29:0;;;;32237:57;;32249:44;;32042:159;;32249:44;;:20;:44;:::i;:::-;-1:-1:-1;;;;;32237:11:0;;;:57;:11;:57;:::i;:92::-;32459:22;;;;;32425:14;;32411:29;;32339:20;32411:29;;;:13;:29;;;;;;32383:22;;32212:117;;-1:-1:-1;32339:20:0;32362:129;;-1:-1:-1;;;;;32362:129:0;;;;:79;;32411:29;;;;32362:44;;:16;;:44;;:20;:44;:::i;:79::-;:83;:129;:83;:129;:::i;:::-;32339:152;-1:-1:-1;32508:32:0;:14;32339:152;32508:32;:18;:32;:::i;:::-;32501:39;31831:716;-1:-1:-1;;;;;;31831:716:0:o;834:176:24:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:24;;;;;;;;;;;;;;;;;;;;;;;;;;;27026:319:0;-1:-1:-1;;;;;27188:13:0;;;;;;:6;:13;;;;;:22;;27163:48;;27188:13;:22;;;;;;;;;;;;;;;;;;;27163:48;;;;;;;;27188:22;;;;;;;27163:48;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27163:48:0;;;;;;;;;;;-1:-1:-1;;;27163:48:0;;;;;;;;;-1:-1:-1;;;;;;;;27163:48:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27163:48:0;;;;;;;;;:24;:48::i;:::-;27159:180;;;27263:65;:53;27301:14;-1:-1:-1;;;;;27263:53:0;:6;:13;27270:5;-1:-1:-1;;;;;27263:13:0;-1:-1:-1;;;;;27263:13:0;;;;;;;;;;;;27277:7;27263:22;;;;;;;;;;;;;;;;;;;;;;;:33;;;-1:-1:-1;;;27263:33:0;;-1:-1:-1;;;;;27263:33:0;;:37;:53::i;:::-;:63;:65::i;:::-;-1:-1:-1;;;;;27227:13:0;;;;;;:6;:13;;;;;:22;;;;;;;;;;;;;;;;;;;;;;:33;;;:101;;;;;-1:-1:-1;;;;;27227:101:0;;;;;-1:-1:-1;;;;;27227:101:0;;;;;;27026:319;;;:::o;8760:308:3:-;8906:36;8930:4;8936:5;8906:23;:36::i;:::-;8902:119;;;8991:19;:17;:19::i;:::-;-1:-1:-1;;;;;8958:23:3;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;:52;;-1:-1:-1;;8958:52:3;;;;;;;;;;;;8902:119;9030:31;9041:4;9047:5;9054:6;9030:10;:31::i;9578:257::-;9715:23;9726:4;9732:5;9715:10;:23::i;:::-;9705:6;:33;;9697:76;;;;;-1:-1:-1;;;9697:76:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;9783:45;9808:4;9814:5;9821:6;9783:24;:45::i;33324:712:0:-;33416:7;33435:26;33464:91;33473:25;33492:5;33473:18;:25::i;:::-;-1:-1:-1;;;;;33464:91:0;33500:54;33511:4;33517:36;33537:5;:15;;;33517:19;:36::i;33500:54::-;33464:8;:91::i;:::-;33624:22;;;;33603:15;;;;;33589:30;;33565:21;33589:30;;;:13;:30;;;;;;;33435:120;;-1:-1:-1;33565:21:0;33589:58;;-1:-1:-1;;;;;33589:30:0;;;;:58;;:34;:58;:::i;:::-;33721:14;;33707:29;;33657:22;33707:29;;;:13;:29;;;;;;33682:20;;;;33565:82;;-1:-1:-1;33657:22:0;;33682:123;;33776:19;;33682:76;;2000:4;;33682:55;;-1:-1:-1;;;;;33682:24:0;;;;33707:29;33682:55;:24;:55;:::i;:123::-;33657:148;-1:-1:-1;33815:17:0;33850:30;;;33846:106;;;33908:33;:13;33926:14;33908:33;:17;:33;:::i;:::-;33896:45;;33846:106;34006:22;;;;33968:61;;-1:-1:-1;;;;;33968:61:0;:33;:18;33991:9;33968:33;:22;:33;:::i;:61::-;33961:68;33324:712;-1:-1:-1;;;;;;;33324:712:0:o;865:111:6:-;937:6;962:4;967:1;962:7;;;;;;;;;;;;;;955:14;;865:111;;;:::o;1274:134:24:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;31169:312:0:-;31275:55;31312:17;31275:36;:55::i;:::-;31254:161;;;;-1:-1:-1;;;31254:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31425:29;:49;31169:312::o;25417:215::-;25494:24;:36;;;25540:85;25579:10;25591:22;25611:1;25591:19;:22::i;:::-;25615:9;25540:38;:85::i;:::-;25417:215;:::o;2239:283:6:-;2335:1;2325:4;2330:1;2325:7;;;;;;;;;;;;;;:11;2317:65;;;;-1:-1:-1;;;2317:65:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2409:1;2392:124;2416:4;:11;2412:1;:15;2392:124;;;2456:4;2461:1;2456:7;;;;;;;;;;;;;;2467:1;2456:12;2448:57;;;;;-1:-1:-1;;;2448:57:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2429:3;;2392:124;;28910:546:0;29125:14;:32;;-1:-1:-1;;29125:32:0;;;;;;;-1:-1:-1;29167:168:0;29191:6;:13;29187:1;:17;29167:168;;;29225:14;:21;;29252:71;;;;;;;;29270:6;29277:1;29270:9;;;;;;;;;;;;;;-1:-1:-1;;;;;29252:71:0;;;;;29311:7;29319:1;29311:10;;;;;;;;;;;;;;-1:-1:-1;;;;;29252:71:0;;;;;29290:8;29299:1;29290:11;;;;;;;;;;;;;;;;;;;29252:71;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;29225:99:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29225:99:0;-1:-1:-1;;;;;29225:99:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29225:99:0;;;-1:-1:-1;;;;;29225:99:0;;;;;;;-1:-1:-1;;;;29225:99:0;-1:-1:-1;;;29225:99:0;;;;;;;;;;;29206:3;29167:168;;;-1:-1:-1;29344:50:0;;;;:31;;:50;;;;;:::i;:::-;-1:-1:-1;;29404:32:0;:45;;-1:-1:-1;;;;;;29404:45:0;29439:10;29404:45;;;-1:-1:-1;;;;28910:546:0:o;11062:554:3:-;-1:-1:-1;;;;;11158:19:3;;;11140:15;11158:19;;;;;;;;;;;:26;;;;;;;;;:50;;;;;11222:11;;;;;:44;;;11247:19;:17;:19::i;:::-;11237:29;;:7;:29;11222:44;11218:392;;;-1:-1:-1;;;;;11473:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:42;;;:49;11417:34;;:119;;:38;:119::i;:::-;-1:-1:-1;;;;;11380:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;;;;;:156;;;-1:-1:-1;11557:42:3;;;11550:49;;;;;-1:-1:-1;;11550:49:3;;;11062:554::o;842:202:30:-;968:68;;;-1:-1:-1;;;;;968:68:30;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;968:68:30;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;942:95:30;;961:5;;942:18;:95::i;:::-;842:202;;;;:::o;358:104:23:-;416:7;446:1;442;:5;:13;;454:1;442:13;;;-1:-1:-1;450:1:23;;358:104;-1:-1:-1;358:104:23:o;38264:812:0:-;38448:22;;;-1:-1:-1;;;;;;38406:20:0;38448:22;;;;;;;;;;26:21:-1;;;38448:22:0;22:32:-1;6:49;;38448:22:0;;;;;38505:34;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38505:34:0;;;;;;;38490:50;;38448:22;;38490:50;:14;:50;:::i;:::-;38592:14;;38575:32;;;;;;;;-1:-1:-1;;;;;;38575:32:0;;;;;;;;26:21:-1;;;22:32;6:49;;38575:32:0;;;;;;38480:60;;-1:-1:-1;38560:48:0;;38480:60;;38560:14;:48::i;:::-;38550:58;;38628:49;38660:5;:15;;;38643:33;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38643:33:0;;;38628:7;:14;;:49;;;;:::i;:::-;38618:59;;38697:49;38729:5;:15;;;38712:33;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38712:33:0;;;38697:7;:14;;:49;;;;:::i;:::-;38687:59;;38766:50;38798:5;:16;;;38781:34;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38781:34:0;;;38766:7;:14;;:50;;;;:::i;:::-;38756:60;;38836:54;38868:5;:20;;;38851:38;;;;;;-1:-1:-1;;;;;38851:38:0;-1:-1:-1;;;;;38851:38:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38851:38:0;;;38836:7;:14;;:54;;;;:::i;:::-;38826:64;;38910:56;38942:5;:22;;;38925:40;;;;;;-1:-1:-1;;;;;38925:40:0;-1:-1:-1;;;;;38925:40:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38925:40:0;;;38910:7;:14;;:56;;;;:::i;:::-;38900:66;;38986:59;39018:25;39037:5;39018:18;:25::i;:::-;39001:43;;;;;;;;-1:-1:-1;;;;;;39001:43:0;;;;;;;;26:21:-1;;;22:32;6:49;;39001:43:0;;;;;;38986:7;;:14;:59::i;662:174:30:-;770:58;;;-1:-1:-1;;;;;770:58:30;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;770:58:30;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;744:85:30;;763:5;;744:18;:85::i;2424:176:32:-;2480:6;2514:5;2506;:13;2498:65;;;;-1:-1:-1;;;2498:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2587:5:32;2424:176::o;35835:136:0:-;35892:4;35963:1;35941:19;:17;:19::i;:::-;35915:14;:22;:49;:22;;;35941:23;;;;35915:49;;;-1:-1:-1;35835:136:0;:::o;9074:248:3:-;9188:34;9210:4;9216:5;9188:21;:34::i;:::-;-1:-1:-1;;;;;9269:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:34;:46;;9308:6;9269:46;:38;:46;:::i;:::-;-1:-1:-1;;;;;9232:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;;;;;;:83;;;;-1:-1:-1;9074:248:3:o;27676:319:0:-;-1:-1:-1;;;;;27838:13:0;;;;;;:6;:13;;;;;:22;;27813:48;;27838:13;:22;;;;;;;;;27813:48;27809:180;;;27913:65;:53;27951:14;-1:-1:-1;;;;;27913:53:0;:6;:13;27920:5;-1:-1:-1;;;;;27913:13:0;-1:-1:-1;;;;;27913:13:0;;;;;;;;;;;;27927:7;27913:22;;;;;;;;;;;;;;;;;;;;;;;:33;;;-1:-1:-1;;;27913:33:0;;-1:-1:-1;;;;;27913:33:0;;:37;:53::i;10794:262:3:-;10922:34;10944:4;10950:5;10922:21;:34::i;:::-;-1:-1:-1;;;;;11003:19:3;;;:13;:19;;;;;;;;;;;:26;;;;;;;;;:34;:46;;11042:6;11003:46;:38;:46;:::i;35160:491:0:-;35317:7;35396:208;:179;-1:-1:-1;;;;;35396:179:0;;;;:142;;2000:4;;35396:104;;35480:19;;35396:142;;:26;;;;:62;;;:47;:62;:::i;3401:900:6:-;3497:7;3577:12;;;3573:51;;-1:-1:-1;3612:1:6;3605:8;;3573:51;3731:23;;3679:17;;-1:-1:-1;;3731:27:6;3768:479;3789:9;3775:10;:23;3768:479;;3814:19;3863:1;3837:22;;;3836:28;3814:50;;3915:7;3882:40;;:16;3899:11;3882:29;;;;;;;;;;;;;;:40;;;3878:359;;;4043:1;4029:15;;-1:-1:-1;4022:22:6;;-1:-1:-1;;4022:22:6;3878:359;4101:7;4069:39;;:16;4086:11;4069:29;;;;;;;;;;;;;;:39;;;4065:172;;;4140:11;4154:1;4140:15;4128:27;;4065:172;;;4221:1;4207:11;:15;4194:28;;4065:172;3768:479;;;;4256:38;;;-1:-1:-1;;;4256:38:6;;;;;;;;;;;;;;;;;;;;;;;;;;;1321:213:22;1377:6;1406:5;;;1430:6;;;;;;:16;;;1445:1;1440;:6;;1430:16;1429:38;;;;1456:1;1452;:5;:14;;;;;1465:1;1461;:5;1452:14;1421:87;;;;-1:-1:-1;;;1421:87:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1615:210;1671:6;1700:5;;;1724:6;;;;;;:16;;;1739:1;1734;:6;;1724:16;1723:38;;;;1750:1;1746;:5;:14;;;;;1759:1;1755;:5;1746:14;1715:84;;;;-1:-1:-1;;;1715:84:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3073:130:24;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;4500:128::-;4558:7;4584:37;4588:1;4591;4584:37;;;;;;;;;;;;;;;;;:3;:37::i;28190:204:0:-;28266:4;-1:-1:-1;;;;;;;28289:46:0;:5;:20;;;-1:-1:-1;;;;;28289:46:0;;;:98;;;;-1:-1:-1;;28339:22:0;;;-1:-1:-1;;;;;28339:48:0;;;;;;28190:204::o;1030:181:32:-;1087:7;-1:-1:-1;;;1114:5:32;:14;1106:67;;;;-1:-1:-1;;;1106:67:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1732:187:24;1818:7;1853:12;1845:6;;;;1837:29;;;;-1:-1:-1;;;1837:29:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1837:29:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1888:5:24;;;1732:187::o;2666:1095:30:-;3261:27;3269:5;-1:-1:-1;;;;;3261:25:30;;:27::i;:::-;3253:71;;;;;-1:-1:-1;;;3253:71:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;3395:12;3409:23;3444:5;-1:-1:-1;;;;;3436:19:30;3456:4;3436:25;;;;;;;;;;;;;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;;;3436:25:30;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;3394:67:30;;;;3479:7;3471:52;;;;;-1:-1:-1;;;3471:52:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3538:17;;:21;3534:221;;3678:10;3667:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3667:30:30;3659:85;;;;-1:-1:-1;;;3659:85:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3718:338:24;3804:7;3904:12;3897:5;3889:28;;;;-1:-1:-1;;;3889:28:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3889:28:24;;3927:9;3943:1;3939;:5;;;;;;;3718:338;-1:-1:-1;;;;;3718:338:24:o;5132:163::-;5218:7;5253:12;5245:6;5237:29;;;;-1:-1:-1;;;5237:29:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5237:29:24;;5287:1;5283;:5;;;;;;;5132:163;-1:-1:-1;;;;5132:163:24:o;686:610:31:-;746:4;1207:20;;1052:66;1246:23;;;;;;:42;;-1:-1:-1;;1273:15:31;;;1238:51;-1:-1:-1;;686:610:31:o;753:38761:0:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;753:38761:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;753:38761:0;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;753:38761:0;;;-1:-1:-1;753:38761:0;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;753:38761:0;;;;;;;;-1:-1:-1;;753:38761:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;753:38761:0;;;;;;",
  "source": "pragma solidity ^0.5.0;\n\nimport \"./EpochTokenLocker.sol\";\nimport \"@gnosis.pm/solidity-data-structures/contracts/libraries/IdToAddressBiMap.sol\";\nimport \"@gnosis.pm/solidity-data-structures/contracts/libraries/IterableAppendOnlySet.sol\";\nimport \"@gnosis.pm/owl-token/contracts/5/TokenOWL.sol\";\nimport \"@openzeppelin/contracts/utils/SafeCast.sol\";\nimport \"solidity-bytes-utils/contracts/BytesLib.sol\";\nimport \"./libraries/TokenConservation.sol\";\n\n/** @title BatchExchange - A decentralized exchange for any ERC20 token as a multi-token batch\n *  auction with uniform clearing prices.\n *  For more information visit: <https://github.com/gnosis/dex-contracts>\n *  @author @gnosis/dfusion-team <https://github.com/orgs/gnosis/teams/dfusion-team/members>\n */\ncontract BatchExchange is EpochTokenLocker {\n    using SafeCast for uint256;\n    using SafeMath for uint128;\n    using BytesLib for bytes32;\n    using BytesLib for bytes;\n    using TokenConservation for int256[];\n    using TokenConservation for uint16[];\n    using IterableAppendOnlySet for IterableAppendOnlySet.Data;\n\n    /** @dev Maximum number of touched orders in auction (used in submitSolution) */\n    uint256 public constant MAX_TOUCHED_ORDERS = 30;\n\n    /** @dev Fee charged for adding a token */\n    uint256 public constant FEE_FOR_LISTING_TOKEN_IN_OWL = 10 ether;\n\n    /** @dev minimum allowed value (in WEI) of any prices or executed trade amounts */\n    uint128 public constant AMOUNT_MINIMUM = 10**4;\n\n    /** @dev Numerator or denominator used in orders, which do not track its usedAmount*/\n    uint128 public constant UNLIMITED_ORDER_AMOUNT = uint128(-1);\n\n    /** Corresponds to percentage that competing solution must improve on current\n     * (p = IMPROVEMENT_DENOMINATOR + 1 / IMPROVEMENT_DENOMINATOR)\n     */\n    uint256 public constant IMPROVEMENT_DENOMINATOR = 100; // 1%\n\n    /** @dev A fixed integer used to evaluate fees as a fraction of trade execution 1/FEE_DENOMINATOR */\n    uint128 public constant FEE_DENOMINATOR = 1000;\n\n    /** @dev The number of bytes a single auction element is serialized into */\n    uint128 public constant ENCODED_AUCTION_ELEMENT_WIDTH = 112;\n\n    /** @dev maximum number of tokens that can be listed for exchange */\n    // solhint-disable-next-line var-name-mixedcase\n    uint256 public MAX_TOKENS;\n\n    /** @dev Current number of tokens listed/available for exchange */\n    uint16 public numTokens;\n\n    /** @dev The feeToken of the exchange will be the OWL Token */\n    TokenOWL public feeToken;\n\n    /** @dev mapping of type userAddress -> List[Order] where all the user's orders are stored */\n    mapping(address => Order[]) public orders;\n\n    /** @dev mapping of type tokenId -> curentPrice of tokenId */\n    mapping(uint16 => uint128) public currentPrices;\n\n    /** @dev Sufficient information for current winning auction solution */\n    SolutionData public latestSolution;\n\n    // Iterable set of all users, required to collect auction information\n    IterableAppendOnlySet.Data private allUsers;\n    IdToAddressBiMap.Data private registeredTokens;\n\n    struct Order {\n        uint16 buyToken;\n        uint16 sellToken;\n        uint32 validFrom; // order is valid from auction collection period: validFrom inclusive\n        uint32 validUntil; // order is valid till auction collection period: validUntil inclusive\n        uint128 priceNumerator;\n        uint128 priceDenominator;\n        uint128 usedAmount; // remainingAmount = priceDenominator - usedAmount\n    }\n\n    struct TradeData {\n        address owner;\n        uint128 volume;\n        uint16 orderId;\n    }\n\n    struct SolutionData {\n        uint32 batchId;\n        TradeData[] trades;\n        uint16[] tokenIdsForPrice;\n        address solutionSubmitter;\n        uint256 feeReward;\n        uint256 objectiveValue;\n    }\n\n    event OrderPlacement(\n        address indexed owner,\n        uint16 index,\n        uint16 indexed buyToken,\n        uint16 indexed sellToken,\n        uint32 validFrom,\n        uint32 validUntil,\n        uint128 priceNumerator,\n        uint128 priceDenominator\n    );\n\n    event TokenListing(address token, uint16 id);\n\n    /** @dev Event emitted when an order is cancelled but still valid in the batch that is\n     * currently being solved. It remains in storage but will not be tradable in any future\n     * batch to be solved.\n     */\n    event OrderCancellation(address indexed owner, uint16 id);\n\n    /** @dev Event emitted when an order is removed from storage.\n     */\n    event OrderDeletion(address indexed owner, uint16 id);\n\n    /** @dev Event emitted when a new trade is settled\n     */\n    event Trade(\n        address indexed owner,\n        uint16 indexed orderId,\n        uint16 indexed sellToken,\n        // Solidity only supports three indexed arguments\n        uint16 buyToken,\n        uint128 executedSellAmount,\n        uint128 executedBuyAmount\n    );\n\n    /** @dev Event emitted when an already exectued trade gets reverted\n     */\n    event TradeReversion(\n        address indexed owner,\n        uint16 indexed orderId,\n        uint16 indexed sellToken,\n        // Solidity only supports three indexed arguments\n        uint16 buyToken,\n        uint128 executedSellAmount,\n        uint128 executedBuyAmount\n    );\n\n    /** @dev Event emitted for each solution that is submitted\n     */\n    event SolutionSubmission(\n        address indexed submitter,\n        uint256 utility,\n        uint256 disregardedUtility,\n        uint256 burntFees,\n        uint256 lastAuctionBurntFees,\n        uint128[] prices,\n        uint16[] tokenIdsForPrice\n    );\n\n    /** @dev Constructor determines exchange parameters\n     * @param maxTokens The maximum number of tokens that can be listed.\n     * @param _feeToken Address of ERC20 fee token.\n     */\n    constructor(uint256 maxTokens, address _feeToken) public {\n        // All solutions for the batches must have normalized prices. The following line sets the\n        // price of OWL to 10**18 for all solutions and hence enforces a normalization.\n        currentPrices[0] = 1 ether;\n        MAX_TOKENS = maxTokens;\n        feeToken = TokenOWL(_feeToken);\n        // The burn functionallity of OWL requires an approval.\n        // In the following line the approval is set for all future burn calls.\n        feeToken.approve(address(this), uint256(-1));\n        addToken(_feeToken); // feeToken will always have the token index 0\n    }\n\n    /** @dev Used to list a new token on the contract: Hence, making it available for exchange in an auction.\n     * @param token ERC20 token to be listed.\n     *\n     * Requirements:\n     * - `maxTokens` has not already been reached\n     * - `token` has not already been added\n     */\n    function addToken(address token) public {\n        require(numTokens < MAX_TOKENS, \"Max tokens reached\");\n        if (numTokens > 0) {\n            // Only charge fees for tokens other than the fee token itself\n            feeToken.burnOWL(msg.sender, FEE_FOR_LISTING_TOKEN_IN_OWL);\n        }\n        require(IdToAddressBiMap.insert(registeredTokens, numTokens, token), \"Token already registered\");\n        emit TokenListing(token, numTokens);\n        numTokens++;\n    }\n\n    /** @dev A user facing function used to place limit sell orders in auction with expiry defined by batchId\n     * @param buyToken id of token to be bought\n     * @param sellToken id of token to be sold\n     * @param validUntil batchId representing order's expiry\n     * @param buyAmount relative minimum amount of requested buy amount\n     * @param sellAmount maximum amount of sell token to be exchanged\n     * @return orderId defined as the index in user's order array\n     *\n     * Emits an {OrderPlacement} event with all relevant order details.\n     */\n    function placeOrder(\n        uint16 buyToken,\n        uint16 sellToken,\n        uint32 validUntil,\n        uint128 buyAmount,\n        uint128 sellAmount\n    ) public returns (uint256) {\n        return placeOrderInternal(buyToken, sellToken, getCurrentBatchId(), validUntil, buyAmount, sellAmount);\n    }\n\n    /** @dev A user facing function used to place limit sell orders in auction with expiry defined by batchId\n     * Note that parameters are passed as arrays and the indices correspond to each order.\n     * @param buyTokens ids of tokens to be bought\n     * @param sellTokens ids of tokens to be sold\n     * @param validFroms batchIds representing order's validity start time\n     * @param validUntils batchIds representing order's expiry\n     * @param buyAmounts relative minimum amount of requested buy amounts\n     * @param sellAmounts maximum amounts of sell token to be exchanged\n     * @return `orderIds` an array of indices in which `msg.sender`'s orders are included\n     *\n     * Emits an {OrderPlacement} event with all relevant order details.\n     */\n    function placeValidFromOrders(\n        uint16[] memory buyTokens,\n        uint16[] memory sellTokens,\n        uint32[] memory validFroms,\n        uint32[] memory validUntils,\n        uint128[] memory buyAmounts,\n        uint128[] memory sellAmounts\n    ) public returns (uint16[] memory orderIds) {\n        orderIds = new uint16[](buyTokens.length);\n        for (uint256 i = 0; i < buyTokens.length; i++) {\n            orderIds[i] = placeOrderInternal(\n                buyTokens[i],\n                sellTokens[i],\n                validFroms[i],\n                validUntils[i],\n                buyAmounts[i],\n                sellAmounts[i]\n            );\n        }\n    }\n\n    /** @dev a user facing function used to cancel orders. If the order is valid for the batch that is currently\n     * being solved, it sets order expiry to that batchId. Otherwise it removes it from storage. Can be called\n     * multiple times (e.g. to eventually free storage once order is expired).\n     *\n     * @param orderIds referencing the indices of user's orders to be cancelled\n     *\n     * Emits an {OrderCancellation} or {OrderDeletion} with sender's address and orderId\n     */\n    function cancelOrders(uint16[] memory orderIds) public {\n        uint32 batchIdBeingSolved = getCurrentBatchId() - 1;\n        for (uint16 i = 0; i < orderIds.length; i++) {\n            if (!checkOrderValidity(orders[msg.sender][orderIds[i]], batchIdBeingSolved)) {\n                delete orders[msg.sender][orderIds[i]];\n                emit OrderDeletion(msg.sender, orderIds[i]);\n            } else {\n                orders[msg.sender][orderIds[i]].validUntil = batchIdBeingSolved;\n                emit OrderCancellation(msg.sender, orderIds[i]);\n            }\n        }\n    }\n\n    /** @dev A user facing wrapper to cancel and place new orders in the same transaction.\n     * @param cancellations indices of orders to be cancelled\n     * @param buyTokens ids of tokens to be bought in new orders\n     * @param sellTokens ids of tokens to be sold in new orders\n     * @param validFroms batchIds representing order's validity start time in new orders\n     * @param validUntils batchIds represnnting order's expiry in new orders\n     * @param buyAmounts relative minimum amount of requested buy amounts in new orders\n     * @param sellAmounts maximum amounts of sell token to be exchanged in new orders\n     * @return an array of indices in which `msg.sender`'s new orders are included\n     *\n     * Emits {OrderCancellation} events for all cancelled orders and {OrderPlacement} events with relevant new order details.\n     */\n    function replaceOrders(\n        uint16[] memory cancellations,\n        uint16[] memory buyTokens,\n        uint16[] memory sellTokens,\n        uint32[] memory validFroms,\n        uint32[] memory validUntils,\n        uint128[] memory buyAmounts,\n        uint128[] memory sellAmounts\n    ) public returns (uint16[] memory) {\n        cancelOrders(cancellations);\n        return placeValidFromOrders(buyTokens, sellTokens, validFroms, validUntils, buyAmounts, sellAmounts);\n    }\n\n    /** @dev a solver facing function called for auction settlement\n     * @param batchId index of auction solution is referring to\n     * @param owners array of addresses corresponding to touched orders\n     * @param orderIds array of order indices used in parallel with owners to identify touched order\n     * @param buyVolumes executed buy amounts for each order identified by index of owner-orderId arrays\n     * @param prices list of prices for touched tokens indexed by next parameter\n     * @param tokenIdsForPrice price[i] is the price for the token with tokenID tokenIdsForPrice[i]\n     * @return the computed objective value of the solution\n     *\n     * Requirements:\n     * - Solutions for this `batchId` are currently being accepted.\n     * - Claimed objetive value is a great enough improvement on the current winning solution\n     * - Fee Token price is non-zero\n     * - `tokenIdsForPrice` is sorted.\n     * - Number of touched orders does not exceed `MAX_TOUCHED_ORDERS`.\n     * - Each touched order is valid at current `batchId`.\n     * - Each touched order's `executedSellAmount` does not exceed its remaining amount.\n     * - Limit Price of each touched order is respected.\n     * - Solution's objective evaluation must be positive.\n     *\n     * Sub Requirements: Those nested within other functions\n     * - checkAndOverrideObjectiveValue; Objetive value is a great enough improvement on the current winning solution\n     * - checkTokenConservation; for all, non-fee, tokens total amount sold == total amount bought\n     */\n    function submitSolution(\n        uint32 batchId,\n        uint256 claimedObjectiveValue,\n        address[] memory owners,\n        uint16[] memory orderIds,\n        uint128[] memory buyVolumes,\n        uint128[] memory prices,\n        uint16[] memory tokenIdsForPrice\n    ) public returns (uint256) {\n        require(acceptingSolutions(batchId), \"Solutions are no longer accepted for this batch\");\n        require(\n            isObjectiveValueSufficientlyImproved(claimedObjectiveValue),\n            \"Claimed objective doesn't sufficiently improve current solution\"\n        );\n        require(verifyAmountThreshold(prices), \"At least one price lower than AMOUNT_MINIMUM\");\n        require(tokenIdsForPrice[0] != 0, \"Fee token has fixed price!\");\n        require(tokenIdsForPrice.checkPriceOrdering(), \"prices are not ordered by tokenId\");\n        require(owners.length <= MAX_TOUCHED_ORDERS, \"Solution exceeds MAX_TOUCHED_ORDERS\");\n        // Further assumptions are: owners.length == orderIds.length && owners.length == buyVolumes.length\n        // && prices.length == tokenIdsForPrice.length\n        // These assumptions are not checked explicitly, as violations of these constraints can not be used\n        // to create a beneficial situation\n        uint256 lastAuctionBurntFees = burnPreviousAuctionFees();\n        undoCurrentSolution();\n        updateCurrentPrices(prices, tokenIdsForPrice);\n        delete latestSolution.trades;\n        int256[] memory tokenConservation = TokenConservation.init(tokenIdsForPrice);\n        uint256 utility = 0;\n        for (uint256 i = 0; i < owners.length; i++) {\n            Order memory order = orders[owners[i]][orderIds[i]];\n            require(checkOrderValidity(order, batchId), \"Order is invalid\");\n            (uint128 executedBuyAmount, uint128 executedSellAmount) = getTradedAmounts(buyVolumes[i], order);\n            require(executedBuyAmount >= AMOUNT_MINIMUM, \"buy amount less than AMOUNT_MINIMUM\");\n            require(executedSellAmount >= AMOUNT_MINIMUM, \"sell amount less than AMOUNT_MINIMUM\");\n            tokenConservation.updateTokenConservation(\n                order.buyToken,\n                order.sellToken,\n                tokenIdsForPrice,\n                executedBuyAmount,\n                executedSellAmount\n            );\n            require(getRemainingAmount(order) >= executedSellAmount, \"executedSellAmount bigger than specified in order\");\n            // Ensure executed price is not lower than the order price:\n            //       executedSellAmount / executedBuyAmount <= order.priceDenominator / order.priceNumerator\n            require(\n                executedSellAmount.mul(order.priceNumerator) <= executedBuyAmount.mul(order.priceDenominator),\n                \"limit price not satisfied\"\n            );\n            // accumulate utility before updateRemainingOrder, but after limitPrice verified!\n            utility = utility.add(evaluateUtility(executedBuyAmount, order));\n            updateRemainingOrder(owners[i], orderIds[i], executedSellAmount);\n            addBalanceAndBlockWithdrawForThisBatch(owners[i], tokenIdToAddressMap(order.buyToken), executedBuyAmount);\n            emit Trade(owners[i], orderIds[i], order.sellToken, order.buyToken, executedSellAmount, executedBuyAmount);\n        }\n        // Perform all subtractions after additions to avoid negative values\n        for (uint256 i = 0; i < owners.length; i++) {\n            Order memory order = orders[owners[i]][orderIds[i]];\n            (, uint128 executedSellAmount) = getTradedAmounts(buyVolumes[i], order);\n            subtractBalance(owners[i], tokenIdToAddressMap(order.sellToken), executedSellAmount);\n        }\n        uint256 disregardedUtility = 0;\n        for (uint256 i = 0; i < owners.length; i++) {\n            disregardedUtility = disregardedUtility.add(evaluateDisregardedUtility(orders[owners[i]][orderIds[i]], owners[i]));\n        }\n        uint256 burntFees = uint256(tokenConservation.feeTokenImbalance()) / 2;\n        // burntFees ensures direct trades (when available) yield better solutions than longer rings\n        uint256 objectiveValue = utility.add(burntFees).sub(disregardedUtility);\n        checkAndOverrideObjectiveValue(objectiveValue);\n        grantRewardToSolutionSubmitter(burntFees);\n        tokenConservation.checkTokenConservation();\n        documentTrades(batchId, owners, orderIds, buyVolumes, tokenIdsForPrice);\n\n        emit SolutionSubmission(\n            msg.sender,\n            utility,\n            disregardedUtility,\n            burntFees,\n            lastAuctionBurntFees,\n            prices,\n            tokenIdsForPrice\n        );\n        return (objectiveValue);\n    }\n\n    /**\n     * Public View Methods\n     */\n    /** @dev View returning ID of listed tokens\n     * @param addr address of listed token.\n     * @return tokenId as stored within the contract.\n     */\n    function tokenAddressToIdMap(address addr) public view returns (uint16) {\n        return IdToAddressBiMap.getId(registeredTokens, addr);\n    }\n\n    /** @dev View returning address of listed token by ID\n     * @param id tokenId as stored, via BiMap, within the contract.\n     * @return address of (listed) token\n     */\n    function tokenIdToAddressMap(uint16 id) public view returns (address) {\n        return IdToAddressBiMap.getAddressAt(registeredTokens, id);\n    }\n\n    /** @dev View returning a bool attesting whether token was already added\n     * @param addr address of the token to be checked\n     * @return bool attesting whether token was already added\n     */\n    function hasToken(address addr) public view returns (bool) {\n        return IdToAddressBiMap.hasAddress(registeredTokens, addr);\n    }\n\n    /** @dev View returning all byte-encoded sell orders for specified user\n     * @param user address of user whose orders are being queried\n     * @param offset uint determining the starting orderIndex\n     * @param pageSize uint determining the count of elements to be viewed\n     * @return encoded bytes representing all orders\n     */\n    function getEncodedUserOrdersPaginated(\n        address user,\n        uint16 offset,\n        uint16 pageSize\n    ) public view returns (bytes memory elements) {\n        for (uint16 i = offset; i < Math.min(orders[user].length, offset + pageSize); i++) {\n            elements = elements.concat(\n                encodeAuctionElement(user, getBalance(user, tokenIdToAddressMap(orders[user][i].sellToken)), orders[user][i])\n            );\n        }\n        return elements;\n    }\n\n    /** @dev View returning all byte-encoded users in paginated form\n     * @param previousPageUser address of last user received in last pages (address(0) for first page)\n     * @param pageSize uint determining the count of users to be returned per page\n     * @return encoded packed bytes of user addresses\n     */\n    function getUsersPaginated(address previousPageUser, uint16 pageSize) public view returns (bytes memory users) {\n        if (allUsers.size == 0) {\n            return users;\n        }\n        uint16 count = 0;\n        address current = previousPageUser;\n        if (current == address(0)) {\n            current = allUsers.first();\n            users = users.concat(abi.encodePacked(current));\n            count++;\n        }\n        while (count < pageSize && current != allUsers.last) {\n            current = allUsers.next(current);\n            users = users.concat(abi.encodePacked(current));\n            count++;\n        }\n        return users;\n    }\n\n    /** @dev View returning all byte-encoded sell orders for specified user\n     * @param user address of user whose orders are being queried\n     * @return encoded bytes representing all orders\n     */\n    function getEncodedUserOrders(address user) public view returns (bytes memory elements) {\n        return getEncodedUserOrdersPaginated(user, 0, uint16(-1));\n    }\n\n    /** @dev View returning byte-encoded sell orders in paginated form\n     * @param previousPageUser address of last user received in the previous page (address(0) for first page)\n     * @param previousPageUserOffset the number of orders received for the last user on the previous page (0 for first page).\n     * @param pageSize uint determining the count of orders to be returned per page\n     * @return encoded bytes representing a page of orders ordered by (user, index)\n     */\n    function getEncodedUsersPaginated(\n        address previousPageUser,\n        uint16 previousPageUserOffset,\n        uint16 pageSize\n    ) public view returns (bytes memory elements) {\n        if (allUsers.size == 0) {\n            return elements;\n        }\n        uint16 currentOffset = previousPageUserOffset;\n        address currentUser = previousPageUser;\n        if (currentUser == address(0x0)) {\n            currentUser = allUsers.first();\n        }\n        while (elements.length / ENCODED_AUCTION_ELEMENT_WIDTH < pageSize) {\n            elements = elements.concat(\n                getEncodedUserOrdersPaginated(\n                    currentUser,\n                    currentOffset,\n                    pageSize - uint16(elements.length / ENCODED_AUCTION_ELEMENT_WIDTH)\n                )\n            );\n            if (currentUser == allUsers.last) {\n                return elements;\n            }\n            currentOffset = 0;\n            currentUser = allUsers.next(currentUser);\n        }\n    }\n\n    /** @dev View returning all byte-encoded sell orders\n     * @return encoded bytes representing all orders ordered by (user, index)\n     */\n    function getEncodedOrders() public view returns (bytes memory elements) {\n        if (allUsers.size > 0) {\n            address user = allUsers.first();\n            bool stop = false;\n            while (!stop) {\n                elements = elements.concat(getEncodedUserOrders(user));\n                if (user == allUsers.last) {\n                    stop = true;\n                } else {\n                    user = allUsers.next(user);\n                }\n            }\n        }\n        return elements;\n    }\n\n    function acceptingSolutions(uint32 batchId) public view returns (bool) {\n        return batchId == getCurrentBatchId() - 1 && getSecondsRemainingInBatch() >= 1 minutes;\n    }\n\n    /** @dev gets the objective value of currently winning solution.\n     * @return objective function evaluation of the currently winning solution, or zero if no solution proposed.\n     */\n    function getCurrentObjectiveValue() public view returns (uint256) {\n        if (latestSolution.batchId == getCurrentBatchId() - 1) {\n            return latestSolution.objectiveValue;\n        } else {\n            return 0;\n        }\n    }\n\n    /**\n     * Private Functions\n     */\n    function placeOrderInternal(\n        uint16 buyToken,\n        uint16 sellToken,\n        uint32 validFrom,\n        uint32 validUntil,\n        uint128 buyAmount,\n        uint128 sellAmount\n    ) private returns (uint16) {\n        require(IdToAddressBiMap.hasId(registeredTokens, buyToken), \"Buy token must be listed\");\n        require(IdToAddressBiMap.hasId(registeredTokens, sellToken), \"Sell token must be listed\");\n        require(buyToken != sellToken, \"Exchange tokens not distinct\");\n        require(validFrom >= getCurrentBatchId(), \"Orders can't be placed in the past\");\n        orders[msg.sender].push(\n            Order({\n                buyToken: buyToken,\n                sellToken: sellToken,\n                validFrom: validFrom,\n                validUntil: validUntil,\n                priceNumerator: buyAmount,\n                priceDenominator: sellAmount,\n                usedAmount: 0\n            })\n        );\n        uint16 orderId = (orders[msg.sender].length - 1).toUint16();\n        emit OrderPlacement(msg.sender, orderId, buyToken, sellToken, validFrom, validUntil, buyAmount, sellAmount);\n        allUsers.insert(msg.sender);\n        return orderId;\n    }\n\n    /** @dev called at the end of submitSolution with a value of tokenConservation / 2\n     * @param feeReward amount to be rewarded to the solver\n     */\n    function grantRewardToSolutionSubmitter(uint256 feeReward) private {\n        latestSolution.feeReward = feeReward;\n        addBalanceAndBlockWithdrawForThisBatch(msg.sender, tokenIdToAddressMap(0), feeReward);\n    }\n\n    /** @dev called during solution submission to burn fees from previous auction\n     * @return amount of OWL burnt\n     */\n    function burnPreviousAuctionFees() private returns (uint256) {\n        if (!currentBatchHasSolution()) {\n            feeToken.burnOWL(address(this), latestSolution.feeReward);\n            return latestSolution.feeReward;\n        }\n        return 0;\n    }\n\n    /** @dev Called from within submitSolution to update the token prices.\n     * @param prices list of prices for touched tokens only, first price is always fee token price\n     * @param tokenIdsForPrice price[i] is the price for the token with tokenID tokenIdsForPrice[i]\n     */\n    function updateCurrentPrices(uint128[] memory prices, uint16[] memory tokenIdsForPrice) private {\n        for (uint256 i = 0; i < latestSolution.tokenIdsForPrice.length; i++) {\n            currentPrices[latestSolution.tokenIdsForPrice[i]] = 0;\n        }\n        for (uint256 i = 0; i < tokenIdsForPrice.length; i++) {\n            currentPrices[tokenIdsForPrice[i]] = prices[i];\n        }\n    }\n\n    /** @dev Updates an order's remaing requested sell amount upon (partial) execution of a standing order\n     * @param owner order's corresponding user address\n     * @param orderId index of order in list of owner's orders\n     * @param executedAmount proportion of order's requested sellAmount that was filled.\n     */\n    function updateRemainingOrder(\n        address owner,\n        uint16 orderId,\n        uint128 executedAmount\n    ) private {\n        if (isOrderWithLimitedAmount(orders[owner][orderId])) {\n            orders[owner][orderId].usedAmount = orders[owner][orderId].usedAmount.add(executedAmount).toUint128();\n        }\n    }\n\n    /** @dev The inverse of updateRemainingOrder, called when reverting a solution in favour of a better one.\n     * @param owner order's corresponding user address\n     * @param orderId index of order in list of owner's orders\n     * @param executedAmount proportion of order's requested sellAmount that was filled.\n     */\n    function revertRemainingOrder(\n        address owner,\n        uint16 orderId,\n        uint128 executedAmount\n    ) private {\n        if (isOrderWithLimitedAmount(orders[owner][orderId])) {\n            orders[owner][orderId].usedAmount = orders[owner][orderId].usedAmount.sub(executedAmount).toUint128();\n        }\n    }\n\n    /** @dev Checks whether an order is intended to track its usedAmount\n     * @param order order under inspection\n     * @return true if the given order does track its usedAmount\n     */\n    function isOrderWithLimitedAmount(Order memory order) private pure returns (bool) {\n        return order.priceNumerator != UNLIMITED_ORDER_AMOUNT && order.priceDenominator != UNLIMITED_ORDER_AMOUNT;\n    }\n\n    /** @dev This function writes solution information into contract storage\n     * @param batchId index of referenced auction\n     * @param owners array of addresses corresponding to touched orders\n     * @param orderIds array of order indices used in parallel with owners to identify touched order\n     * @param volumes executed buy amounts for each order identified by index of owner-orderId arrays\n     * @param tokenIdsForPrice price[i] is the price for the token with tokenID tokenIdsForPrice[i]\n     */\n    function documentTrades(\n        uint32 batchId,\n        address[] memory owners,\n        uint16[] memory orderIds,\n        uint128[] memory volumes,\n        uint16[] memory tokenIdsForPrice\n    ) private {\n        latestSolution.batchId = batchId;\n        for (uint256 i = 0; i < owners.length; i++) {\n            latestSolution.trades.push(TradeData({owner: owners[i], orderId: orderIds[i], volume: volumes[i]}));\n        }\n        latestSolution.tokenIdsForPrice = tokenIdsForPrice;\n        latestSolution.solutionSubmitter = msg.sender;\n    }\n\n    /** @dev reverts all relevant contract storage relating to an overwritten auction solution.\n     */\n    function undoCurrentSolution() private {\n        if (currentBatchHasSolution()) {\n            for (uint256 i = 0; i < latestSolution.trades.length; i++) {\n                address owner = latestSolution.trades[i].owner;\n                uint16 orderId = latestSolution.trades[i].orderId;\n                Order memory order = orders[owner][orderId];\n                (, uint128 sellAmount) = getTradedAmounts(latestSolution.trades[i].volume, order);\n                addBalance(owner, tokenIdToAddressMap(order.sellToken), sellAmount);\n            }\n            for (uint256 i = 0; i < latestSolution.trades.length; i++) {\n                address owner = latestSolution.trades[i].owner;\n                uint16 orderId = latestSolution.trades[i].orderId;\n                Order memory order = orders[owner][orderId];\n                (uint128 buyAmount, uint128 sellAmount) = getTradedAmounts(latestSolution.trades[i].volume, order);\n                revertRemainingOrder(owner, orderId, sellAmount);\n                subtractBalanceUnchecked(owner, tokenIdToAddressMap(order.buyToken), buyAmount);\n                emit TradeReversion(owner, orderId, order.sellToken, order.buyToken, sellAmount, buyAmount);\n            }\n            // subtract granted fees:\n            subtractBalanceUnchecked(latestSolution.solutionSubmitter, tokenIdToAddressMap(0), latestSolution.feeReward);\n        }\n    }\n\n    /** @dev determines if value is better than currently and updates if it is.\n     * @param newObjectiveValue proposed value to be updated if a great enough improvement on the current objective value\n     */\n    function checkAndOverrideObjectiveValue(uint256 newObjectiveValue) private {\n        require(\n            isObjectiveValueSufficientlyImproved(newObjectiveValue),\n            \"New objective doesn't sufficiently improve current solution\"\n        );\n        latestSolution.objectiveValue = newObjectiveValue;\n    }\n\n    // Private view\n    /** @dev Evaluates utility of executed trade\n     * @param execBuy represents proportion of order executed (in terms of buy amount)\n     * @param order the sell order whose utility is being evaluated\n     * @return Utility = ((execBuy * order.sellAmt - execSell * order.buyAmt) * price.buyToken) / order.sellAmt\n     */\n    function evaluateUtility(uint128 execBuy, Order memory order) private view returns (uint256) {\n        // Utility = ((execBuy * order.sellAmt - execSell * order.buyAmt) * price.buyToken) / order.sellAmt\n        uint256 execSellTimesBuy = getExecutedSellAmount(execBuy, currentPrices[order.buyToken], currentPrices[order.sellToken])\n            .mul(order.priceNumerator);\n\n        uint256 roundedUtility = execBuy.sub(execSellTimesBuy.div(order.priceDenominator)).mul(currentPrices[order.buyToken]);\n        uint256 utilityError = execSellTimesBuy.mod(order.priceDenominator).mul(currentPrices[order.buyToken]).div(\n            order.priceDenominator\n        );\n        return roundedUtility.sub(utilityError);\n    }\n\n    /** @dev computes a measure of how much of an order was disregarded (only valid when limit price is respected)\n     * @param order the sell order whose disregarded utility is being evaluated\n     * @param user address of order's owner\n     * @return disregardedUtility of the order (after it has been applied)\n     * Note that:\n     * |disregardedUtility| = (limitTerm * leftoverSellAmount) / order.sellAmount\n     * where limitTerm = price.SellToken * order.sellAmt - order.buyAmt * price.buyToken / (1 - phi)\n     * and leftoverSellAmount = order.sellAmt - execSellAmt\n     * Balances and orders have all been updated so: sellAmount - execSellAmt == remainingAmount(order).\n     * For correctness, we take the minimum of this with the user's token balance.\n     */\n    function evaluateDisregardedUtility(Order memory order, address user) private view returns (uint256) {\n        uint256 leftoverSellAmount = Math.min(getRemainingAmount(order), getBalance(user, tokenIdToAddressMap(order.sellToken)));\n        uint256 limitTermLeft = currentPrices[order.sellToken].mul(order.priceDenominator);\n        uint256 limitTermRight = order.priceNumerator.mul(currentPrices[order.buyToken]).mul(FEE_DENOMINATOR).div(\n            FEE_DENOMINATOR - 1\n        );\n        uint256 limitTerm = 0;\n        if (limitTermLeft > limitTermRight) {\n            limitTerm = limitTermLeft.sub(limitTermRight);\n        }\n        return leftoverSellAmount.mul(limitTerm).div(order.priceDenominator);\n    }\n\n    /** @dev Evaluates executedBuy amount based on prices and executedBuyAmout (fees included)\n     * @param executedBuyAmount amount of buyToken executed for purchase in batch auction\n     * @param buyTokenPrice uniform clearing price of buyToken\n     * @param sellTokenPrice uniform clearing price of sellToken\n     * @return executedSellAmount as expressed in Equation (2)\n     * https://github.com/gnosis/dex-contracts/issues/173#issuecomment-526163117\n     * execSellAmount * p[sellToken] * (1 - phi) == execBuyAmount * p[buyToken]\n     * where phi = 1/FEE_DENOMINATOR\n     * Note that: 1 - phi = (FEE_DENOMINATOR - 1) / FEE_DENOMINATOR\n     * And so, 1/(1-phi) = FEE_DENOMINATOR / (FEE_DENOMINATOR - 1)\n     * execSellAmount = (execBuyAmount * p[buyToken]) / (p[sellToken] * (1 - phi))\n     *                = (execBuyAmount * buyTokenPrice / sellTokenPrice) * FEE_DENOMINATOR / (FEE_DENOMINATOR - 1)\n     * in order to minimize rounding errors, the order of operations is switched\n     *                = ((executedBuyAmount * buyTokenPrice) / (FEE_DENOMINATOR - 1)) * FEE_DENOMINATOR) / sellTokenPrice\n     */\n    function getExecutedSellAmount(\n        uint128 executedBuyAmount,\n        uint128 buyTokenPrice,\n        uint128 sellTokenPrice\n    ) private pure returns (uint128) {\n        /* solium-disable indentation */\n        return\n            uint256(executedBuyAmount)\n                .mul(buyTokenPrice)\n                .div(FEE_DENOMINATOR - 1)\n                .mul(FEE_DENOMINATOR)\n                .div(sellTokenPrice)\n                .toUint128();\n        /* solium-enable indentation */\n    }\n\n    /** @dev used to determine if solution if first provided in current batch\n     * @return true if `latestSolution` is storing a solution for current batch, else false\n     */\n    function currentBatchHasSolution() private view returns (bool) {\n        return latestSolution.batchId == getCurrentBatchId() - 1;\n    }\n\n    // Private view\n    /** @dev Compute trade execution based on executedBuyAmount and relevant token prices\n     * @param executedBuyAmount executed buy amount\n     * @param order contains relevant buy-sell token information\n     * @return (executedBuyAmount, executedSellAmount)\n     */\n    function getTradedAmounts(uint128 executedBuyAmount, Order memory order) private view returns (uint128, uint128) {\n        uint128 executedSellAmount = getExecutedSellAmount(\n            executedBuyAmount,\n            currentPrices[order.buyToken],\n            currentPrices[order.sellToken]\n        );\n        return (executedBuyAmount, executedSellAmount);\n    }\n\n    /** @dev Checks that the proposed objective value is a significant enough improvement on the latest one\n     * @param objectiveValue the proposed objective value to check\n     * @return true if the objectiveValue is a significant enough improvement, false otherwise\n     */\n    function isObjectiveValueSufficientlyImproved(uint256 objectiveValue) private view returns (bool) {\n        return (objectiveValue.mul(IMPROVEMENT_DENOMINATOR) > getCurrentObjectiveValue().mul(IMPROVEMENT_DENOMINATOR + 1));\n    }\n\n    // Private pure\n    /** @dev used to determine if an order is valid for specific auction/batch\n     * @param order object whose validity is in question\n     * @param batchId auction index of validity\n     * @return true if order is valid in auction batchId else false\n     */\n    function checkOrderValidity(Order memory order, uint32 batchId) private pure returns (bool) {\n        return order.validFrom <= batchId && order.validUntil >= batchId;\n    }\n\n    /** @dev computes the remaining sell amount for a given order\n     * @param order the order for which remaining amount should be calculated\n     * @return the remaining sell amount\n     */\n    function getRemainingAmount(Order memory order) private pure returns (uint128) {\n        return order.priceDenominator - order.usedAmount;\n    }\n\n    /** @dev called only by getEncodedOrders and used to pack auction info into bytes\n     * @param user list of tokenIds\n     * @param sellTokenBalance user's account balance of sell token\n     * @param order a sell order\n     * @return byte encoded, packed, concatenation of relevant order information\n     */\n    function encodeAuctionElement(\n        address user,\n        uint256 sellTokenBalance,\n        Order memory order\n    ) private pure returns (bytes memory element) {\n        element = abi.encodePacked(user);\n        element = element.concat(abi.encodePacked(sellTokenBalance));\n        element = element.concat(abi.encodePacked(order.buyToken));\n        element = element.concat(abi.encodePacked(order.sellToken));\n        element = element.concat(abi.encodePacked(order.validFrom));\n        element = element.concat(abi.encodePacked(order.validUntil));\n        element = element.concat(abi.encodePacked(order.priceNumerator));\n        element = element.concat(abi.encodePacked(order.priceDenominator));\n        element = element.concat(abi.encodePacked(getRemainingAmount(order)));\n        return element;\n    }\n\n    /** @dev determines if value is better than currently and updates if it is.\n     * @param amounts array of values to be verified with AMOUNT_MINIMUM\n     */\n    function verifyAmountThreshold(uint128[] memory amounts) private pure returns (bool) {\n        for (uint256 i = 0; i < amounts.length; i++) {\n            if (amounts[i] < AMOUNT_MINIMUM) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n",
  "sourcePath": "/Users/felixleupold/Gnosis/dex-contracts/contracts/BatchExchange.sol",
  "ast": {
    "absolutePath": "/Users/felixleupold/Gnosis/dex-contracts/contracts/BatchExchange.sol",
    "exportedSymbols": {
      "BatchExchange": [
        2226
      ]
    },
    "id": 2227,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:0"
      },
      {
        "absolutePath": "/Users/felixleupold/Gnosis/dex-contracts/contracts/EpochTokenLocker.sol",
        "file": "./EpochTokenLocker.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 4189,
        "src": "25:32:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@gnosis.pm/solidity-data-structures/contracts/libraries/IdToAddressBiMap.sol",
        "file": "@gnosis.pm/solidity-data-structures/contracts/libraries/IdToAddressBiMap.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 6490,
        "src": "58:86:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@gnosis.pm/solidity-data-structures/contracts/libraries/IterableAppendOnlySet.sol",
        "file": "@gnosis.pm/solidity-data-structures/contracts/libraries/IterableAppendOnlySet.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 6633,
        "src": "145:91:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@gnosis.pm/owl-token/contracts/5/TokenOWL.sol",
        "file": "@gnosis.pm/owl-token/contracts/5/TokenOWL.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 6271,
        "src": "237:55:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/SafeCast.sol",
        "file": "@openzeppelin/contracts/utils/SafeCast.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 9805,
        "src": "293:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "solidity-bytes-utils/contracts/BytesLib.sol",
        "file": "solidity-bytes-utils/contracts/BytesLib.sol",
        "id": 7,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 10228,
        "src": "346:53:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/felixleupold/Gnosis/dex-contracts/contracts/libraries/TokenConservation.sol",
        "file": "./libraries/TokenConservation.sol",
        "id": 8,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 4662,
        "src": "400:43:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9,
              "name": "EpochTokenLocker",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4188,
              "src": "779:16:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EpochTokenLocker_$4188",
                "typeString": "contract EpochTokenLocker"
              }
            },
            "id": 10,
            "nodeType": "InheritanceSpecifier",
            "src": "779:16:0"
          }
        ],
        "contractDependencies": [
          4188
        ],
        "contractKind": "contract",
        "documentation": "@title BatchExchange - A decentralized exchange for any ERC20 token as a multi-token batch\n auction with uniform clearing prices.\n For more information visit: <https://github.com/gnosis/dex-contracts>\n @author @gnosis/dfusion-team <https://github.com/orgs/gnosis/teams/dfusion-team/members>",
        "fullyImplemented": true,
        "id": 2226,
        "linearizedBaseContracts": [
          2226,
          4188
        ],
        "name": "BatchExchange",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 13,
            "libraryName": {
              "contractScope": null,
              "id": 11,
              "name": "SafeCast",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9804,
              "src": "808:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeCast_$9804",
                "typeString": "library SafeCast"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "802:27:0",
            "typeName": {
              "id": 12,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "821:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 16,
            "libraryName": {
              "contractScope": null,
              "id": 14,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8723,
              "src": "840:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$8723",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "834:27:0",
            "typeName": {
              "id": 15,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "853:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            }
          },
          {
            "id": 19,
            "libraryName": {
              "contractScope": null,
              "id": 17,
              "name": "BytesLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10227,
              "src": "872:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesLib_$10227",
                "typeString": "library BytesLib"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "866:27:0",
            "typeName": {
              "id": 18,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "885:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "id": 22,
            "libraryName": {
              "contractScope": null,
              "id": 20,
              "name": "BytesLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10227,
              "src": "904:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesLib_$10227",
                "typeString": "library BytesLib"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "898:25:0",
            "typeName": {
              "id": 21,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "917:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 26,
            "libraryName": {
              "contractScope": null,
              "id": 23,
              "name": "TokenConservation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4661,
              "src": "934:17:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenConservation_$4661",
                "typeString": "library TokenConservation"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "928:37:0",
            "typeName": {
              "baseType": {
                "id": 24,
                "name": "int256",
                "nodeType": "ElementaryTypeName",
                "src": "956:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_int256",
                  "typeString": "int256"
                }
              },
              "id": 25,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "956:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr",
                "typeString": "int256[]"
              }
            }
          },
          {
            "id": 30,
            "libraryName": {
              "contractScope": null,
              "id": 27,
              "name": "TokenConservation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4661,
              "src": "976:17:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenConservation_$4661",
                "typeString": "library TokenConservation"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "970:37:0",
            "typeName": {
              "baseType": {
                "id": 28,
                "name": "uint16",
                "nodeType": "ElementaryTypeName",
                "src": "998:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                }
              },
              "id": 29,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "998:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                "typeString": "uint16[]"
              }
            }
          },
          {
            "id": 33,
            "libraryName": {
              "contractScope": null,
              "id": 31,
              "name": "IterableAppendOnlySet",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6632,
              "src": "1018:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IterableAppendOnlySet_$6632",
                "typeString": "library IterableAppendOnlySet"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1012:59:0",
            "typeName": {
              "contractScope": null,
              "id": 32,
              "name": "IterableAppendOnlySet.Data",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6500,
              "src": "1044:26:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Data_$6500_storage_ptr",
                "typeString": "struct IterableAppendOnlySet.Data"
              }
            }
          },
          {
            "constant": true,
            "id": 36,
            "name": "MAX_TOUCHED_ORDERS",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1162:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 34,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1162:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3330",
              "id": 35,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1207:2:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_30_by_1",
                "typeString": "int_const 30"
              },
              "value": "30"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 39,
            "name": "FEE_FOR_LISTING_TOKEN_IN_OWL",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1263:63:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 37,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1263:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3130",
              "id": 38,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1318:8:0",
              "subdenomination": "ether",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000000000000000000_by_1",
                "typeString": "int_const 10000000000000000000"
              },
              "value": "10"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 44,
            "name": "AMOUNT_MINIMUM",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1420:46:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint128",
              "typeString": "uint128"
            },
            "typeName": {
              "id": 40,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "1420:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_10000_by_1",
                "typeString": "int_const 10000"
              },
              "id": 43,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "hexValue": "3130",
                "id": 41,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1461:2:0",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_10_by_1",
                  "typeString": "int_const 10"
                },
                "value": "10"
              },
              "nodeType": "BinaryOperation",
              "operator": "**",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "34",
                "id": 42,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1465:1:0",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_4_by_1",
                  "typeString": "int_const 4"
                },
                "value": "4"
              },
              "src": "1461:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000_by_1",
                "typeString": "int_const 10000"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 50,
            "name": "UNLIMITED_ORDER_AMOUNT",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1563:60:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint128",
              "typeString": "uint128"
            },
            "typeName": {
              "id": 45,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "1563:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 48,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1620:2:0",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 47,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1621:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_minus_1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_minus_1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 46,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1612:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint128_$",
                  "typeString": "type(uint128)"
                },
                "typeName": "uint128"
              },
              "id": 49,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1612:11:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 53,
            "name": "IMPROVEMENT_DENOMINATOR",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1787:53:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 51,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1787:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "313030",
              "id": 52,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1837:3:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100_by_1",
                "typeString": "int_const 100"
              },
              "value": "100"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 56,
            "name": "FEE_DENOMINATOR",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1958:46:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint128",
              "typeString": "uint128"
            },
            "typeName": {
              "id": 54,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "1958:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31303030",
              "id": 55,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2000:4:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000_by_1",
                "typeString": "int_const 1000"
              },
              "value": "1000"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 59,
            "name": "ENCODED_AUCTION_ELEMENT_WIDTH",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2091:59:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint128",
              "typeString": "uint128"
            },
            "typeName": {
              "id": 57,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "2091:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "313132",
              "id": 58,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2147:3:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_112_by_1",
                "typeString": "int_const 112"
              },
              "value": "112"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 61,
            "name": "MAX_TOKENS",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2282:25:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 60,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2282:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 63,
            "name": "numTokens",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2385:23:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 62,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "2385:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 65,
            "name": "feeToken",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2482:24:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_TokenOWL_$6270",
              "typeString": "contract TokenOWL"
            },
            "typeName": {
              "contractScope": null,
              "id": 64,
              "name": "TokenOWL",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6270,
              "src": "2482:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenOWL_$6270",
                "typeString": "contract TokenOWL"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 70,
            "name": "orders",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2611:41:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct BatchExchange.Order[])"
            },
            "typeName": {
              "id": 69,
              "keyType": {
                "id": 66,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2619:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2611:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct BatchExchange.Order[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 67,
                  "name": "Order",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 95,
                  "src": "2630:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                    "typeString": "struct BatchExchange.Order"
                  }
                },
                "id": 68,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2630:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage_ptr",
                  "typeString": "struct BatchExchange.Order[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 74,
            "name": "currentPrices",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2725:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
              "typeString": "mapping(uint16 => uint128)"
            },
            "typeName": {
              "id": 73,
              "keyType": {
                "id": 71,
                "name": "uint16",
                "nodeType": "ElementaryTypeName",
                "src": "2733:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                }
              },
              "nodeType": "Mapping",
              "src": "2725:26:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                "typeString": "mapping(uint16 => uint128)"
              },
              "valueType": {
                "id": 72,
                "name": "uint128",
                "nodeType": "ElementaryTypeName",
                "src": "2743:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 76,
            "name": "latestSolution",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2855:34:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_SolutionData_$117_storage",
              "typeString": "struct BatchExchange.SolutionData"
            },
            "typeName": {
              "contractScope": null,
              "id": 75,
              "name": "SolutionData",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 117,
              "src": "2855:12:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_SolutionData_$117_storage_ptr",
                "typeString": "struct BatchExchange.SolutionData"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 78,
            "name": "allUsers",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2970:43:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Data_$6500_storage",
              "typeString": "struct IterableAppendOnlySet.Data"
            },
            "typeName": {
              "contractScope": null,
              "id": 77,
              "name": "IterableAppendOnlySet.Data",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6500,
              "src": "2970:26:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Data_$6500_storage_ptr",
                "typeString": "struct IterableAppendOnlySet.Data"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 80,
            "name": "registeredTokens",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "3019:46:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Data_$6326_storage",
              "typeString": "struct IdToAddressBiMap.Data"
            },
            "typeName": {
              "contractScope": null,
              "id": 79,
              "name": "IdToAddressBiMap.Data",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6326,
              "src": "3019:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Data_$6326_storage_ptr",
                "typeString": "struct IdToAddressBiMap.Data"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "canonicalName": "BatchExchange.Order",
            "id": 95,
            "members": [
              {
                "constant": false,
                "id": 82,
                "name": "buyToken",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3095:15:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 81,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "3095:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 84,
                "name": "sellToken",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3120:16:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 83,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "3120:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 86,
                "name": "validFrom",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3146:16:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 85,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "3146:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 88,
                "name": "validUntil",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3242:17:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 87,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "3242:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 90,
                "name": "priceNumerator",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3340:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 89,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3340:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 92,
                "name": "priceDenominator",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3372:24:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 91,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3372:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 94,
                "name": "usedAmount",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3406:18:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 93,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3406:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Order",
            "nodeType": "StructDefinition",
            "scope": 2226,
            "src": "3072:410:0",
            "visibility": "public"
          },
          {
            "canonicalName": "BatchExchange.TradeData",
            "id": 102,
            "members": [
              {
                "constant": false,
                "id": 97,
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 102,
                "src": "3515:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 96,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3515:7:0",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 99,
                "name": "volume",
                "nodeType": "VariableDeclaration",
                "scope": 102,
                "src": "3538:14:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 98,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3538:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 101,
                "name": "orderId",
                "nodeType": "VariableDeclaration",
                "scope": 102,
                "src": "3562:14:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 100,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "3562:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TradeData",
            "nodeType": "StructDefinition",
            "scope": 2226,
            "src": "3488:95:0",
            "visibility": "public"
          },
          {
            "canonicalName": "BatchExchange.SolutionData",
            "id": 117,
            "members": [
              {
                "constant": false,
                "id": 104,
                "name": "batchId",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3619:14:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 103,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "3619:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 107,
                "name": "trades",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3643:18:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage_ptr",
                  "typeString": "struct BatchExchange.TradeData[]"
                },
                "typeName": {
                  "baseType": {
                    "contractScope": null,
                    "id": 105,
                    "name": "TradeData",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 102,
                    "src": "3643:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TradeData_$102_storage_ptr",
                      "typeString": "struct BatchExchange.TradeData"
                    }
                  },
                  "id": 106,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "3643:11:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage_ptr",
                    "typeString": "struct BatchExchange.TradeData[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 110,
                "name": "tokenIdsForPrice",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3671:25:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                  "typeString": "uint16[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 108,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3671:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 109,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "3671:8:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                    "typeString": "uint16[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 112,
                "name": "solutionSubmitter",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3706:25:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 111,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3706:7:0",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 114,
                "name": "feeReward",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3741:17:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 113,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3741:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 116,
                "name": "objectiveValue",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3768:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 115,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3768:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "SolutionData",
            "nodeType": "StructDefinition",
            "scope": 2226,
            "src": "3589:208:0",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 135,
            "name": "OrderPlacement",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 119,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3833:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3833:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 121,
                  "indexed": false,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3864:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 120,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3864:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 123,
                  "indexed": true,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3886:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 122,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3886:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 125,
                  "indexed": true,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3919:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 124,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3919:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 127,
                  "indexed": false,
                  "name": "validFrom",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3953:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 126,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3953:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 129,
                  "indexed": false,
                  "name": "validUntil",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3979:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 128,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3979:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 131,
                  "indexed": false,
                  "name": "priceNumerator",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "4006:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 130,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4006:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 133,
                  "indexed": false,
                  "name": "priceDenominator",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "4038:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 132,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4038:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3823:245:0"
            },
            "src": "3803:266:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 141,
            "name": "TokenListing",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 137,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 141,
                  "src": "4094:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 136,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4094:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 139,
                  "indexed": false,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 141,
                  "src": "4109:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 138,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4109:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4093:26:0"
            },
            "src": "4075:45:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted when an order is cancelled but still valid in the batch that is\ncurrently being solved. It remains in storage but will not be tradable in any future\nbatch to be solved.",
            "id": 147,
            "name": "OrderCancellation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 146,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 143,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 147,
                  "src": "4368:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 142,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4368:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 145,
                  "indexed": false,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 147,
                  "src": "4391:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 144,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4391:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4367:34:0"
            },
            "src": "4344:58:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted when an order is removed from storage.",
            "id": 153,
            "name": "OrderDeletion",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 149,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 153,
                  "src": "4502:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4502:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 151,
                  "indexed": false,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 153,
                  "src": "4525:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 150,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4525:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4501:34:0"
            },
            "src": "4482:54:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted when a new trade is settled",
            "id": 167,
            "name": "Trade",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 155,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4626:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 154,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4626:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 157,
                  "indexed": true,
                  "name": "orderId",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4657:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 156,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4657:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 159,
                  "indexed": true,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4689:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 158,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4689:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 161,
                  "indexed": false,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4781:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 160,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4781:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 163,
                  "indexed": false,
                  "name": "executedSellAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4806:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 162,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4806:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 165,
                  "indexed": false,
                  "name": "executedBuyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4842:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 164,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4842:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4616:257:0"
            },
            "src": "4605:269:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted when an already exectued trade gets reverted",
            "id": 181,
            "name": "TradeReversion",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 180,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 169,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "4990:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 168,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4990:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 171,
                  "indexed": true,
                  "name": "orderId",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5021:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 170,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5021:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 173,
                  "indexed": true,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5053:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 172,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5053:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 175,
                  "indexed": false,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5145:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 174,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5145:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 177,
                  "indexed": false,
                  "name": "executedSellAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5170:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 176,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5170:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 179,
                  "indexed": false,
                  "name": "executedBuyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5206:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 178,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5206:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4980:257:0"
            },
            "src": "4960:278:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted for each solution that is submitted",
            "id": 199,
            "name": "SolutionSubmission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 183,
                  "indexed": true,
                  "name": "submitter",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5349:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 182,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5349:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 185,
                  "indexed": false,
                  "name": "utility",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5384:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5384:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 187,
                  "indexed": false,
                  "name": "disregardedUtility",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5409:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 186,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5409:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 189,
                  "indexed": false,
                  "name": "burntFees",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5445:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 188,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5445:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 191,
                  "indexed": false,
                  "name": "lastAuctionBurntFees",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5472:28:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 190,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5472:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 194,
                  "indexed": false,
                  "name": "prices",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5510:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 192,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "5510:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 193,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5510:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 197,
                  "indexed": false,
                  "name": "tokenIdsForPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5536:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 195,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "5536:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 196,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5536:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5339:228:0"
            },
            "src": "5315:253:0"
          },
          {
            "body": {
              "id": 238,
              "nodeType": "Block",
              "src": "5820:575:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 206,
                        "name": "currentPrices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 74,
                        "src": "6016:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                          "typeString": "mapping(uint16 => uint128)"
                        }
                      },
                      "id": 208,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6030:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6016:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 209,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6035:7:0",
                      "subdenomination": "ether",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1000000000000000000_by_1",
                        "typeString": "int_const 1000000000000000000"
                      },
                      "value": "1"
                    },
                    "src": "6016:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 211,
                  "nodeType": "ExpressionStatement",
                  "src": "6016:26:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 212,
                      "name": "MAX_TOKENS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61,
                      "src": "6052:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 213,
                      "name": "maxTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 201,
                      "src": "6065:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6052:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 215,
                  "nodeType": "ExpressionStatement",
                  "src": "6052:22:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 216,
                      "name": "feeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65,
                      "src": "6084:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TokenOWL_$6270",
                        "typeString": "contract TokenOWL"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 218,
                          "name": "_feeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 203,
                          "src": "6104:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 217,
                        "name": "TokenOWL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6270,
                        "src": "6095:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TokenOWL_$6270_$",
                          "typeString": "type(contract TokenOWL)"
                        }
                      },
                      "id": 219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6095:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TokenOWL_$6270",
                        "typeString": "contract TokenOWL"
                      }
                    },
                    "src": "6084:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TokenOWL_$6270",
                      "typeString": "contract TokenOWL"
                    }
                  },
                  "id": 221,
                  "nodeType": "ExpressionStatement",
                  "src": "6084:30:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 226,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10294,
                            "src": "6293:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BatchExchange_$2226",
                              "typeString": "contract BatchExchange"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_BatchExchange_$2226",
                              "typeString": "contract BatchExchange"
                            }
                          ],
                          "id": 225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6285:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6285:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "6308:2:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 229,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6309:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_minus_1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_minus_1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6300:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6300:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 222,
                        "name": "feeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65,
                        "src": "6268:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenOWL_$6270",
                          "typeString": "contract TokenOWL"
                        }
                      },
                      "id": 224,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6807,
                      "src": "6268:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6268:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 233,
                  "nodeType": "ExpressionStatement",
                  "src": "6268:44:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 235,
                        "name": "_feeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 203,
                        "src": "6331:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 234,
                      "name": "addToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 283,
                      "src": "6322:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6322:19:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 237,
                  "nodeType": "ExpressionStatement",
                  "src": "6322:19:0"
                }
              ]
            },
            "documentation": "@dev Constructor determines exchange parameters\n@param maxTokens The maximum number of tokens that can be listed.\n@param _feeToken Address of ERC20 fee token.",
            "id": 239,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 201,
                  "name": "maxTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "5775:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 200,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5775:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 203,
                  "name": "_feeToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "5794:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 202,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5794:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5774:38:0"
            },
            "returnParameters": {
              "id": 205,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5820:0:0"
            },
            "scope": 2226,
            "src": "5763:632:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 282,
              "nodeType": "Block",
              "src": "6727:428:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 245,
                          "name": "numTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 63,
                          "src": "6745:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 246,
                          "name": "MAX_TOKENS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61,
                          "src": "6757:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6745:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d617820746f6b656e732072656163686564",
                        "id": 248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6769:20:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_14b9947d46e0b2554569c19973b701cdfb35f201a3f5beb5e896a20526ce01a7",
                          "typeString": "literal_string \"Max tokens reached\""
                        },
                        "value": "Max tokens reached"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_14b9947d46e0b2554569c19973b701cdfb35f201a3f5beb5e896a20526ce01a7",
                          "typeString": "literal_string \"Max tokens reached\""
                        }
                      ],
                      "id": 244,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "6737:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6737:53:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 250,
                  "nodeType": "ExpressionStatement",
                  "src": "6737:53:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 251,
                      "name": "numTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63,
                      "src": "6804:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6816:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6804:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 263,
                  "nodeType": "IfStatement",
                  "src": "6800:177:0",
                  "trueBody": {
                    "id": 262,
                    "nodeType": "Block",
                    "src": "6819:158:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 257,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10242,
                                "src": "6925:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6925:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 259,
                              "name": "FEE_FOR_LISTING_TOKEN_IN_OWL",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39,
                              "src": "6937:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 254,
                              "name": "feeToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 65,
                              "src": "6908:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TokenOWL_$6270",
                                "typeString": "contract TokenOWL"
                              }
                            },
                            "id": 256,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "burnOWL",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6255,
                            "src": "6908:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6908:58:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 261,
                        "nodeType": "ExpressionStatement",
                        "src": "6908:58:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 267,
                            "name": "registeredTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 80,
                            "src": "7018:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 268,
                            "name": "numTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63,
                            "src": "7036:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 269,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 241,
                            "src": "7047:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 265,
                            "name": "IdToAddressBiMap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6489,
                            "src": "6994:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                              "typeString": "type(library IdToAddressBiMap)"
                            }
                          },
                          "id": 266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "insert",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6488,
                          "src": "6994:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Data_$6326_storage_ptr_$_t_uint16_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (struct IdToAddressBiMap.Data storage pointer,uint16,address) returns (bool)"
                          }
                        },
                        "id": 270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6994:59:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e20616c72656164792072656769737465726564",
                        "id": 271,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7055:26:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ea414700a52192d3051efb9564a39df2d4fbeb5f4f4c66f00a6b0d737b48522b",
                          "typeString": "literal_string \"Token already registered\""
                        },
                        "value": "Token already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ea414700a52192d3051efb9564a39df2d4fbeb5f4f4c66f00a6b0d737b48522b",
                          "typeString": "literal_string \"Token already registered\""
                        }
                      ],
                      "id": 264,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "6986:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6986:96:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 273,
                  "nodeType": "ExpressionStatement",
                  "src": "6986:96:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 275,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 241,
                        "src": "7110:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 276,
                        "name": "numTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63,
                        "src": "7117:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 274,
                      "name": "TokenListing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 141,
                      "src": "7097:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$",
                        "typeString": "function (address,uint16)"
                      }
                    },
                    "id": 277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7097:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 278,
                  "nodeType": "EmitStatement",
                  "src": "7092:35:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "7137:11:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 279,
                      "name": "numTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63,
                      "src": "7137:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 281,
                  "nodeType": "ExpressionStatement",
                  "src": "7137:11:0"
                }
              ]
            },
            "documentation": "@dev Used to list a new token on the contract: Hence, making it available for exchange in an auction.\n@param token ERC20 token to be listed.\n     * Requirements:\n- `maxTokens` has not already been reached\n- `token` has not already been added",
            "id": 283,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 241,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 283,
                  "src": "6705:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6705:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6704:15:0"
            },
            "returnParameters": {
              "id": 243,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6727:0:0"
            },
            "scope": 2226,
            "src": "6687:468:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 308,
              "nodeType": "Block",
              "src": "7906:119:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 299,
                        "name": "buyToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 285,
                        "src": "7942:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 300,
                        "name": "sellToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 287,
                        "src": "7952:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 301,
                          "name": "getCurrentBatchId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3888,
                          "src": "7963:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                            "typeString": "function () view returns (uint32)"
                          }
                        },
                        "id": 302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7963:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 303,
                        "name": "validUntil",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 289,
                        "src": "7984:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 304,
                        "name": "buyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 291,
                        "src": "7996:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 305,
                        "name": "sellAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 293,
                        "src": "8007:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 298,
                      "name": "placeOrderInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1365,
                      "src": "7923:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint16_$_t_uint16_$_t_uint32_$_t_uint32_$_t_uint128_$_t_uint128_$returns$_t_uint16_$",
                        "typeString": "function (uint16,uint16,uint32,uint32,uint128,uint128) returns (uint16)"
                      }
                    },
                    "id": 306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7923:95:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 297,
                  "id": 307,
                  "nodeType": "Return",
                  "src": "7916:102:0"
                }
              ]
            },
            "documentation": "@dev A user facing function used to place limit sell orders in auction with expiry defined by batchId\n@param buyToken id of token to be bought\n@param sellToken id of token to be sold\n@param validUntil batchId representing order's expiry\n@param buyAmount relative minimum amount of requested buy amount\n@param sellAmount maximum amount of sell token to be exchanged\n@return orderId defined as the index in user's order array\n     * Emits an {OrderPlacement} event with all relevant order details.",
            "id": 309,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "placeOrder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 285,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7751:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 284,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "7751:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 287,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7776:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 286,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "7776:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 289,
                  "name": "validUntil",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7802:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 288,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7802:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 291,
                  "name": "buyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7829:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 290,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "7829:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 293,
                  "name": "sellAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7856:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 292,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "7856:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7741:139:0"
            },
            "returnParameters": {
              "id": 297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 296,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7897:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 295,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7897:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7896:9:0"
            },
            "scope": 2226,
            "src": "7722:303:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 380,
              "nodeType": "Block",
              "src": "9091:372:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 333,
                      "name": "orderIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 331,
                      "src": "9101:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                        "typeString": "uint16[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 337,
                            "name": "buyTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 312,
                            "src": "9125:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                              "typeString": "uint16[] memory"
                            }
                          },
                          "id": 338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9125:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "9112:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint16_$dyn_memory_$",
                          "typeString": "function (uint256) pure returns (uint16[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 334,
                            "name": "uint16",
                            "nodeType": "ElementaryTypeName",
                            "src": "9116:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "id": 335,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "9116:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                            "typeString": "uint16[]"
                          }
                        }
                      },
                      "id": 339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9112:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory",
                        "typeString": "uint16[] memory"
                      }
                    },
                    "src": "9101:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                      "typeString": "uint16[] memory"
                    }
                  },
                  "id": 341,
                  "nodeType": "ExpressionStatement",
                  "src": "9101:41:0"
                },
                {
                  "body": {
                    "id": 378,
                    "nodeType": "Block",
                    "src": "9199:258:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 353,
                              "name": "orderIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 331,
                              "src": "9213:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              }
                            },
                            "id": 355,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 354,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 343,
                              "src": "9222:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9213:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 357,
                                  "name": "buyTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 312,
                                  "src": "9263:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                    "typeString": "uint16[] memory"
                                  }
                                },
                                "id": 359,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 358,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9273:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9263:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 360,
                                  "name": "sellTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 315,
                                  "src": "9293:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                    "typeString": "uint16[] memory"
                                  }
                                },
                                "id": 362,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 361,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9304:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9293:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 363,
                                  "name": "validFroms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 318,
                                  "src": "9324:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 365,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 364,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9335:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9324:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 366,
                                  "name": "validUntils",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 321,
                                  "src": "9355:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 368,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 367,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9367:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9355:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 369,
                                  "name": "buyAmounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 324,
                                  "src": "9387:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                    "typeString": "uint128[] memory"
                                  }
                                },
                                "id": 371,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 370,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9398:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9387:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 372,
                                  "name": "sellAmounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 327,
                                  "src": "9418:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                    "typeString": "uint128[] memory"
                                  }
                                },
                                "id": 374,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 373,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9430:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9418:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "id": 356,
                              "name": "placeOrderInternal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1365,
                              "src": "9227:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint16_$_t_uint16_$_t_uint32_$_t_uint32_$_t_uint128_$_t_uint128_$returns$_t_uint16_$",
                                "typeString": "function (uint16,uint16,uint32,uint32,uint128,uint128) returns (uint16)"
                              }
                            },
                            "id": 375,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9227:219:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "9213:233:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 377,
                        "nodeType": "ExpressionStatement",
                        "src": "9213:233:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 346,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 343,
                      "src": "9172:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 347,
                        "name": "buyTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 312,
                        "src": "9176:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      "id": 348,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9176:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9172:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 379,
                  "initializationExpression": {
                    "assignments": [
                      343
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 343,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 379,
                        "src": "9157:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 342,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9157:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 345,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9169:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "9157:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 351,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "9194:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 350,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 343,
                        "src": "9194:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 352,
                    "nodeType": "ExpressionStatement",
                    "src": "9194:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "9152:305:0"
                }
              ]
            },
            "documentation": "@dev A user facing function used to place limit sell orders in auction with expiry defined by batchId\nNote that parameters are passed as arrays and the indices correspond to each order.\n@param buyTokens ids of tokens to be bought\n@param sellTokens ids of tokens to be sold\n@param validFroms batchIds representing order's validity start time\n@param validUntils batchIds representing order's expiry\n@param buyAmounts relative minimum amount of requested buy amounts\n@param sellAmounts maximum amounts of sell token to be exchanged\n@return `orderIds` an array of indices in which `msg.sender`'s orders are included\n     * Emits an {OrderPlacement} event with all relevant order details.",
            "id": 381,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "placeValidFromOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 312,
                  "name": "buyTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8833:25:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 310,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "8833:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 311,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8833:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 315,
                  "name": "sellTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8868:26:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 313,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "8868:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 314,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8868:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 318,
                  "name": "validFroms",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8904:26:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 316,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "8904:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 317,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8904:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 321,
                  "name": "validUntils",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8940:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 319,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "8940:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 320,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8940:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 324,
                  "name": "buyAmounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8977:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 322,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "8977:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 323,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8977:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 327,
                  "name": "sellAmounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "9014:28:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 325,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "9014:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 326,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9014:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8823:225:0"
            },
            "returnParameters": {
              "id": 332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 331,
                  "name": "orderIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "9065:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 329,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "9065:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 330,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9065:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9064:26:0"
            },
            "scope": 2226,
            "src": "8794:669:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 460,
              "nodeType": "Block",
              "src": "10018:523:0",
              "statements": [
                {
                  "assignments": [
                    388
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 388,
                      "name": "batchIdBeingSolved",
                      "nodeType": "VariableDeclaration",
                      "scope": 460,
                      "src": "10028:25:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 387,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "10028:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 393,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 389,
                        "name": "getCurrentBatchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3888,
                        "src": "10056:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                          "typeString": "function () view returns (uint32)"
                        }
                      },
                      "id": 390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10056:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10078:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "10056:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10028:51:0"
                },
                {
                  "body": {
                    "id": 458,
                    "nodeType": "Block",
                    "src": "10134:401:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "10152:72:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 406,
                                    "name": "orders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70,
                                    "src": "10172:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                      "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 409,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 407,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10242,
                                      "src": "10179:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 408,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10179:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10172:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                    "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                  }
                                },
                                "id": 413,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 410,
                                    "name": "orderIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 384,
                                    "src": "10191:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                      "typeString": "uint16[] memory"
                                    }
                                  },
                                  "id": 412,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 411,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 395,
                                    "src": "10200:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10191:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10172:31:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_storage",
                                  "typeString": "struct BatchExchange.Order storage ref"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 414,
                                "name": "batchIdBeingSolved",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 388,
                                "src": "10205:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Order_$95_storage",
                                  "typeString": "struct BatchExchange.Order storage ref"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 405,
                              "name": "checkOrderValidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2069,
                              "src": "10153:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$_t_uint32_$returns$_t_bool_$",
                                "typeString": "function (struct BatchExchange.Order memory,uint32) pure returns (bool)"
                              }
                            },
                            "id": 415,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10153:71:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 456,
                          "nodeType": "Block",
                          "src": "10364:161:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 446,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 436,
                                        "name": "orders",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 70,
                                        "src": "10382:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                          "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 442,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 437,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10242,
                                          "src": "10389:3:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 438,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10389:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "10382:18:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                        "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                      }
                                    },
                                    "id": 443,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 439,
                                        "name": "orderIds",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 384,
                                        "src": "10401:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                          "typeString": "uint16[] memory"
                                        }
                                      },
                                      "id": 441,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 440,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 395,
                                        "src": "10410:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "10401:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10382:31:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    }
                                  },
                                  "id": 444,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "validUntil",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 88,
                                  "src": "10382:42:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 445,
                                  "name": "batchIdBeingSolved",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 388,
                                  "src": "10427:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "10382:63:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 447,
                              "nodeType": "ExpressionStatement",
                              "src": "10382:63:0"
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 449,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10242,
                                      "src": "10486:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 450,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10486:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 451,
                                      "name": "orderIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 384,
                                      "src": "10498:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                        "typeString": "uint16[] memory"
                                      }
                                    },
                                    "id": 453,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 452,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 395,
                                      "src": "10507:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10498:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "id": 448,
                                  "name": "OrderCancellation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 147,
                                  "src": "10468:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$",
                                    "typeString": "function (address,uint16)"
                                  }
                                },
                                "id": 454,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10468:42:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 455,
                              "nodeType": "EmitStatement",
                              "src": "10463:47:0"
                            }
                          ]
                        },
                        "id": 457,
                        "nodeType": "IfStatement",
                        "src": "10148:377:0",
                        "trueBody": {
                          "id": 435,
                          "nodeType": "Block",
                          "src": "10226:132:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 425,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "10244:38:0",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 417,
                                      "name": "orders",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 70,
                                      "src": "10251:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                        "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                      }
                                    },
                                    "id": 420,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 418,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10242,
                                        "src": "10258:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 419,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "10258:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10251:18:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                    }
                                  },
                                  "id": 424,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 421,
                                      "name": "orderIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 384,
                                      "src": "10270:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                        "typeString": "uint16[] memory"
                                      }
                                    },
                                    "id": 423,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 422,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 395,
                                      "src": "10279:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10270:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10251:31:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_storage",
                                    "typeString": "struct BatchExchange.Order storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 426,
                              "nodeType": "ExpressionStatement",
                              "src": "10244:38:0"
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 428,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10242,
                                      "src": "10319:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 429,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10319:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 430,
                                      "name": "orderIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 384,
                                      "src": "10331:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                        "typeString": "uint16[] memory"
                                      }
                                    },
                                    "id": 432,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 431,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 395,
                                      "src": "10340:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10331:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "id": 427,
                                  "name": "OrderDeletion",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 153,
                                  "src": "10305:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$",
                                    "typeString": "function (address,uint16)"
                                  }
                                },
                                "id": 433,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10305:38:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 434,
                              "nodeType": "EmitStatement",
                              "src": "10300:43:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 398,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 395,
                      "src": "10108:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 399,
                        "name": "orderIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 384,
                        "src": "10112:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      "id": 400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10112:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10108:19:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 459,
                  "initializationExpression": {
                    "assignments": [
                      395
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 395,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 459,
                        "src": "10094:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 394,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "10094:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 397,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 396,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10105:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10094:12:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10129:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 402,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 395,
                        "src": "10129:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 404,
                    "nodeType": "ExpressionStatement",
                    "src": "10129:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "10089:446:0"
                }
              ]
            },
            "documentation": "@dev a user facing function used to cancel orders. If the order is valid for the batch that is currently\nbeing solved, it sets order expiry to that batchId. Otherwise it removes it from storage. Can be called\nmultiple times (e.g. to eventually free storage once order is expired).\n     * @param orderIds referencing the indices of user's orders to be cancelled\n     * Emits an {OrderCancellation} or {OrderDeletion} with sender's address and orderId",
            "id": 461,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cancelOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 384,
                  "name": "orderIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 461,
                  "src": "9985:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 382,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "9985:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 383,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9985:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9984:26:0"
            },
            "returnParameters": {
              "id": 386,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10018:0:0"
            },
            "scope": 2226,
            "src": "9963:578:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 501,
              "nodeType": "Block",
              "src": "11713:154:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 489,
                        "name": "cancellations",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 464,
                        "src": "11736:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "id": 488,
                      "name": "cancelOrders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 461,
                      "src": "11723:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint16_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint16[] memory)"
                      }
                    },
                    "id": 490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11723:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 491,
                  "nodeType": "ExpressionStatement",
                  "src": "11723:27:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 493,
                        "name": "buyTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 467,
                        "src": "11788:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 494,
                        "name": "sellTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 470,
                        "src": "11799:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 495,
                        "name": "validFroms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 473,
                        "src": "11811:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 496,
                        "name": "validUntils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 476,
                        "src": "11823:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 497,
                        "name": "buyAmounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 479,
                        "src": "11836:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 498,
                        "name": "sellAmounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 482,
                        "src": "11848:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      ],
                      "id": 492,
                      "name": "placeValidFromOrders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 381,
                      "src": "11767:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint16_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_array$_t_uint128_$dyn_memory_ptr_$_t_array$_t_uint128_$dyn_memory_ptr_$returns$_t_array$_t_uint16_$dyn_memory_ptr_$",
                        "typeString": "function (uint16[] memory,uint16[] memory,uint32[] memory,uint32[] memory,uint128[] memory,uint128[] memory) returns (uint16[] memory)"
                      }
                    },
                    "id": 499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11767:93:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                      "typeString": "uint16[] memory"
                    }
                  },
                  "functionReturnParameters": 487,
                  "id": 500,
                  "nodeType": "Return",
                  "src": "11760:100:0"
                }
              ]
            },
            "documentation": "@dev A user facing wrapper to cancel and place new orders in the same transaction.\n@param cancellations indices of orders to be cancelled\n@param buyTokens ids of tokens to be bought in new orders\n@param sellTokens ids of tokens to be sold in new orders\n@param validFroms batchIds representing order's validity start time in new orders\n@param validUntils batchIds represnnting order's expiry in new orders\n@param buyAmounts relative minimum amount of requested buy amounts in new orders\n@param sellAmounts maximum amounts of sell token to be exchanged in new orders\n@return an array of indices in which `msg.sender`'s new orders are included\n     * Emits {OrderCancellation} events for all cancelled orders and {OrderPlacement} events with relevant new order details.",
            "id": 502,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "replaceOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 464,
                  "name": "cancellations",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11425:29:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 462,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "11425:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 463,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11425:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 467,
                  "name": "buyTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11464:25:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 465,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "11464:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 466,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11464:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 470,
                  "name": "sellTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11499:26:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 468,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "11499:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 469,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11499:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 473,
                  "name": "validFroms",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11535:26:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 471,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11535:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 472,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11535:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 476,
                  "name": "validUntils",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11571:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 474,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11571:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 475,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11571:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 479,
                  "name": "buyAmounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11608:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 477,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "11608:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 478,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11608:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 482,
                  "name": "sellAmounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11645:28:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 480,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "11645:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 481,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11645:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11415:264:0"
            },
            "returnParameters": {
              "id": 487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 486,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11696:15:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 484,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "11696:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 485,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11696:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11695:17:0"
            },
            "scope": 2226,
            "src": "11393:474:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 878,
              "nodeType": "Block",
              "src": "13716:4376:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 528,
                            "name": "batchId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 504,
                            "src": "13753:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "id": 527,
                          "name": "acceptingSolutions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1243,
                          "src": "13734:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint32_$returns$_t_bool_$",
                            "typeString": "function (uint32) view returns (bool)"
                          }
                        },
                        "id": 529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13734:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "536f6c7574696f6e7320617265206e6f206c6f6e67657220616363657074656420666f722074686973206261746368",
                        "id": 530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13763:49:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_51684e98cbf936ef3c6a3fc0a80886b45545ee6ee550f890d429af460d2f23a7",
                          "typeString": "literal_string \"Solutions are no longer accepted for this batch\""
                        },
                        "value": "Solutions are no longer accepted for this batch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_51684e98cbf936ef3c6a3fc0a80886b45545ee6ee550f890d429af460d2f23a7",
                          "typeString": "literal_string \"Solutions are no longer accepted for this batch\""
                        }
                      ],
                      "id": 526,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "13726:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13726:87:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 532,
                  "nodeType": "ExpressionStatement",
                  "src": "13726:87:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 535,
                            "name": "claimedObjectiveValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 506,
                            "src": "13881:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 534,
                          "name": "isObjectiveValueSufficientlyImproved",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2049,
                          "src": "13844:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 536,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13844:59:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "436c61696d6564206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e",
                        "id": 537,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13917:65:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_af9180cbf532e57d643b8957ba6f1ff9ed71c98f7bad71bebda754db19d29ccf",
                          "typeString": "literal_string \"Claimed objective doesn't sufficiently improve current solution\""
                        },
                        "value": "Claimed objective doesn't sufficiently improve current solution"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_af9180cbf532e57d643b8957ba6f1ff9ed71c98f7bad71bebda754db19d29ccf",
                          "typeString": "literal_string \"Claimed objective doesn't sufficiently improve current solution\""
                        }
                      ],
                      "id": 533,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "13823:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13823:169:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 539,
                  "nodeType": "ExpressionStatement",
                  "src": "13823:169:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 542,
                            "name": "prices",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 518,
                            "src": "14032:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                              "typeString": "uint128[] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                              "typeString": "uint128[] memory"
                            }
                          ],
                          "id": 541,
                          "name": "verifyAmountThreshold",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2225,
                          "src": "14010:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint128_$dyn_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint128[] memory) pure returns (bool)"
                          }
                        },
                        "id": 543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14010:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4174206c65617374206f6e65207072696365206c6f776572207468616e20414d4f554e545f4d494e494d554d",
                        "id": 544,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14041:46:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7198c54125f125258e89cbb4e9487637af4f5a787bc54f4e577b773c055f8df4",
                          "typeString": "literal_string \"At least one price lower than AMOUNT_MINIMUM\""
                        },
                        "value": "At least one price lower than AMOUNT_MINIMUM"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7198c54125f125258e89cbb4e9487637af4f5a787bc54f4e577b773c055f8df4",
                          "typeString": "literal_string \"At least one price lower than AMOUNT_MINIMUM\""
                        }
                      ],
                      "id": 540,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "14002:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14002:86:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 546,
                  "nodeType": "ExpressionStatement",
                  "src": "14002:86:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 548,
                            "name": "tokenIdsForPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 521,
                            "src": "14106:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                              "typeString": "uint16[] memory"
                            }
                          },
                          "id": 550,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 549,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14123:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14106:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14129:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14106:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46656520746f6b656e2068617320666978656420707269636521",
                        "id": 553,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14132:28:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f7520ae921cf9d6c86aea304539b1a547409be723693ad6177f07f7a6cdcd497",
                          "typeString": "literal_string \"Fee token has fixed price!\""
                        },
                        "value": "Fee token has fixed price!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f7520ae921cf9d6c86aea304539b1a547409be723693ad6177f07f7a6cdcd497",
                          "typeString": "literal_string \"Fee token has fixed price!\""
                        }
                      ],
                      "id": 547,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "14098:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14098:63:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 555,
                  "nodeType": "ExpressionStatement",
                  "src": "14098:63:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 557,
                            "name": "tokenIdsForPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 521,
                            "src": "14179:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                              "typeString": "uint16[] memory"
                            }
                          },
                          "id": 558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "checkPriceOrdering",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4582,
                          "src": "14179:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint16_$dyn_memory_ptr_$returns$_t_bool_$bound_to$_t_array$_t_uint16_$dyn_memory_ptr_$",
                            "typeString": "function (uint16[] memory) pure returns (bool)"
                          }
                        },
                        "id": 559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14179:37:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "70726963657320617265206e6f74206f72646572656420627920746f6b656e4964",
                        "id": 560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14218:35:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9137b0eef713f85f0680ca54e972c7b1f38a7eb175fa3940122f7db874d7f0af",
                          "typeString": "literal_string \"prices are not ordered by tokenId\""
                        },
                        "value": "prices are not ordered by tokenId"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9137b0eef713f85f0680ca54e972c7b1f38a7eb175fa3940122f7db874d7f0af",
                          "typeString": "literal_string \"prices are not ordered by tokenId\""
                        }
                      ],
                      "id": 556,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "14171:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14171:83:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 562,
                  "nodeType": "ExpressionStatement",
                  "src": "14171:83:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 564,
                            "name": "owners",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 509,
                            "src": "14272:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14272:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 566,
                          "name": "MAX_TOUCHED_ORDERS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 36,
                          "src": "14289:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14272:35:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "536f6c7574696f6e2065786365656473204d41585f544f55434845445f4f5244455253",
                        "id": 568,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14309:37:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4068888da565135ea3a72329287ecf6d57e8dfce0ccf8d5667597d10d58db9f6",
                          "typeString": "literal_string \"Solution exceeds MAX_TOUCHED_ORDERS\""
                        },
                        "value": "Solution exceeds MAX_TOUCHED_ORDERS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4068888da565135ea3a72329287ecf6d57e8dfce0ccf8d5667597d10d58db9f6",
                          "typeString": "literal_string \"Solution exceeds MAX_TOUCHED_ORDERS\""
                        }
                      ],
                      "id": 563,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "14264:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14264:83:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 570,
                  "nodeType": "ExpressionStatement",
                  "src": "14264:83:0"
                },
                {
                  "assignments": [
                    572
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 572,
                      "name": "lastAuctionBurntFees",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "14671:28:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 571,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14671:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 575,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 573,
                      "name": "burnPreviousAuctionFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1412,
                      "src": "14702:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14702:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14671:56:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 576,
                      "name": "undoCurrentSolution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1783,
                      "src": "14737:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14737:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 578,
                  "nodeType": "ExpressionStatement",
                  "src": "14737:21:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 580,
                        "name": "prices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "14788:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 581,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "14796:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "id": 579,
                      "name": "updateCurrentPrices",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1468,
                      "src": "14768:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint128_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint128[] memory,uint16[] memory)"
                      }
                    },
                    "id": 582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14768:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 583,
                  "nodeType": "ExpressionStatement",
                  "src": "14768:45:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 586,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "14823:28:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 584,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "14830:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 585,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "trades",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 107,
                      "src": "14830:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                        "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 587,
                  "nodeType": "ExpressionStatement",
                  "src": "14823:28:0"
                },
                {
                  "assignments": [
                    591
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 591,
                      "name": "tokenConservation",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "14861:33:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                        "typeString": "int256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 589,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14861:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 590,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "14861:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr",
                          "typeString": "int256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 596,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 594,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "14920:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 592,
                        "name": "TokenConservation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4661,
                        "src": "14897:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TokenConservation_$4661_$",
                          "typeString": "type(library TokenConservation)"
                        }
                      },
                      "id": 593,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "init",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4436,
                      "src": "14897:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint16_$dyn_memory_ptr_$returns$_t_array$_t_int256_$dyn_memory_ptr_$",
                        "typeString": "function (uint16[] memory) pure returns (int256[] memory)"
                      }
                    },
                    "id": 595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14897:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                      "typeString": "int256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14861:76:0"
                },
                {
                  "assignments": [
                    598
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 598,
                      "name": "utility",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "14947:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 597,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14947:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 600,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14965:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14947:19:0"
                },
                {
                  "body": {
                    "id": 739,
                    "nodeType": "Block",
                    "src": "15020:1682:0",
                    "statements": [
                      {
                        "assignments": [
                          613
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 613,
                            "name": "order",
                            "nodeType": "VariableDeclaration",
                            "scope": 739,
                            "src": "15034:18:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 612,
                              "name": "Order",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 95,
                              "src": "15034:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                                "typeString": "struct BatchExchange.Order"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 623,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 614,
                              "name": "orders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70,
                              "src": "15055:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                              }
                            },
                            "id": 618,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 615,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "15062:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 617,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 616,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "15069:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15062:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15055:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                              "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                            }
                          },
                          "id": 622,
                          "indexExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 619,
                              "name": "orderIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 512,
                              "src": "15073:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              }
                            },
                            "id": 621,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 620,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 602,
                              "src": "15082:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15073:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "15055:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_storage",
                            "typeString": "struct BatchExchange.Order storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15034:51:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 626,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 613,
                                  "src": "15126:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 627,
                                  "name": "batchId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 504,
                                  "src": "15133:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  },
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                ],
                                "id": 625,
                                "name": "checkOrderValidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2069,
                                "src": "15107:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$_t_uint32_$returns$_t_bool_$",
                                  "typeString": "function (struct BatchExchange.Order memory,uint32) pure returns (bool)"
                                }
                              },
                              "id": 628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15107:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4f7264657220697320696e76616c6964",
                              "id": 629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15143:18:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_511d1db0236a0f511515697c7be4b91f460b8ec81b93aa7463958766cc07090c",
                                "typeString": "literal_string \"Order is invalid\""
                              },
                              "value": "Order is invalid"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_511d1db0236a0f511515697c7be4b91f460b8ec81b93aa7463958766cc07090c",
                                "typeString": "literal_string \"Order is invalid\""
                              }
                            ],
                            "id": 624,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "15099:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15099:63:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 631,
                        "nodeType": "ExpressionStatement",
                        "src": "15099:63:0"
                      },
                      {
                        "assignments": [
                          633,
                          635
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 633,
                            "name": "executedBuyAmount",
                            "nodeType": "VariableDeclaration",
                            "scope": 739,
                            "src": "15177:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            "typeName": {
                              "id": 632,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "15177:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 635,
                            "name": "executedSellAmount",
                            "nodeType": "VariableDeclaration",
                            "scope": 739,
                            "src": "15204:26:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            "typeName": {
                              "id": 634,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "15204:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 642,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 637,
                                "name": "buyVolumes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 515,
                                "src": "15251:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                  "typeString": "uint128[] memory"
                                }
                              },
                              "id": 639,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 638,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "15262:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15251:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 640,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 613,
                              "src": "15266:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                "typeString": "struct BatchExchange.Order memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                "typeString": "struct BatchExchange.Order memory"
                              }
                            ],
                            "id": 636,
                            "name": "getTradedAmounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2027,
                            "src": "15234:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$_t_uint128_$",
                              "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint128,uint128)"
                            }
                          },
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15234:38:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                            "typeString": "tuple(uint128,uint128)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15176:96:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 646,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 644,
                                "name": "executedBuyAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 633,
                                "src": "15294:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 645,
                                "name": "AMOUNT_MINIMUM",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44,
                                "src": "15315:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "15294:35:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "62757920616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d",
                              "id": 647,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15331:37:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2d2f8f44722d1cc2858ca97fd0a6f2b3ed6a00f3d8ac5a1f657400c09613dd93",
                                "typeString": "literal_string \"buy amount less than AMOUNT_MINIMUM\""
                              },
                              "value": "buy amount less than AMOUNT_MINIMUM"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2d2f8f44722d1cc2858ca97fd0a6f2b3ed6a00f3d8ac5a1f657400c09613dd93",
                                "typeString": "literal_string \"buy amount less than AMOUNT_MINIMUM\""
                              }
                            ],
                            "id": 643,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "15286:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15286:83:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 649,
                        "nodeType": "ExpressionStatement",
                        "src": "15286:83:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 653,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 651,
                                "name": "executedSellAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 635,
                                "src": "15391:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 652,
                                "name": "AMOUNT_MINIMUM",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44,
                                "src": "15413:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "15391:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "73656c6c20616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d",
                              "id": 654,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15429:38:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_d7e7da1c4924dd503e6bc54b75a5d94afa5a1a2b46c1ebd46fb574a3849a54ac",
                                "typeString": "literal_string \"sell amount less than AMOUNT_MINIMUM\""
                              },
                              "value": "sell amount less than AMOUNT_MINIMUM"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_d7e7da1c4924dd503e6bc54b75a5d94afa5a1a2b46c1ebd46fb574a3849a54ac",
                                "typeString": "literal_string \"sell amount less than AMOUNT_MINIMUM\""
                              }
                            ],
                            "id": 650,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "15383:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15383:85:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 656,
                        "nodeType": "ExpressionStatement",
                        "src": "15383:85:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 660,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 613,
                                "src": "15541:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 661,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "15541:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 662,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 613,
                                "src": "15573:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 663,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sellToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 84,
                              "src": "15573:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 664,
                              "name": "tokenIdsForPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 521,
                              "src": "15606:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 665,
                              "name": "executedBuyAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 633,
                              "src": "15640:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 666,
                              "name": "executedSellAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 635,
                              "src": "15675:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 657,
                              "name": "tokenConservation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 591,
                              "src": "15482:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                                "typeString": "int256[] memory"
                              }
                            },
                            "id": 659,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateTokenConservation",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4507,
                            "src": "15482:41:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$_t_uint16_$_t_uint16_$_t_array$_t_uint16_$dyn_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$bound_to$_t_array$_t_int256_$dyn_memory_ptr_$",
                              "typeString": "function (int256[] memory,uint16,uint16,uint16[] memory,uint128,uint128) pure"
                            }
                          },
                          "id": 667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15482:225:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 668,
                        "nodeType": "ExpressionStatement",
                        "src": "15482:225:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 671,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 613,
                                    "src": "15748:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  ],
                                  "id": 670,
                                  "name": "getRemainingAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2083,
                                  "src": "15729:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$",
                                    "typeString": "function (struct BatchExchange.Order memory) pure returns (uint128)"
                                  }
                                },
                                "id": 672,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15729:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 673,
                                "name": "executedSellAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 635,
                                "src": "15758:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "15729:47:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "657865637574656453656c6c416d6f756e7420626967676572207468616e2073706563696669656420696e206f72646572",
                              "id": 675,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15778:51:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_84965987244ea93591b46f254088d618db1dc6700be37280ec262c7dbc4b05b4",
                                "typeString": "literal_string \"executedSellAmount bigger than specified in order\""
                              },
                              "value": "executedSellAmount bigger than specified in order"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_84965987244ea93591b46f254088d618db1dc6700be37280ec262c7dbc4b05b4",
                                "typeString": "literal_string \"executedSellAmount bigger than specified in order\""
                              }
                            ],
                            "id": 669,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "15721:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15721:109:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 677,
                        "nodeType": "ExpressionStatement",
                        "src": "15721:109:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 681,
                                      "name": "order",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 613,
                                      "src": "16073:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                        "typeString": "struct BatchExchange.Order memory"
                                      }
                                    },
                                    "id": 682,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "priceNumerator",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 90,
                                    "src": "16073:20:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 679,
                                    "name": "executedSellAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 635,
                                    "src": "16050:18:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "id": 680,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8640,
                                  "src": "16050:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 683,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16050:44:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 686,
                                      "name": "order",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 613,
                                      "src": "16120:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                        "typeString": "struct BatchExchange.Order memory"
                                      }
                                    },
                                    "id": 687,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "priceDenominator",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 92,
                                    "src": "16120:22:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 684,
                                    "name": "executedBuyAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 633,
                                    "src": "16098:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "id": 685,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8640,
                                  "src": "16098:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 688,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16098:45:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16050:93:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "6c696d6974207072696365206e6f7420736174697366696564",
                              "id": 690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16161:27:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3b7402825d9026d359ae1c88c60d479377280c7f5bcbb4f70342af91e303bebf",
                                "typeString": "literal_string \"limit price not satisfied\""
                              },
                              "value": "limit price not satisfied"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3b7402825d9026d359ae1c88c60d479377280c7f5bcbb4f70342af91e303bebf",
                                "typeString": "literal_string \"limit price not satisfied\""
                              }
                            ],
                            "id": 678,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "16025:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16025:177:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 692,
                        "nodeType": "ExpressionStatement",
                        "src": "16025:177:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 693,
                            "name": "utility",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 598,
                            "src": "16310:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 697,
                                    "name": "executedBuyAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 633,
                                    "src": "16348:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 698,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 613,
                                    "src": "16367:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  ],
                                  "id": 696,
                                  "name": "evaluateUtility",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1870,
                                  "src": "16332:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint256_$",
                                    "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint256)"
                                  }
                                },
                                "id": 699,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16332:41:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 694,
                                "name": "utility",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 598,
                                "src": "16320:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 695,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8563,
                              "src": "16320:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 700,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16320:54:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16310:64:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 702,
                        "nodeType": "ExpressionStatement",
                        "src": "16310:64:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 704,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "16409:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 706,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 705,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16416:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16409:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 707,
                                "name": "orderIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 512,
                                "src": "16420:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                  "typeString": "uint16[] memory"
                                }
                              },
                              "id": 709,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 708,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16429:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16420:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 710,
                              "name": "executedSellAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 635,
                              "src": "16433:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 703,
                            "name": "updateRemainingOrder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1506,
                            "src": "16388:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint16_$_t_uint128_$returns$__$",
                              "typeString": "function (address,uint16,uint128)"
                            }
                          },
                          "id": 711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16388:64:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 712,
                        "nodeType": "ExpressionStatement",
                        "src": "16388:64:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 714,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "16505:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 716,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 715,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16512:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16505:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 718,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 613,
                                    "src": "16536:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  },
                                  "id": 719,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "buyToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 82,
                                  "src": "16536:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                ],
                                "id": 717,
                                "name": "tokenIdToAddressMap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 907,
                                "src": "16516:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                  "typeString": "function (uint16) view returns (address)"
                                }
                              },
                              "id": 720,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16516:35:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 721,
                              "name": "executedBuyAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 633,
                              "src": "16553:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 713,
                            "name": "addBalanceAndBlockWithdrawForThisBatch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4038,
                            "src": "16466:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16466:105:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 723,
                        "nodeType": "ExpressionStatement",
                        "src": "16466:105:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 725,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "16596:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 727,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 726,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16603:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16596:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 728,
                                "name": "orderIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 512,
                                "src": "16607:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                  "typeString": "uint16[] memory"
                                }
                              },
                              "id": 730,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 729,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16616:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16607:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 731,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 613,
                                "src": "16620:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 732,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sellToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 84,
                              "src": "16620:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 733,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 613,
                                "src": "16637:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 734,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "16637:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 735,
                              "name": "executedSellAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 635,
                              "src": "16653:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 736,
                              "name": "executedBuyAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 633,
                              "src": "16673:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 724,
                            "name": "Trade",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 167,
                            "src": "16590:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint128_$_t_uint128_$returns$__$",
                              "typeString": "function (address,uint16,uint16,uint16,uint128,uint128)"
                            }
                          },
                          "id": 737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16590:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 738,
                        "nodeType": "EmitStatement",
                        "src": "16585:106:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 605,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 602,
                      "src": "14996:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 606,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "15000:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 607,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15000:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14996:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 740,
                  "initializationExpression": {
                    "assignments": [
                      602
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 602,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 740,
                        "src": "14981:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 601,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14981:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 604,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 603,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14993:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "14981:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "15015:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 609,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 602,
                        "src": "15015:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 611,
                    "nodeType": "ExpressionStatement",
                    "src": "15015:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "14976:1726:0"
                },
                {
                  "body": {
                    "id": 784,
                    "nodeType": "Block",
                    "src": "16832:259:0",
                    "statements": [
                      {
                        "assignments": [
                          753
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 753,
                            "name": "order",
                            "nodeType": "VariableDeclaration",
                            "scope": 784,
                            "src": "16846:18:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 752,
                              "name": "Order",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 95,
                              "src": "16846:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                                "typeString": "struct BatchExchange.Order"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 763,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 754,
                              "name": "orders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70,
                              "src": "16867:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                              }
                            },
                            "id": 758,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 755,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "16874:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 757,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 756,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 742,
                                "src": "16881:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16874:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "16867:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                              "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                            }
                          },
                          "id": 762,
                          "indexExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 759,
                              "name": "orderIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 512,
                              "src": "16885:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              }
                            },
                            "id": 761,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 760,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 742,
                              "src": "16894:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "16885:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16867:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_storage",
                            "typeString": "struct BatchExchange.Order storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16846:51:0"
                      },
                      {
                        "assignments": [
                          null,
                          765
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 765,
                            "name": "executedSellAmount",
                            "nodeType": "VariableDeclaration",
                            "scope": 784,
                            "src": "16914:26:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            "typeName": {
                              "id": 764,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "16914:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 772,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 767,
                                "name": "buyVolumes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 515,
                                "src": "16961:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                  "typeString": "uint128[] memory"
                                }
                              },
                              "id": 769,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 768,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 742,
                                "src": "16972:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16961:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 770,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 753,
                              "src": "16976:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                "typeString": "struct BatchExchange.Order memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                "typeString": "struct BatchExchange.Order memory"
                              }
                            ],
                            "id": 766,
                            "name": "getTradedAmounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2027,
                            "src": "16944:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$_t_uint128_$",
                              "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint128,uint128)"
                            }
                          },
                          "id": 771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16944:38:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                            "typeString": "tuple(uint128,uint128)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16911:71:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 774,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "17012:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 776,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 775,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 742,
                                "src": "17019:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "17012:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 778,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 753,
                                    "src": "17043:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  },
                                  "id": 779,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sellToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 84,
                                  "src": "17043:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                ],
                                "id": 777,
                                "name": "tokenIdToAddressMap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 907,
                                "src": "17023:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                  "typeString": "function (uint16) view returns (address)"
                                }
                              },
                              "id": 780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17023:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 781,
                              "name": "executedSellAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 765,
                              "src": "17061:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 773,
                            "name": "subtractBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4096,
                            "src": "16996:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16996:84:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 783,
                        "nodeType": "ExpressionStatement",
                        "src": "16996:84:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 745,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 742,
                      "src": "16808:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 746,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "16812:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16812:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16808:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 785,
                  "initializationExpression": {
                    "assignments": [
                      742
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 742,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 785,
                        "src": "16793:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 741,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16793:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 744,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16805:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "16793:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 750,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "16827:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 749,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 742,
                        "src": "16827:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 751,
                    "nodeType": "ExpressionStatement",
                    "src": "16827:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "16788:303:0"
                },
                {
                  "assignments": [
                    787
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 787,
                      "name": "disregardedUtility",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "17100:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 786,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17100:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 789,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 788,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17129:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17100:30:0"
                },
                {
                  "body": {
                    "id": 821,
                    "nodeType": "Block",
                    "src": "17184:139:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 801,
                            "name": "disregardedUtility",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 787,
                            "src": "17198:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 805,
                                        "name": "orders",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 70,
                                        "src": "17269:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                          "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 809,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 806,
                                          "name": "owners",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 509,
                                          "src": "17276:6:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 808,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 807,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 791,
                                          "src": "17283:1:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "17276:9:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "17269:17:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                        "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                      }
                                    },
                                    "id": 813,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 810,
                                        "name": "orderIds",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 512,
                                        "src": "17287:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                          "typeString": "uint16[] memory"
                                        }
                                      },
                                      "id": 812,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 811,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 791,
                                        "src": "17296:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "17287:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "17269:30:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 814,
                                      "name": "owners",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 509,
                                      "src": "17301:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 816,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 815,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 791,
                                      "src": "17308:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "17301:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 804,
                                  "name": "evaluateDisregardedUtility",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1951,
                                  "src": "17242:26:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_Order_$95_memory_ptr_$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (struct BatchExchange.Order memory,address) view returns (uint256)"
                                  }
                                },
                                "id": 817,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17242:69:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 802,
                                "name": "disregardedUtility",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 787,
                                "src": "17219:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 803,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8563,
                              "src": "17219:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 818,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17219:93:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17198:114:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 820,
                        "nodeType": "ExpressionStatement",
                        "src": "17198:114:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 794,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 791,
                      "src": "17160:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 795,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "17164:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17164:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17160:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 822,
                  "initializationExpression": {
                    "assignments": [
                      791
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 791,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 822,
                        "src": "17145:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 790,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17145:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 793,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 792,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17157:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "17145:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "17179:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 798,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 791,
                        "src": "17179:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 800,
                    "nodeType": "ExpressionStatement",
                    "src": "17179:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "17140:183:0"
                },
                {
                  "assignments": [
                    824
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 824,
                      "name": "burntFees",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "17332:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 823,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17332:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 832,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 826,
                              "name": "tokenConservation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 591,
                              "src": "17360:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                                "typeString": "int256[] memory"
                              }
                            },
                            "id": 827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "feeTokenImbalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4449,
                            "src": "17360:35:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_int256_$bound_to$_t_array$_t_int256_$dyn_memory_ptr_$",
                              "typeString": "function (int256[] memory) pure returns (int256)"
                            }
                          },
                          "id": 828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17360:37:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "17352:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17352:46:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17401:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "17352:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17332:70:0"
                },
                {
                  "assignments": [
                    834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 834,
                      "name": "objectiveValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "17513:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 833,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17513:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 842,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 840,
                        "name": "disregardedUtility",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 787,
                        "src": "17565:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 837,
                            "name": "burntFees",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 824,
                            "src": "17550:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 835,
                            "name": "utility",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 598,
                            "src": "17538:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8563,
                          "src": "17538:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17538:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8579,
                      "src": "17538:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17538:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17513:71:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 844,
                        "name": "objectiveValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 834,
                        "src": "17625:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 843,
                      "name": "checkAndOverrideObjectiveValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1802,
                      "src": "17594:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17594:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 846,
                  "nodeType": "ExpressionStatement",
                  "src": "17594:46:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 848,
                        "name": "burntFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 824,
                        "src": "17681:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 847,
                      "name": "grantRewardToSolutionSubmitter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1386,
                      "src": "17650:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17650:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 850,
                  "nodeType": "ExpressionStatement",
                  "src": "17650:41:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 851,
                        "name": "tokenConservation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 591,
                        "src": "17701:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                          "typeString": "int256[] memory"
                        }
                      },
                      "id": 853,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkTokenConservation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4545,
                      "src": "17701:40:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$__$bound_to$_t_array$_t_int256_$dyn_memory_ptr_$",
                        "typeString": "function (int256[] memory) pure"
                      }
                    },
                    "id": 854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17701:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 855,
                  "nodeType": "ExpressionStatement",
                  "src": "17701:42:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 857,
                        "name": "batchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 504,
                        "src": "17768:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 858,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "17777:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 859,
                        "name": "orderIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 512,
                        "src": "17785:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 860,
                        "name": "buyVolumes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 515,
                        "src": "17795:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 861,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "17807:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "id": 856,
                      "name": "documentTrades",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1630,
                      "src": "17753:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$_t_array$_t_uint128_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,address[] memory,uint16[] memory,uint128[] memory,uint16[] memory)"
                      }
                    },
                    "id": 862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17753:71:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 863,
                  "nodeType": "ExpressionStatement",
                  "src": "17753:71:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 865,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10242,
                          "src": "17872:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17872:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 867,
                        "name": "utility",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 598,
                        "src": "17896:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 868,
                        "name": "disregardedUtility",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 787,
                        "src": "17917:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 869,
                        "name": "burntFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 824,
                        "src": "17949:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 870,
                        "name": "lastAuctionBurntFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 572,
                        "src": "17972:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 871,
                        "name": "prices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "18006:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 872,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "18026:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "id": 864,
                      "name": "SolutionSubmission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 199,
                      "src": "17840:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint128_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256,uint256,uint128[] memory,uint16[] memory)"
                      }
                    },
                    "id": 873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17840:212:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 874,
                  "nodeType": "EmitStatement",
                  "src": "17835:217:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 875,
                        "name": "objectiveValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 834,
                        "src": "18070:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 876,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "18069:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 525,
                  "id": 877,
                  "nodeType": "Return",
                  "src": "18062:23:0"
                }
              ]
            },
            "documentation": "@dev a solver facing function called for auction settlement\n@param batchId index of auction solution is referring to\n@param owners array of addresses corresponding to touched orders\n@param orderIds array of order indices used in parallel with owners to identify touched order\n@param buyVolumes executed buy amounts for each order identified by index of owner-orderId arrays\n@param prices list of prices for touched tokens indexed by next parameter\n@param tokenIdsForPrice price[i] is the price for the token with tokenID tokenIdsForPrice[i]\n@return the computed objective value of the solution\n     * Requirements:\n- Solutions for this `batchId` are currently being accepted.\n- Claimed objetive value is a great enough improvement on the current winning solution\n- Fee Token price is non-zero\n- `tokenIdsForPrice` is sorted.\n- Number of touched orders does not exceed `MAX_TOUCHED_ORDERS`.\n- Each touched order is valid at current `batchId`.\n- Each touched order's `executedSellAmount` does not exceed its remaining amount.\n- Limit Price of each touched order is respected.\n- Solution's objective evaluation must be positive.\n     * Sub Requirements: Those nested within other functions\n- checkAndOverrideObjectiveValue; Objetive value is a great enough improvement on the current winning solution\n- checkTokenConservation; for all, non-fee, tokens total amount sold == total amount bought",
            "id": 879,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "submitSolution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 504,
                  "name": "batchId",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13452:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 503,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13452:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 506,
                  "name": "claimedObjectiveValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13476:29:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 505,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13476:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 509,
                  "name": "owners",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13515:23:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 507,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "13515:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 508,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13515:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 512,
                  "name": "orderIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13548:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 510,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "13548:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 511,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13548:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 515,
                  "name": "buyVolumes",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13582:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 513,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "13582:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 514,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13582:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 518,
                  "name": "prices",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13619:23:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 516,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "13619:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 517,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13619:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 521,
                  "name": "tokenIdsForPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13652:32:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 519,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "13652:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 520,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13652:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13442:248:0"
            },
            "returnParameters": {
              "id": 525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 524,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13707:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 523,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13707:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13706:9:0"
            },
            "scope": 2226,
            "src": "13419:4673:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 892,
              "nodeType": "Block",
              "src": "18367:70:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 888,
                        "name": "registeredTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "18407:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 889,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 881,
                        "src": "18425:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 886,
                        "name": "IdToAddressBiMap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6489,
                        "src": "18384:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                          "typeString": "type(library IdToAddressBiMap)"
                        }
                      },
                      "id": 887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6414,
                      "src": "18384:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_address_$returns$_t_uint16_$",
                        "typeString": "function (struct IdToAddressBiMap.Data storage pointer,address) view returns (uint16)"
                      }
                    },
                    "id": 890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18384:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 885,
                  "id": 891,
                  "nodeType": "Return",
                  "src": "18377:53:0"
                }
              ]
            },
            "documentation": "@dev View returning ID of listed tokens\n@param addr address of listed token.\n@return tokenId as stored within the contract.",
            "id": 893,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenAddressToIdMap",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 881,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 893,
                  "src": "18324:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 880,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18324:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18323:14:0"
            },
            "returnParameters": {
              "id": 885,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 884,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 893,
                  "src": "18359:6:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 883,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "18359:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18358:8:0"
            },
            "scope": 2226,
            "src": "18295:142:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 906,
              "nodeType": "Block",
              "src": "18688:75:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 902,
                        "name": "registeredTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "18735:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 903,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 895,
                        "src": "18753:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 900,
                        "name": "IdToAddressBiMap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6489,
                        "src": "18705:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                          "typeString": "type(library IdToAddressBiMap)"
                        }
                      },
                      "id": 901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getAddressAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6389,
                      "src": "18705:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_uint16_$returns$_t_address_$",
                        "typeString": "function (struct IdToAddressBiMap.Data storage pointer,uint16) view returns (address)"
                      }
                    },
                    "id": 904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18705:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 899,
                  "id": 905,
                  "nodeType": "Return",
                  "src": "18698:58:0"
                }
              ]
            },
            "documentation": "@dev View returning address of listed token by ID\n@param id tokenId as stored, via BiMap, within the contract.\n@return address of (listed) token",
            "id": 907,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenIdToAddressMap",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 895,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 907,
                  "src": "18647:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 894,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "18647:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18646:11:0"
            },
            "returnParameters": {
              "id": 899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 898,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 907,
                  "src": "18679:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 897,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18679:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18678:9:0"
            },
            "scope": 2226,
            "src": "18618:145:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 920,
              "nodeType": "Block",
              "src": "19029:75:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 916,
                        "name": "registeredTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "19074:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 917,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 909,
                        "src": "19092:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 914,
                        "name": "IdToAddressBiMap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6489,
                        "src": "19046:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                          "typeString": "type(library IdToAddressBiMap)"
                        }
                      },
                      "id": 915,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hasAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6364,
                      "src": "19046:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (struct IdToAddressBiMap.Data storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19046:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 913,
                  "id": 919,
                  "nodeType": "Return",
                  "src": "19039:58:0"
                }
              ]
            },
            "documentation": "@dev View returning a bool attesting whether token was already added\n@param addr address of the token to be checked\n@return bool attesting whether token was already added",
            "id": 921,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 910,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 909,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "18988:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 908,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18988:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18987:14:0"
            },
            "returnParameters": {
              "id": 913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 912,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "19023:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 911,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19023:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19022:6:0"
            },
            "scope": 2226,
            "src": "18970:134:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 980,
              "nodeType": "Block",
              "src": "19609:316:0",
              "statements": [
                {
                  "body": {
                    "id": 976,
                    "nodeType": "Block",
                    "src": "19702:192:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 974,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 951,
                            "name": "elements",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 930,
                            "src": "19716:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 955,
                                    "name": "user",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 923,
                                    "src": "19781:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 957,
                                        "name": "user",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 923,
                                        "src": "19798:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "baseExpression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                  "argumentTypes": null,
                                                  "id": 959,
                                                  "name": "orders",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 70,
                                                  "src": "19824:6:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                                    "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                                  }
                                                },
                                                "id": 961,
                                                "indexExpression": {
                                                  "argumentTypes": null,
                                                  "id": 960,
                                                  "name": "user",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 923,
                                                  "src": "19831:4:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "19824:12:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                                  "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                                }
                                              },
                                              "id": 963,
                                              "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 962,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 933,
                                                "src": "19837:1:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint16",
                                                  "typeString": "uint16"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "19824:15:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Order_$95_storage",
                                                "typeString": "struct BatchExchange.Order storage ref"
                                              }
                                            },
                                            "id": 964,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sellToken",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 84,
                                            "src": "19824:25:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            }
                                          ],
                                          "id": 958,
                                          "name": "tokenIdToAddressMap",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 907,
                                          "src": "19804:19:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                            "typeString": "function (uint16) view returns (address)"
                                          }
                                        },
                                        "id": 965,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "19804:46:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 956,
                                      "name": "getBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3976,
                                      "src": "19787:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                        "typeString": "function (address,address) view returns (uint256)"
                                      }
                                    },
                                    "id": 966,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "19787:64:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 967,
                                        "name": "orders",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 70,
                                        "src": "19853:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                          "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 969,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 968,
                                        "name": "user",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 923,
                                        "src": "19860:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "19853:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                        "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                      }
                                    },
                                    "id": 971,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 970,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 933,
                                      "src": "19866:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "19853:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    }
                                  ],
                                  "id": 954,
                                  "name": "encodeAuctionElement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2192,
                                  "src": "19760:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_struct$_Order_$95_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (address,uint256,struct BatchExchange.Order memory) pure returns (bytes memory)"
                                  }
                                },
                                "id": 972,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19760:109:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 952,
                                "name": "elements",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 930,
                                "src": "19727:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 953,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9822,
                              "src": "19727:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 973,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19727:156:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "19716:167:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 975,
                        "nodeType": "ExpressionStatement",
                        "src": "19716:167:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 947,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 936,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 933,
                      "src": "19643:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 939,
                              "name": "orders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70,
                              "src": "19656:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                              }
                            },
                            "id": 941,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 940,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 923,
                              "src": "19663:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19656:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                              "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                            }
                          },
                          "id": 942,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19656:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "id": 945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 943,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 925,
                            "src": "19677:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 944,
                            "name": "pageSize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 927,
                            "src": "19686:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "19677:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 937,
                          "name": "Math",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8536,
                          "src": "19647:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Math_$8536_$",
                            "typeString": "type(library Math)"
                          }
                        },
                        "id": 938,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "min",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8503,
                        "src": "19647:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 946,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19647:48:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19643:52:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 977,
                  "initializationExpression": {
                    "assignments": [
                      933
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 933,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 977,
                        "src": "19624:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 932,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "19624:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 935,
                    "initialValue": {
                      "argumentTypes": null,
                      "id": 934,
                      "name": "offset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 925,
                      "src": "19635:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "19624:17:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "19697:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 948,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 933,
                        "src": "19697:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 950,
                    "nodeType": "ExpressionStatement",
                    "src": "19697:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "19619:275:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 978,
                    "name": "elements",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 930,
                    "src": "19910:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 931,
                  "id": 979,
                  "nodeType": "Return",
                  "src": "19903:15:0"
                }
              ]
            },
            "documentation": "@dev View returning all byte-encoded sell orders for specified user\n@param user address of user whose orders are being queried\n@param offset uint determining the starting orderIndex\n@param pageSize uint determining the count of elements to be viewed\n@return encoded bytes representing all orders",
            "id": 981,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEncodedUserOrdersPaginated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 923,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 981,
                  "src": "19498:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 922,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19498:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 925,
                  "name": "offset",
                  "nodeType": "VariableDeclaration",
                  "scope": 981,
                  "src": "19520:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 924,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "19520:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 927,
                  "name": "pageSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 981,
                  "src": "19543:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 926,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "19543:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19488:76:0"
            },
            "returnParameters": {
              "id": 931,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 930,
                  "name": "elements",
                  "nodeType": "VariableDeclaration",
                  "scope": 981,
                  "src": "19586:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 929,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "19586:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19585:23:0"
            },
            "scope": 2226,
            "src": "19450:475:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1064,
              "nodeType": "Block",
              "src": "20359:539:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    },
                    "id": 993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 990,
                        "name": "allUsers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 78,
                        "src": "20373:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6500_storage",
                          "typeString": "struct IterableAppendOnlySet.Data storage ref"
                        }
                      },
                      "id": 991,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "size",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6499,
                      "src": "20373:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20390:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "20373:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 997,
                  "nodeType": "IfStatement",
                  "src": "20369:61:0",
                  "trueBody": {
                    "id": 996,
                    "nodeType": "Block",
                    "src": "20393:37:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 994,
                          "name": "users",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 988,
                          "src": "20414:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 989,
                        "id": 995,
                        "nodeType": "Return",
                        "src": "20407:12:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    999
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 999,
                      "name": "count",
                      "nodeType": "VariableDeclaration",
                      "scope": 1064,
                      "src": "20439:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 998,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "20439:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1001,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "20454:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20439:16:0"
                },
                {
                  "assignments": [
                    1003
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1003,
                      "name": "current",
                      "nodeType": "VariableDeclaration",
                      "scope": 1064,
                      "src": "20465:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1002,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "20465:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1005,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1004,
                    "name": "previousPageUser",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 983,
                    "src": "20483:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20465:34:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1006,
                      "name": "current",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1003,
                      "src": "20513:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1008,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20532:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "20524:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20524:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "20513:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1031,
                  "nodeType": "IfStatement",
                  "src": "20509:160:0",
                  "trueBody": {
                    "id": 1030,
                    "nodeType": "Block",
                    "src": "20536:133:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1011,
                            "name": "current",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1003,
                            "src": "20550:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1012,
                                "name": "allUsers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 78,
                                "src": "20560:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Data_$6500_storage",
                                  "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                }
                              },
                              "id": 1013,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "first",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6600,
                              "src": "20560:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                "typeString": "function (struct IterableAppendOnlySet.Data storage pointer) view returns (address)"
                              }
                            },
                            "id": 1014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20560:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "20550:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1016,
                        "nodeType": "ExpressionStatement",
                        "src": "20550:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1017,
                            "name": "users",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 988,
                            "src": "20590:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1022,
                                    "name": "current",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1003,
                                    "src": "20628:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1020,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10229,
                                    "src": "20611:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 1021,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "20611:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 1023,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20611:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1018,
                                "name": "users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 988,
                                "src": "20598:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9822,
                              "src": "20598:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 1024,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20598:39:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "20590:47:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1026,
                        "nodeType": "ExpressionStatement",
                        "src": "20590:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "20651:7:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 1027,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 999,
                            "src": "20651:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 1029,
                        "nodeType": "ExpressionStatement",
                        "src": "20651:7:0"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 1060,
                    "nodeType": "Block",
                    "src": "20731:139:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1040,
                            "name": "current",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1003,
                            "src": "20745:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1043,
                                "name": "current",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1003,
                                "src": "20769:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1041,
                                "name": "allUsers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 78,
                                "src": "20755:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Data_$6500_storage",
                                  "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                }
                              },
                              "id": 1042,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "next",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6631,
                              "src": "20755:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                "typeString": "function (struct IterableAppendOnlySet.Data storage pointer,address) view returns (address)"
                              }
                            },
                            "id": 1044,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20755:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "20745:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1046,
                        "nodeType": "ExpressionStatement",
                        "src": "20745:32:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1047,
                            "name": "users",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 988,
                            "src": "20791:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1052,
                                    "name": "current",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1003,
                                    "src": "20829:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1050,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10229,
                                    "src": "20812:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 1051,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "20812:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 1053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20812:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1048,
                                "name": "users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 988,
                                "src": "20799:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1049,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9822,
                              "src": "20799:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 1054,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20799:39:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "20791:47:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1056,
                        "nodeType": "ExpressionStatement",
                        "src": "20791:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "20852:7:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 1057,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 999,
                            "src": "20852:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 1059,
                        "nodeType": "ExpressionStatement",
                        "src": "20852:7:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "id": 1034,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1032,
                        "name": "count",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 999,
                        "src": "20685:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1033,
                        "name": "pageSize",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 985,
                        "src": "20693:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "src": "20685:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1035,
                        "name": "current",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "20705:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1036,
                          "name": "allUsers",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 78,
                          "src": "20716:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Data_$6500_storage",
                            "typeString": "struct IterableAppendOnlySet.Data storage ref"
                          }
                        },
                        "id": 1037,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "last",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6497,
                        "src": "20716:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "20705:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "20685:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1061,
                  "nodeType": "WhileStatement",
                  "src": "20678:192:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1062,
                    "name": "users",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 988,
                    "src": "20886:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 989,
                  "id": 1063,
                  "nodeType": "Return",
                  "src": "20879:12:0"
                }
              ]
            },
            "documentation": "@dev View returning all byte-encoded users in paginated form\n@param previousPageUser address of last user received in last pages (address(0) for first page)\n@param pageSize uint determining the count of users to be returned per page\n@return encoded packed bytes of user addresses",
            "id": 1065,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getUsersPaginated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 983,
                  "name": "previousPageUser",
                  "nodeType": "VariableDeclaration",
                  "scope": 1065,
                  "src": "20275:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 982,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20275:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 985,
                  "name": "pageSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 1065,
                  "src": "20301:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 984,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "20301:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20274:43:0"
            },
            "returnParameters": {
              "id": 989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 988,
                  "name": "users",
                  "nodeType": "VariableDeclaration",
                  "scope": 1065,
                  "src": "20339:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 987,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20339:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20338:20:0"
            },
            "scope": 2226,
            "src": "20248:650:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1081,
              "nodeType": "Block",
              "src": "21195:74:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1073,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1067,
                        "src": "21242:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1074,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21248:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1077,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "21258:2:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21259:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_minus_1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_minus_1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 1075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21251:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint16_$",
                            "typeString": "type(uint16)"
                          },
                          "typeName": "uint16"
                        },
                        "id": 1078,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21251:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 1072,
                      "name": "getEncodedUserOrdersPaginated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 981,
                      "src": "21212:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint16_$_t_uint16_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,uint16,uint16) view returns (bytes memory)"
                      }
                    },
                    "id": 1079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21212:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1071,
                  "id": 1080,
                  "nodeType": "Return",
                  "src": "21205:57:0"
                }
              ]
            },
            "documentation": "@dev View returning all byte-encoded sell orders for specified user\n@param user address of user whose orders are being queried\n@return encoded bytes representing all orders",
            "id": 1082,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEncodedUserOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1067,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1082,
                  "src": "21137:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21137:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21136:14:0"
            },
            "returnParameters": {
              "id": 1071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1070,
                  "name": "elements",
                  "nodeType": "VariableDeclaration",
                  "scope": 1082,
                  "src": "21172:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1069,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "21172:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21171:23:0"
            },
            "scope": 2226,
            "src": "21107:162:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1167,
              "nodeType": "Block",
              "src": "21940:822:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    },
                    "id": 1096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1093,
                        "name": "allUsers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 78,
                        "src": "21954:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6500_storage",
                          "typeString": "struct IterableAppendOnlySet.Data storage ref"
                        }
                      },
                      "id": 1094,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "size",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6499,
                      "src": "21954:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1095,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21971:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "21954:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1100,
                  "nodeType": "IfStatement",
                  "src": "21950:64:0",
                  "trueBody": {
                    "id": 1099,
                    "nodeType": "Block",
                    "src": "21974:40:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1097,
                          "name": "elements",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1091,
                          "src": "21995:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1092,
                        "id": 1098,
                        "nodeType": "Return",
                        "src": "21988:15:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1102
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1102,
                      "name": "currentOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1167,
                      "src": "22023:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 1101,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "22023:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1104,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1103,
                    "name": "previousPageUserOffset",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1086,
                    "src": "22046:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22023:45:0"
                },
                {
                  "assignments": [
                    1106
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1106,
                      "name": "currentUser",
                      "nodeType": "VariableDeclaration",
                      "scope": 1167,
                      "src": "22078:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1105,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "22078:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1108,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1107,
                    "name": "previousPageUser",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1084,
                    "src": "22100:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22078:38:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1109,
                      "name": "currentUser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1106,
                      "src": "22130:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 1111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "22153:3:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1110,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "22145:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1112,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22145:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "22130:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1121,
                  "nodeType": "IfStatement",
                  "src": "22126:88:0",
                  "trueBody": {
                    "id": 1120,
                    "nodeType": "Block",
                    "src": "22159:55:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1114,
                            "name": "currentUser",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1106,
                            "src": "22173:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1115,
                                "name": "allUsers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 78,
                                "src": "22187:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Data_$6500_storage",
                                  "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                }
                              },
                              "id": 1116,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "first",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6600,
                              "src": "22187:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                "typeString": "function (struct IterableAppendOnlySet.Data storage pointer) view returns (address)"
                              }
                            },
                            "id": 1117,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22187:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "22173:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1119,
                        "nodeType": "ExpressionStatement",
                        "src": "22173:30:0"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 1165,
                    "nodeType": "Block",
                    "src": "22290:466:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1128,
                            "name": "elements",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1091,
                            "src": "22304:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1132,
                                    "name": "currentUser",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1106,
                                    "src": "22399:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1133,
                                    "name": "currentOffset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1102,
                                    "src": "22432:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    "id": 1141,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 1134,
                                      "name": "pageSize",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1088,
                                      "src": "22467:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 1139,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 1136,
                                              "name": "elements",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1091,
                                              "src": "22485:8:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 1137,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "22485:15:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "/",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 1138,
                                            "name": "ENCODED_AUCTION_ELEMENT_WIDTH",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 59,
                                            "src": "22503:29:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            }
                                          },
                                          "src": "22485:47:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 1135,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "22478:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint16_$",
                                          "typeString": "type(uint16)"
                                        },
                                        "typeName": "uint16"
                                      },
                                      "id": 1140,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "22478:55:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "src": "22467:66:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "id": 1131,
                                  "name": "getEncodedUserOrdersPaginated",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 981,
                                  "src": "22348:29:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint16_$_t_uint16_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (address,uint16,uint16) view returns (bytes memory)"
                                  }
                                },
                                "id": 1142,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22348:203:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1129,
                                "name": "elements",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1091,
                                "src": "22315:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1130,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9822,
                              "src": "22315:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 1143,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22315:250:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "22304:261:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1145,
                        "nodeType": "ExpressionStatement",
                        "src": "22304:261:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1146,
                            "name": "currentUser",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1106,
                            "src": "22583:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1147,
                              "name": "allUsers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 78,
                              "src": "22598:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Data_$6500_storage",
                                "typeString": "struct IterableAppendOnlySet.Data storage ref"
                              }
                            },
                            "id": 1148,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "last",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6497,
                            "src": "22598:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "22583:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1153,
                        "nodeType": "IfStatement",
                        "src": "22579:82:0",
                        "trueBody": {
                          "id": 1152,
                          "nodeType": "Block",
                          "src": "22613:48:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1150,
                                "name": "elements",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1091,
                                "src": "22638:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 1092,
                              "id": 1151,
                              "nodeType": "Return",
                              "src": "22631:15:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1154,
                            "name": "currentOffset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1102,
                            "src": "22674:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1155,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22690:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "22674:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 1157,
                        "nodeType": "ExpressionStatement",
                        "src": "22674:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1163,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1158,
                            "name": "currentUser",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1106,
                            "src": "22705:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1161,
                                "name": "currentUser",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1106,
                                "src": "22733:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1159,
                                "name": "allUsers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 78,
                                "src": "22719:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Data_$6500_storage",
                                  "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                }
                              },
                              "id": 1160,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "next",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6631,
                              "src": "22719:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                "typeString": "function (struct IterableAppendOnlySet.Data storage pointer,address) view returns (address)"
                              }
                            },
                            "id": 1162,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22719:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "22705:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1164,
                        "nodeType": "ExpressionStatement",
                        "src": "22705:40:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1125,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1122,
                          "name": "elements",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1091,
                          "src": "22230:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "22230:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1124,
                        "name": "ENCODED_AUCTION_ELEMENT_WIDTH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59,
                        "src": "22248:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "src": "22230:47:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1126,
                      "name": "pageSize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1088,
                      "src": "22280:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "22230:58:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1166,
                  "nodeType": "WhileStatement",
                  "src": "22223:533:0"
                }
              ]
            },
            "documentation": "@dev View returning byte-encoded sell orders in paginated form\n@param previousPageUser address of last user received in the previous page (address(0) for first page)\n@param previousPageUserOffset the number of orders received for the last user on the previous page (0 for first page).\n@param pageSize uint determining the count of orders to be returned per page\n@return encoded bytes representing a page of orders ordered by (user, index)",
            "id": 1168,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEncodedUsersPaginated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1084,
                  "name": "previousPageUser",
                  "nodeType": "VariableDeclaration",
                  "scope": 1168,
                  "src": "21801:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1083,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21801:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1086,
                  "name": "previousPageUserOffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1168,
                  "src": "21835:29:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1085,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "21835:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1088,
                  "name": "pageSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 1168,
                  "src": "21874:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1087,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "21874:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21791:104:0"
            },
            "returnParameters": {
              "id": 1092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1091,
                  "name": "elements",
                  "nodeType": "VariableDeclaration",
                  "scope": 1168,
                  "src": "21917:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1090,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "21917:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21916:23:0"
            },
            "scope": 2226,
            "src": "21758:1004:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1222,
              "nodeType": "Block",
              "src": "22983:434:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    },
                    "id": 1176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1173,
                        "name": "allUsers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 78,
                        "src": "22997:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6500_storage",
                          "typeString": "struct IterableAppendOnlySet.Data storage ref"
                        }
                      },
                      "id": 1174,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "size",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6499,
                      "src": "22997:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23013:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22997:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1219,
                  "nodeType": "IfStatement",
                  "src": "22993:393:0",
                  "trueBody": {
                    "id": 1218,
                    "nodeType": "Block",
                    "src": "23016:370:0",
                    "statements": [
                      {
                        "assignments": [
                          1178
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1178,
                            "name": "user",
                            "nodeType": "VariableDeclaration",
                            "scope": 1218,
                            "src": "23030:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1177,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "23030:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1182,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1179,
                              "name": "allUsers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 78,
                              "src": "23045:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Data_$6500_storage",
                                "typeString": "struct IterableAppendOnlySet.Data storage ref"
                              }
                            },
                            "id": 1180,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "first",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6600,
                            "src": "23045:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                              "typeString": "function (struct IterableAppendOnlySet.Data storage pointer) view returns (address)"
                            }
                          },
                          "id": 1181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23045:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23030:31:0"
                      },
                      {
                        "assignments": [
                          1184
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1184,
                            "name": "stop",
                            "nodeType": "VariableDeclaration",
                            "scope": 1218,
                            "src": "23075:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1183,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "23075:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1186,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23087:5:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23075:17:0"
                      },
                      {
                        "body": {
                          "id": 1216,
                          "nodeType": "Block",
                          "src": "23120:256:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1189,
                                  "name": "elements",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1171,
                                  "src": "23138:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1193,
                                          "name": "user",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1178,
                                          "src": "23186:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 1192,
                                        "name": "getEncodedUserOrders",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1082,
                                        "src": "23165:20:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function (address) view returns (bytes memory)"
                                        }
                                      },
                                      "id": 1194,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "23165:26:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1190,
                                      "name": "elements",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1171,
                                      "src": "23149:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 1191,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "concat",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9822,
                                    "src": "23149:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 1195,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23149:43:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "src": "23138:54:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1197,
                              "nodeType": "ExpressionStatement",
                              "src": "23138:54:0"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 1201,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1198,
                                  "name": "user",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1178,
                                  "src": "23214:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1199,
                                    "name": "allUsers",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 78,
                                    "src": "23222:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Data_$6500_storage",
                                      "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                    }
                                  },
                                  "id": 1200,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "last",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6497,
                                  "src": "23222:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "23214:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1214,
                                "nodeType": "Block",
                                "src": "23295:67:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1212,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1207,
                                        "name": "user",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1178,
                                        "src": "23317:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 1210,
                                            "name": "user",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1178,
                                            "src": "23338:4:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1208,
                                            "name": "allUsers",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 78,
                                            "src": "23324:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Data_$6500_storage",
                                              "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                            }
                                          },
                                          "id": 1209,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "next",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6631,
                                          "src": "23324:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                            "typeString": "function (struct IterableAppendOnlySet.Data storage pointer,address) view returns (address)"
                                          }
                                        },
                                        "id": 1211,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23324:19:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "src": "23317:26:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 1213,
                                    "nodeType": "ExpressionStatement",
                                    "src": "23317:26:0"
                                  }
                                ]
                              },
                              "id": 1215,
                              "nodeType": "IfStatement",
                              "src": "23210:152:0",
                              "trueBody": {
                                "id": 1206,
                                "nodeType": "Block",
                                "src": "23237:52:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1204,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1202,
                                        "name": "stop",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1184,
                                        "src": "23259:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "74727565",
                                        "id": 1203,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "23266:4:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "23259:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 1205,
                                    "nodeType": "ExpressionStatement",
                                    "src": "23259:11:0"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "id": 1188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "23113:5:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 1187,
                            "name": "stop",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1184,
                            "src": "23114:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1217,
                        "nodeType": "WhileStatement",
                        "src": "23106:270:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1220,
                    "name": "elements",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1171,
                    "src": "23402:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1172,
                  "id": 1221,
                  "nodeType": "Return",
                  "src": "23395:15:0"
                }
              ]
            },
            "documentation": "@dev View returning all byte-encoded sell orders\n@return encoded bytes representing all orders ordered by (user, index)",
            "id": 1223,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEncodedOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1169,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22936:2:0"
            },
            "returnParameters": {
              "id": 1172,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1171,
                  "name": "elements",
                  "nodeType": "VariableDeclaration",
                  "scope": 1223,
                  "src": "22960:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1170,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "22960:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22959:23:0"
            },
            "scope": 2226,
            "src": "22911:506:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1242,
              "nodeType": "Block",
              "src": "23494:103:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 1235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1230,
                        "name": "batchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1225,
                        "src": "23511:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 1234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1231,
                            "name": "getCurrentBatchId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3888,
                            "src": "23522:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                              "typeString": "function () view returns (uint32)"
                            }
                          },
                          "id": 1232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23522:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1233,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23544:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "23522:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "23511:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1236,
                          "name": "getSecondsRemainingInBatch",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3901,
                          "src": "23549:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23549:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1238,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23581:9:0",
                        "subdenomination": "minutes",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_60_by_1",
                          "typeString": "int_const 60"
                        },
                        "value": "1"
                      },
                      "src": "23549:41:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "23511:79:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1229,
                  "id": 1241,
                  "nodeType": "Return",
                  "src": "23504:86:0"
                }
              ]
            },
            "documentation": null,
            "id": 1243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "acceptingSolutions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1225,
                  "name": "batchId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1243,
                  "src": "23451:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1224,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "23451:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23450:16:0"
            },
            "returnParameters": {
              "id": 1229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1228,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1243,
                  "src": "23488:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1227,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23488:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23487:6:0"
            },
            "scope": 2226,
            "src": "23423:174:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1263,
              "nodeType": "Block",
              "src": "23859:171:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 1254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1248,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "23873:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1249,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "batchId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 104,
                      "src": "23873:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 1253,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1250,
                          "name": "getCurrentBatchId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3888,
                          "src": "23899:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                            "typeString": "function () view returns (uint32)"
                          }
                        },
                        "id": 1251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23899:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1252,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23921:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "23899:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "23873:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1261,
                    "nodeType": "Block",
                    "src": "23991:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24012:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1247,
                        "id": 1260,
                        "nodeType": "Return",
                        "src": "24005:8:0"
                      }
                    ]
                  },
                  "id": 1262,
                  "nodeType": "IfStatement",
                  "src": "23869:155:0",
                  "trueBody": {
                    "id": 1258,
                    "nodeType": "Block",
                    "src": "23924:61:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1255,
                            "name": "latestSolution",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 76,
                            "src": "23945:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                              "typeString": "struct BatchExchange.SolutionData storage ref"
                            }
                          },
                          "id": 1256,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "objectiveValue",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 116,
                          "src": "23945:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1247,
                        "id": 1257,
                        "nodeType": "Return",
                        "src": "23938:36:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev gets the objective value of currently winning solution.\n@return objective function evaluation of the currently winning solution, or zero if no solution proposed.",
            "id": 1264,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentObjectiveValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1244,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23826:2:0"
            },
            "returnParameters": {
              "id": 1247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1246,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1264,
                  "src": "23850:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1245,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23850:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23849:9:0"
            },
            "scope": 2226,
            "src": "23793:237:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1364,
              "nodeType": "Block",
              "src": "24295:961:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1284,
                            "name": "registeredTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 80,
                            "src": "24336:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1285,
                            "name": "buyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1266,
                            "src": "24354:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1282,
                            "name": "IdToAddressBiMap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6489,
                            "src": "24313:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                              "typeString": "type(library IdToAddressBiMap)"
                            }
                          },
                          "id": 1283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hasId",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6347,
                          "src": "24313:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_uint16_$returns$_t_bool_$",
                            "typeString": "function (struct IdToAddressBiMap.Data storage pointer,uint16) view returns (bool)"
                          }
                        },
                        "id": 1286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24313:50:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "42757920746f6b656e206d757374206265206c6973746564",
                        "id": 1287,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24365:26:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3d538c739e678ab4e23ea9c40d42539aa276d51d4c82e76e198cc47faa32c8d0",
                          "typeString": "literal_string \"Buy token must be listed\""
                        },
                        "value": "Buy token must be listed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3d538c739e678ab4e23ea9c40d42539aa276d51d4c82e76e198cc47faa32c8d0",
                          "typeString": "literal_string \"Buy token must be listed\""
                        }
                      ],
                      "id": 1281,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "24305:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24305:87:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1289,
                  "nodeType": "ExpressionStatement",
                  "src": "24305:87:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1293,
                            "name": "registeredTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 80,
                            "src": "24433:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1294,
                            "name": "sellToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1268,
                            "src": "24451:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1291,
                            "name": "IdToAddressBiMap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6489,
                            "src": "24410:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                              "typeString": "type(library IdToAddressBiMap)"
                            }
                          },
                          "id": 1292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hasId",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6347,
                          "src": "24410:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_uint16_$returns$_t_bool_$",
                            "typeString": "function (struct IdToAddressBiMap.Data storage pointer,uint16) view returns (bool)"
                          }
                        },
                        "id": 1295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24410:51:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53656c6c20746f6b656e206d757374206265206c6973746564",
                        "id": 1296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24463:27:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_86bed28b1c496a41e04c9492fd6fc1642606259449a54f6e4e3a160d5919b7fb",
                          "typeString": "literal_string \"Sell token must be listed\""
                        },
                        "value": "Sell token must be listed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_86bed28b1c496a41e04c9492fd6fc1642606259449a54f6e4e3a160d5919b7fb",
                          "typeString": "literal_string \"Sell token must be listed\""
                        }
                      ],
                      "id": 1290,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "24402:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24402:89:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1298,
                  "nodeType": "ExpressionStatement",
                  "src": "24402:89:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 1302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1300,
                          "name": "buyToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1266,
                          "src": "24509:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1301,
                          "name": "sellToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1268,
                          "src": "24521:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "src": "24509:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "45786368616e676520746f6b656e73206e6f742064697374696e6374",
                        "id": 1303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24532:30:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2c6192f37071bd8e05382b248226ad90159192cc58a99bd710ee7227bf6520f",
                          "typeString": "literal_string \"Exchange tokens not distinct\""
                        },
                        "value": "Exchange tokens not distinct"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2c6192f37071bd8e05382b248226ad90159192cc58a99bd710ee7227bf6520f",
                          "typeString": "literal_string \"Exchange tokens not distinct\""
                        }
                      ],
                      "id": 1299,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "24501:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24501:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1305,
                  "nodeType": "ExpressionStatement",
                  "src": "24501:62:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 1310,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1307,
                          "name": "validFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1270,
                          "src": "24581:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1308,
                            "name": "getCurrentBatchId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3888,
                            "src": "24594:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                              "typeString": "function () view returns (uint32)"
                            }
                          },
                          "id": 1309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24594:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "24581:32:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f72646572732063616e277420626520706c6163656420696e207468652070617374",
                        "id": 1311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24615:36:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76a8e7c51f781111be6bb8ef7c4896c0f2122e73f83c789110c68af6cee5dc8a",
                          "typeString": "literal_string \"Orders can't be placed in the past\""
                        },
                        "value": "Orders can't be placed in the past"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76a8e7c51f781111be6bb8ef7c4896c0f2122e73f83c789110c68af6cee5dc8a",
                          "typeString": "literal_string \"Orders can't be placed in the past\""
                        }
                      ],
                      "id": 1306,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "24573:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24573:79:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1313,
                  "nodeType": "ExpressionStatement",
                  "src": "24573:79:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1320,
                            "name": "buyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1266,
                            "src": "24733:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1321,
                            "name": "sellToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1268,
                            "src": "24770:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1322,
                            "name": "validFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1270,
                            "src": "24808:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1323,
                            "name": "validUntil",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1272,
                            "src": "24847:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1324,
                            "name": "buyAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1274,
                            "src": "24891:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1325,
                            "name": "sellAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1276,
                            "src": "24936:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1326,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24976:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1319,
                          "name": "Order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 95,
                          "src": "24699:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Order_$95_storage_ptr_$",
                            "typeString": "type(struct BatchExchange.Order storage pointer)"
                          }
                        },
                        "id": 1327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "buyToken",
                          "sellToken",
                          "validFrom",
                          "validUntil",
                          "priceNumerator",
                          "priceDenominator",
                          "usedAmount"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "24699:293:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_memory",
                          "typeString": "struct BatchExchange.Order memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Order_$95_memory",
                          "typeString": "struct BatchExchange.Order memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1314,
                          "name": "orders",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70,
                          "src": "24662:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                          }
                        },
                        "id": 1317,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1315,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10242,
                            "src": "24669:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "24669:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "24662:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                          "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                        }
                      },
                      "id": 1318,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24662:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Order_$95_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct BatchExchange.Order storage ref) returns (uint256)"
                      }
                    },
                    "id": 1328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24662:340:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1329,
                  "nodeType": "ExpressionStatement",
                  "src": "24662:340:0"
                },
                {
                  "assignments": [
                    1331
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1331,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 1364,
                      "src": "25012:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 1330,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "25012:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1342,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1332,
                                  "name": "orders",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70,
                                  "src": "25030:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                    "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                  }
                                },
                                "id": 1335,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1333,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10242,
                                    "src": "25037:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 1334,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "25037:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25030:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                  "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                }
                              },
                              "id": 1336,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25030:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25058:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "25030:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 1339,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "25029:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toUint16",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9782,
                      "src": "25029:40:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint16_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint16)"
                      }
                    },
                    "id": 1341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25029:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25012:59:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1344,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10242,
                          "src": "25101:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "25101:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1346,
                        "name": "orderId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1331,
                        "src": "25113:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1347,
                        "name": "buyToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1266,
                        "src": "25122:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1348,
                        "name": "sellToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1268,
                        "src": "25132:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1349,
                        "name": "validFrom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1270,
                        "src": "25143:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1350,
                        "name": "validUntil",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1272,
                        "src": "25154:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1351,
                        "name": "buyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1274,
                        "src": "25166:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1352,
                        "name": "sellAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "25177:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 1343,
                      "name": "OrderPlacement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 135,
                      "src": "25086:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint32_$_t_uint32_$_t_uint128_$_t_uint128_$returns$__$",
                        "typeString": "function (address,uint16,uint16,uint16,uint32,uint32,uint128,uint128)"
                      }
                    },
                    "id": 1353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25086:102:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1354,
                  "nodeType": "EmitStatement",
                  "src": "25081:107:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1358,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10242,
                          "src": "25214:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "25214:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1355,
                        "name": "allUsers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 78,
                        "src": "25198:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6500_storage",
                          "typeString": "struct IterableAppendOnlySet.Data storage ref"
                        }
                      },
                      "id": 1357,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "insert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6541,
                      "src": "25198:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Data_$6500_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                        "typeString": "function (struct IterableAppendOnlySet.Data storage pointer,address) returns (bool)"
                      }
                    },
                    "id": 1360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25198:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1361,
                  "nodeType": "ExpressionStatement",
                  "src": "25198:27:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1362,
                    "name": "orderId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1331,
                    "src": "25242:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 1280,
                  "id": 1363,
                  "nodeType": "Return",
                  "src": "25235:14:0"
                }
              ]
            },
            "documentation": "Private Functions",
            "id": 1365,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "placeOrderInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1266,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24114:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1265,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "24114:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1268,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24139:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1267,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "24139:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1270,
                  "name": "validFrom",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24165:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1269,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "24165:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1272,
                  "name": "validUntil",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24191:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1271,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "24191:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1274,
                  "name": "buyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24218:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1273,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "24218:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1276,
                  "name": "sellAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24245:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1275,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "24245:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24104:165:0"
            },
            "returnParameters": {
              "id": 1280,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1279,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24287:6:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1278,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "24287:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24286:8:0"
            },
            "scope": 2226,
            "src": "24077:1179:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1385,
              "nodeType": "Block",
              "src": "25484:148:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1370,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "25494:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1372,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "feeReward",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 114,
                      "src": "25494:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1373,
                      "name": "feeReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1367,
                      "src": "25521:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25494:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1375,
                  "nodeType": "ExpressionStatement",
                  "src": "25494:36:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1377,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10242,
                          "src": "25579:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "25579:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1380,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25611:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1379,
                          "name": "tokenIdToAddressMap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 907,
                          "src": "25591:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                            "typeString": "function (uint16) view returns (address)"
                          }
                        },
                        "id": 1381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25591:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1382,
                        "name": "feeReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1367,
                        "src": "25615:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1376,
                      "name": "addBalanceAndBlockWithdrawForThisBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4038,
                      "src": "25540:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25540:85:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1384,
                  "nodeType": "ExpressionStatement",
                  "src": "25540:85:0"
                }
              ]
            },
            "documentation": "@dev called at the end of submitSolution with a value of tokenConservation / 2\n@param feeReward amount to be rewarded to the solver",
            "id": 1386,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "grantRewardToSolutionSubmitter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1368,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1367,
                  "name": "feeReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 1386,
                  "src": "25457:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1366,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25457:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25456:19:0"
            },
            "returnParameters": {
              "id": 1369,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25484:0:0"
            },
            "scope": 2226,
            "src": "25417:215:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1411,
              "nodeType": "Block",
              "src": "25824:193:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "25838:26:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1391,
                        "name": "currentBatchHasSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1997,
                        "src": "25839:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 1392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25839:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1408,
                  "nodeType": "IfStatement",
                  "src": "25834:159:0",
                  "trueBody": {
                    "id": 1407,
                    "nodeType": "Block",
                    "src": "25866:127:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1398,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10294,
                                  "src": "25905:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_BatchExchange_$2226",
                                    "typeString": "contract BatchExchange"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_BatchExchange_$2226",
                                    "typeString": "contract BatchExchange"
                                  }
                                ],
                                "id": 1397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "25897:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 1399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25897:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1400,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "25912:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1401,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "feeReward",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 114,
                              "src": "25912:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1394,
                              "name": "feeToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 65,
                              "src": "25880:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TokenOWL_$6270",
                                "typeString": "contract TokenOWL"
                              }
                            },
                            "id": 1396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "burnOWL",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6255,
                            "src": "25880:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 1402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25880:57:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1403,
                        "nodeType": "ExpressionStatement",
                        "src": "25880:57:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1404,
                            "name": "latestSolution",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 76,
                            "src": "25958:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                              "typeString": "struct BatchExchange.SolutionData storage ref"
                            }
                          },
                          "id": 1405,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "feeReward",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 114,
                          "src": "25958:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1390,
                        "id": 1406,
                        "nodeType": "Return",
                        "src": "25951:31:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "26009:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 1390,
                  "id": 1410,
                  "nodeType": "Return",
                  "src": "26002:8:0"
                }
              ]
            },
            "documentation": "@dev called during solution submission to burn fees from previous auction\n@return amount of OWL burnt",
            "id": 1412,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "burnPreviousAuctionFees",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1387,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25795:2:0"
            },
            "returnParameters": {
              "id": 1390,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1389,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1412,
                  "src": "25815:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1388,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25815:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25814:9:0"
            },
            "scope": 2226,
            "src": "25763:254:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1467,
              "nodeType": "Block",
              "src": "26401:297:0",
              "statements": [
                {
                  "body": {
                    "id": 1442,
                    "nodeType": "Block",
                    "src": "26480:78:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1433,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "26494:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1438,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1434,
                                  "name": "latestSolution",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 76,
                                  "src": "26508:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                    "typeString": "struct BatchExchange.SolutionData storage ref"
                                  }
                                },
                                "id": 1435,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "tokenIdsForPrice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 110,
                                "src": "26508:31:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint16_$dyn_storage",
                                  "typeString": "uint16[] storage ref"
                                }
                              },
                              "id": 1437,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1436,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1422,
                                "src": "26540:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "26508:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "26494:49:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26546:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "26494:53:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 1441,
                        "nodeType": "ExpressionStatement",
                        "src": "26494:53:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1425,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1422,
                      "src": "26431:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1426,
                          "name": "latestSolution",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 76,
                          "src": "26435:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                            "typeString": "struct BatchExchange.SolutionData storage ref"
                          }
                        },
                        "id": 1427,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenIdsForPrice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 110,
                        "src": "26435:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_storage",
                          "typeString": "uint16[] storage ref"
                        }
                      },
                      "id": 1428,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "26435:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26431:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1443,
                  "initializationExpression": {
                    "assignments": [
                      1422
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1422,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1443,
                        "src": "26416:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26416:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1424,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26428:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "26416:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1431,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "26475:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1430,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1422,
                        "src": "26475:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1432,
                    "nodeType": "ExpressionStatement",
                    "src": "26475:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "26411:147:0"
                },
                {
                  "body": {
                    "id": 1465,
                    "nodeType": "Block",
                    "src": "26621:71:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1455,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "26635:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1459,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1456,
                                "name": "tokenIdsForPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1418,
                                "src": "26649:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                  "typeString": "uint16[] memory"
                                }
                              },
                              "id": 1458,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1457,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1445,
                                "src": "26666:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "26649:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "26635:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1460,
                              "name": "prices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1415,
                              "src": "26672:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                "typeString": "uint128[] memory"
                              }
                            },
                            "id": 1462,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1461,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1445,
                              "src": "26679:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "26672:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "26635:46:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 1464,
                        "nodeType": "ExpressionStatement",
                        "src": "26635:46:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1448,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1445,
                      "src": "26587:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1449,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1418,
                        "src": "26591:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      "id": 1450,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "26591:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26587:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1466,
                  "initializationExpression": {
                    "assignments": [
                      1445
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1445,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1466,
                        "src": "26572:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1444,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26572:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1447,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1446,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26584:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "26572:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "26616:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1452,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1445,
                        "src": "26616:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1454,
                    "nodeType": "ExpressionStatement",
                    "src": "26616:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "26567:125:0"
                }
              ]
            },
            "documentation": "@dev Called from within submitSolution to update the token prices.\n@param prices list of prices for touched tokens only, first price is always fee token price\n@param tokenIdsForPrice price[i] is the price for the token with tokenID tokenIdsForPrice[i]",
            "id": 1468,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateCurrentPrices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1419,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1415,
                  "name": "prices",
                  "nodeType": "VariableDeclaration",
                  "scope": 1468,
                  "src": "26334:23:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1413,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "26334:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 1414,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "26334:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1418,
                  "name": "tokenIdsForPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 1468,
                  "src": "26359:32:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1416,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "26359:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 1417,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "26359:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26333:59:0"
            },
            "returnParameters": {
              "id": 1420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26401:0:0"
            },
            "scope": 2226,
            "src": "26305:393:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1505,
              "nodeType": "Block",
              "src": "27149:196:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1478,
                            "name": "orders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70,
                            "src": "27188:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                              "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                            }
                          },
                          "id": 1480,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1479,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1470,
                            "src": "27195:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "27188:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                            "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                          }
                        },
                        "id": 1482,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1481,
                          "name": "orderId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1472,
                          "src": "27202:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27188:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_storage",
                          "typeString": "struct BatchExchange.Order storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Order_$95_storage",
                          "typeString": "struct BatchExchange.Order storage ref"
                        }
                      ],
                      "id": 1477,
                      "name": "isOrderWithLimitedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1562,
                      "src": "27163:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (struct BatchExchange.Order memory) pure returns (bool)"
                      }
                    },
                    "id": 1483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27163:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1504,
                  "nodeType": "IfStatement",
                  "src": "27159:180:0",
                  "trueBody": {
                    "id": 1503,
                    "nodeType": "Block",
                    "src": "27213:126:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1484,
                                  "name": "orders",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70,
                                  "src": "27227:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                    "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                  }
                                },
                                "id": 1487,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1485,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1470,
                                  "src": "27234:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27227:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                  "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                }
                              },
                              "id": 1488,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1486,
                                "name": "orderId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1472,
                                "src": "27241:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27227:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_storage",
                                "typeString": "struct BatchExchange.Order storage ref"
                              }
                            },
                            "id": 1489,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "usedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 94,
                            "src": "27227:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1497,
                                    "name": "executedAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1474,
                                    "src": "27301:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 1490,
                                          "name": "orders",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 70,
                                          "src": "27263:6:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                            "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                          }
                                        },
                                        "id": 1492,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 1491,
                                          "name": "owner",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1470,
                                          "src": "27270:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "27263:13:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                          "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                        }
                                      },
                                      "id": 1494,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1493,
                                        "name": "orderId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1472,
                                        "src": "27277:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "27263:22:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_storage",
                                        "typeString": "struct BatchExchange.Order storage ref"
                                      }
                                    },
                                    "id": 1495,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "usedAmount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 94,
                                    "src": "27263:33:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "id": 1496,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8563,
                                  "src": "27263:37:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1498,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27263:53:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1499,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint128",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9719,
                              "src": "27263:63:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256) pure returns (uint128)"
                              }
                            },
                            "id": 1500,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27263:65:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "27227:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 1502,
                        "nodeType": "ExpressionStatement",
                        "src": "27227:101:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Updates an order's remaing requested sell amount upon (partial) execution of a standing order\n@param owner order's corresponding user address\n@param orderId index of order in list of owner's orders\n@param executedAmount proportion of order's requested sellAmount that was filled.",
            "id": 1506,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateRemainingOrder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1470,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1506,
                  "src": "27065:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1469,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27065:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1472,
                  "name": "orderId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1506,
                  "src": "27088:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1471,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "27088:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1474,
                  "name": "executedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1506,
                  "src": "27112:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1473,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "27112:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27055:85:0"
            },
            "returnParameters": {
              "id": 1476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27149:0:0"
            },
            "scope": 2226,
            "src": "27026:319:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1543,
              "nodeType": "Block",
              "src": "27799:196:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1516,
                            "name": "orders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70,
                            "src": "27838:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                              "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                            }
                          },
                          "id": 1518,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1517,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1508,
                            "src": "27845:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "27838:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                            "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                          }
                        },
                        "id": 1520,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1519,
                          "name": "orderId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1510,
                          "src": "27852:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27838:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_storage",
                          "typeString": "struct BatchExchange.Order storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Order_$95_storage",
                          "typeString": "struct BatchExchange.Order storage ref"
                        }
                      ],
                      "id": 1515,
                      "name": "isOrderWithLimitedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1562,
                      "src": "27813:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (struct BatchExchange.Order memory) pure returns (bool)"
                      }
                    },
                    "id": 1521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27813:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1542,
                  "nodeType": "IfStatement",
                  "src": "27809:180:0",
                  "trueBody": {
                    "id": 1541,
                    "nodeType": "Block",
                    "src": "27863:126:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1522,
                                  "name": "orders",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70,
                                  "src": "27877:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                    "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                  }
                                },
                                "id": 1525,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1523,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1508,
                                  "src": "27884:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27877:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                  "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                }
                              },
                              "id": 1526,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1524,
                                "name": "orderId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1510,
                                "src": "27891:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27877:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_storage",
                                "typeString": "struct BatchExchange.Order storage ref"
                              }
                            },
                            "id": 1527,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "usedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 94,
                            "src": "27877:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1535,
                                    "name": "executedAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1512,
                                    "src": "27951:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 1528,
                                          "name": "orders",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 70,
                                          "src": "27913:6:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                            "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                          }
                                        },
                                        "id": 1530,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 1529,
                                          "name": "owner",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1508,
                                          "src": "27920:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "27913:13:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                          "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                        }
                                      },
                                      "id": 1532,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1531,
                                        "name": "orderId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1510,
                                        "src": "27927:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "27913:22:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_storage",
                                        "typeString": "struct BatchExchange.Order storage ref"
                                      }
                                    },
                                    "id": 1533,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "usedAmount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 94,
                                    "src": "27913:33:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "id": 1534,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8579,
                                  "src": "27913:37:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1536,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27913:53:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1537,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint128",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9719,
                              "src": "27913:63:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256) pure returns (uint128)"
                              }
                            },
                            "id": 1538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27913:65:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "27877:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 1540,
                        "nodeType": "ExpressionStatement",
                        "src": "27877:101:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev The inverse of updateRemainingOrder, called when reverting a solution in favour of a better one.\n@param owner order's corresponding user address\n@param orderId index of order in list of owner's orders\n@param executedAmount proportion of order's requested sellAmount that was filled.",
            "id": 1544,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "revertRemainingOrder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1508,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1544,
                  "src": "27715:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1507,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27715:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1510,
                  "name": "orderId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1544,
                  "src": "27738:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1509,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "27738:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1512,
                  "name": "executedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1544,
                  "src": "27762:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1511,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "27762:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27705:85:0"
            },
            "returnParameters": {
              "id": 1514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27799:0:0"
            },
            "scope": 2226,
            "src": "27676:319:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1561,
              "nodeType": "Block",
              "src": "28272:122:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "id": 1554,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1551,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1546,
                          "src": "28289:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1552,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceNumerator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 90,
                        "src": "28289:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1553,
                        "name": "UNLIMITED_ORDER_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50,
                        "src": "28313:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "src": "28289:46:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "id": 1558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1555,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1546,
                          "src": "28339:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1556,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceDenominator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 92,
                        "src": "28339:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1557,
                        "name": "UNLIMITED_ORDER_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50,
                        "src": "28365:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "src": "28339:48:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "28289:98:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1550,
                  "id": 1560,
                  "nodeType": "Return",
                  "src": "28282:105:0"
                }
              ]
            },
            "documentation": "@dev Checks whether an order is intended to track its usedAmount\n@param order order under inspection\n@return true if the given order does track its usedAmount",
            "id": 1562,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOrderWithLimitedAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1546,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 1562,
                  "src": "28224:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1545,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "28224:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28223:20:0"
            },
            "returnParameters": {
              "id": 1550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1549,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1562,
                  "src": "28266:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1548,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "28266:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28265:6:0"
            },
            "scope": 2226,
            "src": "28190:204:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1629,
              "nodeType": "Block",
              "src": "29115:341:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1579,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "29125:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1581,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "batchId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 104,
                      "src": "29125:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1582,
                      "name": "batchId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1564,
                      "src": "29150:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "29125:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 1584,
                  "nodeType": "ExpressionStatement",
                  "src": "29125:32:0"
                },
                {
                  "body": {
                    "id": 1614,
                    "nodeType": "Block",
                    "src": "29211:124:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1602,
                                    "name": "owners",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1567,
                                    "src": "29270:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 1604,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1603,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1586,
                                    "src": "29277:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29270:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1605,
                                    "name": "orderIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1570,
                                    "src": "29290:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                      "typeString": "uint16[] memory"
                                    }
                                  },
                                  "id": 1607,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1606,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1586,
                                    "src": "29299:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29290:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1608,
                                    "name": "volumes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1573,
                                    "src": "29311:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                      "typeString": "uint128[] memory"
                                    }
                                  },
                                  "id": 1610,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1609,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1586,
                                    "src": "29319:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29311:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  },
                                  {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                ],
                                "id": 1601,
                                "name": "TradeData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 102,
                                "src": "29252:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_TradeData_$102_storage_ptr_$",
                                  "typeString": "type(struct BatchExchange.TradeData storage pointer)"
                                }
                              },
                              "id": 1611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "owner",
                                "orderId",
                                "volume"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "29252:71:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TradeData_$102_memory",
                                "typeString": "struct BatchExchange.TradeData memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_TradeData_$102_memory",
                                "typeString": "struct BatchExchange.TradeData memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1596,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "29225:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1599,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "trades",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 107,
                              "src": "29225:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                              }
                            },
                            "id": 1600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "29225:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_TradeData_$102_storage_$returns$_t_uint256_$",
                              "typeString": "function (struct BatchExchange.TradeData storage ref) returns (uint256)"
                            }
                          },
                          "id": 1612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29225:99:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1613,
                        "nodeType": "ExpressionStatement",
                        "src": "29225:99:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1589,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1586,
                      "src": "29187:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1590,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1567,
                        "src": "29191:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 1591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29191:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "29187:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1615,
                  "initializationExpression": {
                    "assignments": [
                      1586
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1586,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1615,
                        "src": "29172:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1585,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29172:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1588,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29184:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "29172:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "29206:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1593,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1586,
                        "src": "29206:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1595,
                    "nodeType": "ExpressionStatement",
                    "src": "29206:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "29167:168:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1616,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "29344:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1618,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "tokenIdsForPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 110,
                      "src": "29344:31:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$dyn_storage",
                        "typeString": "uint16[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1619,
                      "name": "tokenIdsForPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1576,
                      "src": "29378:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                        "typeString": "uint16[] memory"
                      }
                    },
                    "src": "29344:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage",
                      "typeString": "uint16[] storage ref"
                    }
                  },
                  "id": 1621,
                  "nodeType": "ExpressionStatement",
                  "src": "29344:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1627,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1622,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "29404:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1624,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "solutionSubmitter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 112,
                      "src": "29404:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1625,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10242,
                        "src": "29439:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1626,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29439:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "29404:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1628,
                  "nodeType": "ExpressionStatement",
                  "src": "29404:45:0"
                }
              ]
            },
            "documentation": "@dev This function writes solution information into contract storage\n@param batchId index of referenced auction\n@param owners array of addresses corresponding to touched orders\n@param orderIds array of order indices used in parallel with owners to identify touched order\n@param volumes executed buy amounts for each order identified by index of owner-orderId arrays\n@param tokenIdsForPrice price[i] is the price for the token with tokenID tokenIdsForPrice[i]",
            "id": 1630,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "documentTrades",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1577,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1564,
                  "name": "batchId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "28943:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1563,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "28943:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1567,
                  "name": "owners",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "28967:23:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1565,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "28967:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1566,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "28967:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1570,
                  "name": "orderIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "29000:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1568,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "29000:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 1569,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "29000:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1573,
                  "name": "volumes",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "29034:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1571,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "29034:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 1572,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "29034:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1576,
                  "name": "tokenIdsForPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "29068:32:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1574,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "29068:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 1575,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "29068:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28933:173:0"
            },
            "returnParameters": {
              "id": 1578,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29115:0:0"
            },
            "scope": 2226,
            "src": "28910:546:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1782,
              "nodeType": "Block",
              "src": "29605:1348:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1633,
                      "name": "currentBatchHasSolution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1997,
                      "src": "29619:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                        "typeString": "function () view returns (bool)"
                      }
                    },
                    "id": 1634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29619:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1781,
                  "nodeType": "IfStatement",
                  "src": "29615:1332:0",
                  "trueBody": {
                    "id": 1780,
                    "nodeType": "Block",
                    "src": "29646:1301:0",
                    "statements": [
                      {
                        "body": {
                          "id": 1691,
                          "nodeType": "Block",
                          "src": "29719:391:0",
                          "statements": [
                            {
                              "assignments": [
                                1648
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1648,
                                  "name": "owner",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1691,
                                  "src": "29737:13:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 1647,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29737:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1654,
                              "initialValue": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1649,
                                      "name": "latestSolution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 76,
                                      "src": "29753:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                        "typeString": "struct BatchExchange.SolutionData storage ref"
                                      }
                                    },
                                    "id": 1650,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "trades",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 107,
                                    "src": "29753:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                    }
                                  },
                                  "id": 1652,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1651,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1636,
                                    "src": "29775:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29753:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                    "typeString": "struct BatchExchange.TradeData storage ref"
                                  }
                                },
                                "id": 1653,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 97,
                                "src": "29753:30:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29737:46:0"
                            },
                            {
                              "assignments": [
                                1656
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1656,
                                  "name": "orderId",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1691,
                                  "src": "29801:14:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  },
                                  "typeName": {
                                    "id": 1655,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29801:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1662,
                              "initialValue": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1657,
                                      "name": "latestSolution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 76,
                                      "src": "29818:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                        "typeString": "struct BatchExchange.SolutionData storage ref"
                                      }
                                    },
                                    "id": 1658,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "trades",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 107,
                                    "src": "29818:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                    }
                                  },
                                  "id": 1660,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1659,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1636,
                                    "src": "29840:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29818:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                    "typeString": "struct BatchExchange.TradeData storage ref"
                                  }
                                },
                                "id": 1661,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "orderId",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 101,
                                "src": "29818:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29801:49:0"
                            },
                            {
                              "assignments": [
                                1664
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1664,
                                  "name": "order",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1691,
                                  "src": "29868:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 1663,
                                    "name": "Order",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 95,
                                    "src": "29868:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                                      "typeString": "struct BatchExchange.Order"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1670,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1665,
                                    "name": "orders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70,
                                    "src": "29889:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                      "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 1667,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1666,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1648,
                                    "src": "29896:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29889:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                    "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                  }
                                },
                                "id": 1669,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1668,
                                  "name": "orderId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1656,
                                  "src": "29903:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "29889:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_storage",
                                  "typeString": "struct BatchExchange.Order storage ref"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29868:43:0"
                            },
                            {
                              "assignments": [
                                null,
                                1672
                              ],
                              "declarations": [
                                null,
                                {
                                  "constant": false,
                                  "id": 1672,
                                  "name": "sellAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1691,
                                  "src": "29932:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  },
                                  "typeName": {
                                    "id": 1671,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29932:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1681,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1674,
                                          "name": "latestSolution",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 76,
                                          "src": "29971:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                            "typeString": "struct BatchExchange.SolutionData storage ref"
                                          }
                                        },
                                        "id": 1675,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "trades",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 107,
                                        "src": "29971:21:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                          "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                        }
                                      },
                                      "id": 1677,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1676,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1636,
                                        "src": "29993:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "29971:24:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                        "typeString": "struct BatchExchange.TradeData storage ref"
                                      }
                                    },
                                    "id": 1678,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "volume",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 99,
                                    "src": "29971:31:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1679,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1664,
                                    "src": "30004:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  ],
                                  "id": 1673,
                                  "name": "getTradedAmounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2027,
                                  "src": "29954:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$_t_uint128_$",
                                    "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint128,uint128)"
                                  }
                                },
                                "id": 1680,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29954:56:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                                  "typeString": "tuple(uint128,uint128)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29929:81:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1683,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1648,
                                    "src": "30039:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1685,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1664,
                                          "src": "30066:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                            "typeString": "struct BatchExchange.Order memory"
                                          }
                                        },
                                        "id": 1686,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sellToken",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 84,
                                        "src": "30066:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      ],
                                      "id": 1684,
                                      "name": "tokenIdToAddressMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 907,
                                      "src": "30046:19:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                        "typeString": "function (uint16) view returns (address)"
                                      }
                                    },
                                    "id": 1687,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "30046:36:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1688,
                                    "name": "sellAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1672,
                                    "src": "30084:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1682,
                                  "name": "addBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4070,
                                  "src": "30028:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256)"
                                  }
                                },
                                "id": 1689,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30028:67:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1690,
                              "nodeType": "ExpressionStatement",
                              "src": "30028:67:0"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1639,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1636,
                            "src": "29680:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1640,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "29684:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1641,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "trades",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 107,
                              "src": "29684:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                              }
                            },
                            "id": 1642,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "29684:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29680:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1692,
                        "initializationExpression": {
                          "assignments": [
                            1636
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1636,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 1692,
                              "src": "29665:9:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1635,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "29665:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 1638,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "29677:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "29665:13:0"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1645,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "29714:3:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 1644,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1636,
                              "src": "29714:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1646,
                          "nodeType": "ExpressionStatement",
                          "src": "29714:3:0"
                        },
                        "nodeType": "ForStatement",
                        "src": "29660:450:0"
                      },
                      {
                        "body": {
                          "id": 1768,
                          "nodeType": "Block",
                          "src": "30182:595:0",
                          "statements": [
                            {
                              "assignments": [
                                1706
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1706,
                                  "name": "owner",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30200:13:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 1705,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30200:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1712,
                              "initialValue": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1707,
                                      "name": "latestSolution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 76,
                                      "src": "30216:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                        "typeString": "struct BatchExchange.SolutionData storage ref"
                                      }
                                    },
                                    "id": 1708,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "trades",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 107,
                                    "src": "30216:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                    }
                                  },
                                  "id": 1710,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1709,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1694,
                                    "src": "30238:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "30216:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                    "typeString": "struct BatchExchange.TradeData storage ref"
                                  }
                                },
                                "id": 1711,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 97,
                                "src": "30216:30:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30200:46:0"
                            },
                            {
                              "assignments": [
                                1714
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1714,
                                  "name": "orderId",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30264:14:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  },
                                  "typeName": {
                                    "id": 1713,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30264:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1720,
                              "initialValue": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1715,
                                      "name": "latestSolution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 76,
                                      "src": "30281:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                        "typeString": "struct BatchExchange.SolutionData storage ref"
                                      }
                                    },
                                    "id": 1716,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "trades",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 107,
                                    "src": "30281:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                    }
                                  },
                                  "id": 1718,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1717,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1694,
                                    "src": "30303:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "30281:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                    "typeString": "struct BatchExchange.TradeData storage ref"
                                  }
                                },
                                "id": 1719,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "orderId",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 101,
                                "src": "30281:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30264:49:0"
                            },
                            {
                              "assignments": [
                                1722
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1722,
                                  "name": "order",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30331:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 1721,
                                    "name": "Order",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 95,
                                    "src": "30331:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                                      "typeString": "struct BatchExchange.Order"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1728,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1723,
                                    "name": "orders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70,
                                    "src": "30352:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                      "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 1725,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1724,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1706,
                                    "src": "30359:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "30352:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                    "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                  }
                                },
                                "id": 1727,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1726,
                                  "name": "orderId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1714,
                                  "src": "30366:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "30352:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_storage",
                                  "typeString": "struct BatchExchange.Order storage ref"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30331:43:0"
                            },
                            {
                              "assignments": [
                                1730,
                                1732
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1730,
                                  "name": "buyAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30393:17:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  },
                                  "typeName": {
                                    "id": 1729,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30393:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 1732,
                                  "name": "sellAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30412:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  },
                                  "typeName": {
                                    "id": 1731,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30412:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1741,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1734,
                                          "name": "latestSolution",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 76,
                                          "src": "30451:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                            "typeString": "struct BatchExchange.SolutionData storage ref"
                                          }
                                        },
                                        "id": 1735,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "trades",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 107,
                                        "src": "30451:21:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                          "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                        }
                                      },
                                      "id": 1737,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1736,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1694,
                                        "src": "30473:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "30451:24:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                        "typeString": "struct BatchExchange.TradeData storage ref"
                                      }
                                    },
                                    "id": 1738,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "volume",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 99,
                                    "src": "30451:31:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1739,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1722,
                                    "src": "30484:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  ],
                                  "id": 1733,
                                  "name": "getTradedAmounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2027,
                                  "src": "30434:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$_t_uint128_$",
                                    "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint128,uint128)"
                                  }
                                },
                                "id": 1740,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30434:56:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                                  "typeString": "tuple(uint128,uint128)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30392:98:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1743,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1706,
                                    "src": "30529:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1744,
                                    "name": "orderId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1714,
                                    "src": "30536:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1745,
                                    "name": "sellAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1732,
                                    "src": "30545:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1742,
                                  "name": "revertRemainingOrder",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1544,
                                  "src": "30508:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint16_$_t_uint128_$returns$__$",
                                    "typeString": "function (address,uint16,uint128)"
                                  }
                                },
                                "id": 1746,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30508:48:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1747,
                              "nodeType": "ExpressionStatement",
                              "src": "30508:48:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1749,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1706,
                                    "src": "30599:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1751,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1722,
                                          "src": "30626:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                            "typeString": "struct BatchExchange.Order memory"
                                          }
                                        },
                                        "id": 1752,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "buyToken",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 82,
                                        "src": "30626:14:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      ],
                                      "id": 1750,
                                      "name": "tokenIdToAddressMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 907,
                                      "src": "30606:19:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                        "typeString": "function (uint16) view returns (address)"
                                      }
                                    },
                                    "id": 1753,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "30606:35:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1754,
                                    "name": "buyAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1730,
                                    "src": "30643:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1748,
                                  "name": "subtractBalanceUnchecked",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4128,
                                  "src": "30574:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256)"
                                  }
                                },
                                "id": 1755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30574:79:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1756,
                              "nodeType": "ExpressionStatement",
                              "src": "30574:79:0"
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1758,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1706,
                                    "src": "30691:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1759,
                                    "name": "orderId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1714,
                                    "src": "30698:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1760,
                                      "name": "order",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1722,
                                      "src": "30707:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                        "typeString": "struct BatchExchange.Order memory"
                                      }
                                    },
                                    "id": 1761,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sellToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 84,
                                    "src": "30707:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1762,
                                      "name": "order",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1722,
                                      "src": "30724:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                        "typeString": "struct BatchExchange.Order memory"
                                      }
                                    },
                                    "id": 1763,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "buyToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 82,
                                    "src": "30724:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1764,
                                    "name": "sellAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1732,
                                    "src": "30740:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1765,
                                    "name": "buyAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1730,
                                    "src": "30752:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1757,
                                  "name": "TradeReversion",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 181,
                                  "src": "30676:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint128_$_t_uint128_$returns$__$",
                                    "typeString": "function (address,uint16,uint16,uint16,uint128,uint128)"
                                  }
                                },
                                "id": 1766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30676:86:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1767,
                              "nodeType": "EmitStatement",
                              "src": "30671:91:0"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1697,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1694,
                            "src": "30143:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1698,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "30147:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1699,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "trades",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 107,
                              "src": "30147:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                              }
                            },
                            "id": 1700,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "30147:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30143:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1769,
                        "initializationExpression": {
                          "assignments": [
                            1694
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1694,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 1769,
                              "src": "30128:9:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1693,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "30128:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 1696,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "30140:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "30128:13:0"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1703,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "30177:3:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 1702,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1694,
                              "src": "30177:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1704,
                          "nodeType": "ExpressionStatement",
                          "src": "30177:3:0"
                        },
                        "nodeType": "ForStatement",
                        "src": "30123:654:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1771,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "30853:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1772,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "solutionSubmitter",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 112,
                              "src": "30853:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1774,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "30907:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1773,
                                "name": "tokenIdToAddressMap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 907,
                                "src": "30887:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                  "typeString": "function (uint16) view returns (address)"
                                }
                              },
                              "id": 1775,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30887:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1776,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "30911:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1777,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "feeReward",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 114,
                              "src": "30911:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1770,
                            "name": "subtractBalanceUnchecked",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4128,
                            "src": "30828:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30828:108:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1779,
                        "nodeType": "ExpressionStatement",
                        "src": "30828:108:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev reverts all relevant contract storage relating to an overwritten auction solution.",
            "id": 1783,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "undoCurrentSolution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1631,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29594:2:0"
            },
            "returnParameters": {
              "id": 1632,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29605:0:0"
            },
            "scope": 2226,
            "src": "29566:1387:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1801,
              "nodeType": "Block",
              "src": "31244:237:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1790,
                            "name": "newObjectiveValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1785,
                            "src": "31312:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1789,
                          "name": "isObjectiveValueSufficientlyImproved",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2049,
                          "src": "31275:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 1791,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31275:55:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6577206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e",
                        "id": 1792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31344:61:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_43e1a90ed98a9f793ebd7d4e20d4e1458b3afd145d17a0f63106b93bef891844",
                          "typeString": "literal_string \"New objective doesn't sufficiently improve current solution\""
                        },
                        "value": "New objective doesn't sufficiently improve current solution"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_43e1a90ed98a9f793ebd7d4e20d4e1458b3afd145d17a0f63106b93bef891844",
                          "typeString": "literal_string \"New objective doesn't sufficiently improve current solution\""
                        }
                      ],
                      "id": 1788,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "31254:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31254:161:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1794,
                  "nodeType": "ExpressionStatement",
                  "src": "31254:161:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "31425:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1797,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "objectiveValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 116,
                      "src": "31425:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1798,
                      "name": "newObjectiveValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1785,
                      "src": "31457:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31425:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1800,
                  "nodeType": "ExpressionStatement",
                  "src": "31425:49:0"
                }
              ]
            },
            "documentation": "@dev determines if value is better than currently and updates if it is.\n@param newObjectiveValue proposed value to be updated if a great enough improvement on the current objective value",
            "id": 1802,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkAndOverrideObjectiveValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1785,
                  "name": "newObjectiveValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "31209:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1784,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31209:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31208:27:0"
            },
            "returnParameters": {
              "id": 1787,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31244:0:0"
            },
            "scope": 2226,
            "src": "31169:312:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1869,
              "nodeType": "Block",
              "src": "31924:623:0",
              "statements": [
                {
                  "assignments": [
                    1812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1812,
                      "name": "execSellTimesBuy",
                      "nodeType": "VariableDeclaration",
                      "scope": 1869,
                      "src": "32042:24:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1811,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32042:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1828,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1825,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1806,
                          "src": "32180:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1826,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceNumerator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 90,
                        "src": "32180:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1814,
                            "name": "execBuy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1804,
                            "src": "32091:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1815,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "32100:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1818,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1816,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1806,
                                "src": "32114:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 1817,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "32114:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "32100:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1819,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "32131:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1822,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1820,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1806,
                                "src": "32145:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 1821,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sellToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 84,
                              "src": "32145:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "32131:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "id": 1813,
                          "name": "getExecutedSellAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1983,
                          "src": "32069:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint128_$_t_uint128_$_t_uint128_$returns$_t_uint128_$",
                            "typeString": "function (uint128,uint128,uint128) pure returns (uint128)"
                          }
                        },
                        "id": 1823,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32069:93:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 1824,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8640,
                      "src": "32069:110:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32069:132:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32042:159:0"
                },
                {
                  "assignments": [
                    1830
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1830,
                      "name": "roundedUtility",
                      "nodeType": "VariableDeclaration",
                      "scope": 1869,
                      "src": "32212:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1829,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32212:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1845,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1840,
                          "name": "currentPrices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "32299:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                            "typeString": "mapping(uint16 => uint128)"
                          }
                        },
                        "id": 1843,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1841,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1806,
                            "src": "32313:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          },
                          "id": 1842,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buyToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 82,
                          "src": "32313:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "32299:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1835,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1806,
                                  "src": "32270:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                "id": 1836,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "priceDenominator",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 92,
                                "src": "32270:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1833,
                                "name": "execSellTimesBuy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1812,
                                "src": "32249:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1834,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "div",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8656,
                              "src": "32249:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1837,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32249:44:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1831,
                            "name": "execBuy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1804,
                            "src": "32237:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "id": 1832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8579,
                          "src": "32237:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32237:57:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8640,
                      "src": "32237:61:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32237:92:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32212:117:0"
                },
                {
                  "assignments": [
                    1847
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1847,
                      "name": "utilityError",
                      "nodeType": "VariableDeclaration",
                      "scope": 1869,
                      "src": "32339:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1846,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32339:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1863,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1860,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1806,
                          "src": "32459:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1861,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceDenominator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 92,
                        "src": "32459:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1854,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "32411:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1857,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1855,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1806,
                                "src": "32425:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 1856,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "32425:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "32411:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1850,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1806,
                                  "src": "32383:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                "id": 1851,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "priceDenominator",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 92,
                                "src": "32383:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1848,
                                "name": "execSellTimesBuy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1812,
                                "src": "32362:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mod",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8699,
                              "src": "32362:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1852,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32362:44:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1853,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8640,
                          "src": "32362:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32362:79:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8656,
                      "src": "32362:83:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32362:129:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32339:152:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1866,
                        "name": "utilityError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1847,
                        "src": "32527:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1864,
                        "name": "roundedUtility",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1830,
                        "src": "32508:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1865,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8579,
                      "src": "32508:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32508:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1810,
                  "id": 1868,
                  "nodeType": "Return",
                  "src": "32501:39:0"
                }
              ]
            },
            "documentation": "@dev Evaluates utility of executed trade\n@param execBuy represents proportion of order executed (in terms of buy amount)\n@param order the sell order whose utility is being evaluated\n@return Utility = ((execBuy * order.sellAmt - execSell * order.buyAmt) * price.buyToken) / order.sellAmt",
            "id": 1870,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "evaluateUtility",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1807,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1804,
                  "name": "execBuy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "31856:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1803,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "31856:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1806,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "31873:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1805,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "31873:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31855:37:0"
            },
            "returnParameters": {
              "id": 1810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1809,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "31915:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1808,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31915:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31914:9:0"
            },
            "scope": 2226,
            "src": "31831:716:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1950,
              "nodeType": "Block",
              "src": "33425:611:0",
              "statements": [
                {
                  "assignments": [
                    1880
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1880,
                      "name": "leftoverSellAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 1950,
                      "src": "33435:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1879,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33435:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1894,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1884,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1872,
                            "src": "33492:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          ],
                          "id": 1883,
                          "name": "getRemainingAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2083,
                          "src": "33473:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$",
                            "typeString": "function (struct BatchExchange.Order memory) pure returns (uint128)"
                          }
                        },
                        "id": 1885,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33473:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1887,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1874,
                            "src": "33511:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1889,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1872,
                                  "src": "33537:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                "id": 1890,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sellToken",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 84,
                                "src": "33537:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "id": 1888,
                              "name": "tokenIdToAddressMap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 907,
                              "src": "33517:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                "typeString": "function (uint16) view returns (address)"
                              }
                            },
                            "id": 1891,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33517:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1886,
                          "name": "getBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "33500:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address,address) view returns (uint256)"
                          }
                        },
                        "id": 1892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33500:54:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1881,
                        "name": "Math",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8536,
                        "src": "33464:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Math_$8536_$",
                          "typeString": "type(library Math)"
                        }
                      },
                      "id": 1882,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "min",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8503,
                      "src": "33464:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33464:91:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33435:120:0"
                },
                {
                  "assignments": [
                    1896
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1896,
                      "name": "limitTermLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 1950,
                      "src": "33565:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1895,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33565:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1905,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1902,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1872,
                          "src": "33624:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1903,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceDenominator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 92,
                        "src": "33624:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1897,
                          "name": "currentPrices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "33589:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                            "typeString": "mapping(uint16 => uint128)"
                          }
                        },
                        "id": 1900,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1898,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1872,
                            "src": "33603:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          },
                          "id": 1899,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sellToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 84,
                          "src": "33603:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "33589:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 1901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8640,
                      "src": "33589:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33589:58:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33565:82:0"
                },
                {
                  "assignments": [
                    1907
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1907,
                      "name": "limitTermRight",
                      "nodeType": "VariableDeclaration",
                      "scope": 1950,
                      "src": "33657:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1906,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33657:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1924,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 1922,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1920,
                          "name": "FEE_DENOMINATOR",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56,
                          "src": "33776:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "33794:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "33776:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1917,
                            "name": "FEE_DENOMINATOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "33742:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1911,
                                  "name": "currentPrices",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 74,
                                  "src": "33707:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                    "typeString": "mapping(uint16 => uint128)"
                                  }
                                },
                                "id": 1914,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1912,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1872,
                                    "src": "33721:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  },
                                  "id": 1913,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "buyToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 82,
                                  "src": "33721:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "33707:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1908,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1872,
                                  "src": "33682:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                "id": 1909,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "priceNumerator",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 90,
                                "src": "33682:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "id": 1910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8640,
                              "src": "33682:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33682:55:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8640,
                          "src": "33682:59:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33682:76:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8656,
                      "src": "33682:80:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33682:123:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33657:148:0"
                },
                {
                  "assignments": [
                    1926
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1926,
                      "name": "limitTerm",
                      "nodeType": "VariableDeclaration",
                      "scope": 1950,
                      "src": "33815:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1925,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33815:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1928,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "33835:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33815:21:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1929,
                      "name": "limitTermLeft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "33850:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1930,
                      "name": "limitTermRight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1907,
                      "src": "33866:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "33850:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1940,
                  "nodeType": "IfStatement",
                  "src": "33846:106:0",
                  "trueBody": {
                    "id": 1939,
                    "nodeType": "Block",
                    "src": "33882:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1937,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1932,
                            "name": "limitTerm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "33896:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1935,
                                "name": "limitTermRight",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1907,
                                "src": "33926:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1933,
                                "name": "limitTermLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1896,
                                "src": "33908:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8579,
                              "src": "33908:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1936,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33908:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33896:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1938,
                        "nodeType": "ExpressionStatement",
                        "src": "33896:45:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1946,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1872,
                          "src": "34006:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1947,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceDenominator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 92,
                        "src": "34006:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1943,
                            "name": "limitTerm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "33991:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1941,
                            "name": "leftoverSellAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1880,
                            "src": "33968:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8640,
                          "src": "33968:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1944,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33968:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8656,
                      "src": "33968:37:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33968:61:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1878,
                  "id": 1949,
                  "nodeType": "Return",
                  "src": "33961:68:0"
                }
              ]
            },
            "documentation": "@dev computes a measure of how much of an order was disregarded (only valid when limit price is respected)\n@param order the sell order whose disregarded utility is being evaluated\n@param user address of order's owner\n@return disregardedUtility of the order (after it has been applied)\nNote that:\n|disregardedUtility| = (limitTerm * leftoverSellAmount) / order.sellAmount\nwhere limitTerm = price.SellToken * order.sellAmt - order.buyAmt * price.buyToken / (1 - phi)\nand leftoverSellAmount = order.sellAmt - execSellAmt\nBalances and orders have all been updated so: sellAmount - execSellAmt == remainingAmount(order).\nFor correctness, we take the minimum of this with the user's token balance.",
            "id": 1951,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "evaluateDisregardedUtility",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1875,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1872,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 1951,
                  "src": "33360:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1871,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "33360:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1874,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1951,
                  "src": "33380:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1873,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "33380:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33359:34:0"
            },
            "returnParameters": {
              "id": 1878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1877,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1951,
                  "src": "33416:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1876,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33416:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33415:9:0"
            },
            "scope": 2226,
            "src": "33324:712:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1982,
              "nodeType": "Block",
              "src": "35326:325:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1977,
                            "name": "sellTokenPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1957,
                            "src": "35560:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1974,
                                "name": "FEE_DENOMINATOR",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 56,
                                "src": "35522:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    "id": 1971,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 1969,
                                      "name": "FEE_DENOMINATOR",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 56,
                                      "src": "35480:15:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 1970,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "35498:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "35480:19:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1966,
                                        "name": "buyTokenPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1955,
                                        "src": "35444:13:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 1963,
                                            "name": "executedBuyAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1953,
                                            "src": "35404:17:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            }
                                          ],
                                          "id": 1962,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "35396:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": "uint256"
                                        },
                                        "id": 1964,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "35396:26:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1965,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8640,
                                      "src": "35396:47:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1967,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "35396:62:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1968,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8656,
                                  "src": "35396:83:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1972,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "35396:104:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8640,
                              "src": "35396:125:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1975,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35396:142:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8656,
                          "src": "35396:163:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1978,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35396:179:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toUint128",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9719,
                      "src": "35396:206:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint128)"
                      }
                    },
                    "id": 1980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35396:208:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 1961,
                  "id": 1981,
                  "nodeType": "Return",
                  "src": "35377:227:0"
                }
              ]
            },
            "documentation": "@dev Evaluates executedBuy amount based on prices and executedBuyAmout (fees included)\n@param executedBuyAmount amount of buyToken executed for purchase in batch auction\n@param buyTokenPrice uniform clearing price of buyToken\n@param sellTokenPrice uniform clearing price of sellToken\n@return executedSellAmount as expressed in Equation (2)\nhttps://github.com/gnosis/dex-contracts/issues/173#issuecomment-526163117\nexecSellAmount * p[sellToken] * (1 - phi) == execBuyAmount * p[buyToken]\nwhere phi = 1/FEE_DENOMINATOR\nNote that: 1 - phi = (FEE_DENOMINATOR - 1) / FEE_DENOMINATOR\nAnd so, 1/(1-phi) = FEE_DENOMINATOR / (FEE_DENOMINATOR - 1)\nexecSellAmount = (execBuyAmount * p[buyToken]) / (p[sellToken] * (1 - phi))\n               = (execBuyAmount * buyTokenPrice / sellTokenPrice) * FEE_DENOMINATOR / (FEE_DENOMINATOR - 1)\nin order to minimize rounding errors, the order of operations is switched\n               = ((executedBuyAmount * buyTokenPrice) / (FEE_DENOMINATOR - 1)) * FEE_DENOMINATOR) / sellTokenPrice",
            "id": 1983,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getExecutedSellAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1953,
                  "name": "executedBuyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "35200:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1952,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "35200:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1955,
                  "name": "buyTokenPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "35235:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1954,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "35235:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1957,
                  "name": "sellTokenPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "35266:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1956,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "35266:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35190:104:0"
            },
            "returnParameters": {
              "id": 1961,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1960,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "35317:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1959,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "35317:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35316:9:0"
            },
            "scope": 2226,
            "src": "35160:491:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1996,
              "nodeType": "Block",
              "src": "35898:73:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 1994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1988,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "35915:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1989,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "batchId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 104,
                      "src": "35915:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 1993,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1990,
                          "name": "getCurrentBatchId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3888,
                          "src": "35941:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                            "typeString": "function () view returns (uint32)"
                          }
                        },
                        "id": 1991,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35941:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1992,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "35963:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "35941:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "35915:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1987,
                  "id": 1995,
                  "nodeType": "Return",
                  "src": "35908:56:0"
                }
              ]
            },
            "documentation": "@dev used to determine if solution if first provided in current batch\n@return true if `latestSolution` is storing a solution for current batch, else false",
            "id": 1997,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentBatchHasSolution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1984,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35867:2:0"
            },
            "returnParameters": {
              "id": 1987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1986,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1997,
                  "src": "35892:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1985,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "35892:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35891:6:0"
            },
            "scope": 2226,
            "src": "35835:136:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2026,
              "nodeType": "Block",
              "src": "36380:251:0",
              "statements": [
                {
                  "assignments": [
                    2009
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2009,
                      "name": "executedSellAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 2026,
                      "src": "36390:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 2008,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "36390:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2021,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2011,
                        "name": "executedBuyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1999,
                        "src": "36454:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2012,
                          "name": "currentPrices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "36485:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                            "typeString": "mapping(uint16 => uint128)"
                          }
                        },
                        "id": 2015,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2013,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2001,
                            "src": "36499:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          },
                          "id": 2014,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buyToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 82,
                          "src": "36499:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "36485:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2016,
                          "name": "currentPrices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "36528:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                            "typeString": "mapping(uint16 => uint128)"
                          }
                        },
                        "id": 2019,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2017,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2001,
                            "src": "36542:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          },
                          "id": 2018,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sellToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 84,
                          "src": "36542:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "36528:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 2010,
                      "name": "getExecutedSellAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1983,
                      "src": "36419:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint128_$_t_uint128_$_t_uint128_$returns$_t_uint128_$",
                        "typeString": "function (uint128,uint128,uint128) pure returns (uint128)"
                      }
                    },
                    "id": 2020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36419:149:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36390:178:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 2022,
                        "name": "executedBuyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1999,
                        "src": "36586:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2023,
                        "name": "executedSellAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2009,
                        "src": "36605:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "id": 2024,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "36585:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                      "typeString": "tuple(uint128,uint128)"
                    }
                  },
                  "functionReturnParameters": 2007,
                  "id": 2025,
                  "nodeType": "Return",
                  "src": "36578:46:0"
                }
              ]
            },
            "documentation": "@dev Compute trade execution based on executedBuyAmount and relevant token prices\n@param executedBuyAmount executed buy amount\n@param order contains relevant buy-sell token information\n@return (executedBuyAmount, executedSellAmount)",
            "id": 2027,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTradedAmounts",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1999,
                  "name": "executedBuyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2027,
                  "src": "36293:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1998,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "36293:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2001,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 2027,
                  "src": "36320:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2000,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "36320:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36292:47:0"
            },
            "returnParameters": {
              "id": 2007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2004,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2027,
                  "src": "36362:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 2003,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "36362:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2006,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2027,
                  "src": "36371:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 2005,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "36371:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36361:18:0"
            },
            "scope": 2226,
            "src": "36267:364:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2048,
              "nodeType": "Block",
              "src": "37013:131:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2036,
                              "name": "IMPROVEMENT_DENOMINATOR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53,
                              "src": "37050:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2034,
                              "name": "objectiveValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "37031:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2035,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8640,
                            "src": "37031:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2037,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37031:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 2041,
                                "name": "IMPROVEMENT_DENOMINATOR",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 53,
                                "src": "37108:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 2042,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "37134:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "37108:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2038,
                                "name": "getCurrentObjectiveValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1264,
                                "src": "37077:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 2039,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "37077:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8640,
                            "src": "37077:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37077:59:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "37031:105:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 2046,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "37030:107:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2033,
                  "id": 2047,
                  "nodeType": "Return",
                  "src": "37023:114:0"
                }
              ]
            },
            "documentation": "@dev Checks that the proposed objective value is a significant enough improvement on the latest one\n@param objectiveValue the proposed objective value to check\n@return true if the objectiveValue is a significant enough improvement, false otherwise",
            "id": 2049,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isObjectiveValueSufficientlyImproved",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2029,
                  "name": "objectiveValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 2049,
                  "src": "36961:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2028,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36961:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36960:24:0"
            },
            "returnParameters": {
              "id": 2033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2032,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2049,
                  "src": "37007:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2031,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "37007:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37006:6:0"
            },
            "scope": 2226,
            "src": "36915:229:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2068,
              "nodeType": "Block",
              "src": "37522:81:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 2061,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2058,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2051,
                          "src": "37539:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 2059,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "validFrom",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 86,
                        "src": "37539:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2060,
                        "name": "batchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2053,
                        "src": "37558:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "37539:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 2065,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2062,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2051,
                          "src": "37569:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 2063,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "validUntil",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 88,
                        "src": "37569:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2064,
                        "name": "batchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2053,
                        "src": "37589:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "37569:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "37539:57:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2057,
                  "id": 2067,
                  "nodeType": "Return",
                  "src": "37532:64:0"
                }
              ]
            },
            "documentation": "@dev used to determine if an order is valid for specific auction/batch\n@param order object whose validity is in question\n@param batchId auction index of validity\n@return true if order is valid in auction batchId else false",
            "id": 2069,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkOrderValidity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2051,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 2069,
                  "src": "37458:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2050,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "37458:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2053,
                  "name": "batchId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2069,
                  "src": "37478:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 2052,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "37478:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37457:36:0"
            },
            "returnParameters": {
              "id": 2057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2056,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2069,
                  "src": "37516:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2055,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "37516:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37515:6:0"
            },
            "scope": 2226,
            "src": "37430:173:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2082,
              "nodeType": "Block",
              "src": "37881:65:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    },
                    "id": 2080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2076,
                        "name": "order",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2071,
                        "src": "37898:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                          "typeString": "struct BatchExchange.Order memory"
                        }
                      },
                      "id": 2077,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "priceDenominator",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 92,
                      "src": "37898:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2078,
                        "name": "order",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2071,
                        "src": "37923:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                          "typeString": "struct BatchExchange.Order memory"
                        }
                      },
                      "id": 2079,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "usedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 94,
                      "src": "37923:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "37898:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 2075,
                  "id": 2081,
                  "nodeType": "Return",
                  "src": "37891:48:0"
                }
              ]
            },
            "documentation": "@dev computes the remaining sell amount for a given order\n@param order the order for which remaining amount should be calculated\n@return the remaining sell amount",
            "id": 2083,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRemainingAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2071,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 2083,
                  "src": "37830:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2070,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "37830:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37829:20:0"
            },
            "returnParameters": {
              "id": 2075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2074,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2083,
                  "src": "37872:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 2073,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "37872:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37871:9:0"
            },
            "scope": 2226,
            "src": "37802:144:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2191,
              "nodeType": "Block",
              "src": "38428:648:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2094,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38438:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2097,
                          "name": "user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "38465:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2095,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10229,
                          "src": "38448:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 2096,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "encodePacked",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "38448:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                          "typeString": "function () pure returns (bytes memory)"
                        }
                      },
                      "id": 2098,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38448:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38438:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2100,
                  "nodeType": "ExpressionStatement",
                  "src": "38438:32:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2101,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38480:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2106,
                              "name": "sellTokenBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2087,
                              "src": "38522:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2104,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38505:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2105,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38505:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38505:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2102,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38490:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2103,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38490:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38490:50:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38480:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2110,
                  "nodeType": "ExpressionStatement",
                  "src": "38480:60:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2111,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38550:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2116,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38592:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2117,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "38592:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2114,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38575:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2115,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38575:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38575:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2112,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38560:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2113,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38560:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2119,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38560:48:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38550:58:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2121,
                  "nodeType": "ExpressionStatement",
                  "src": "38550:58:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2122,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38618:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2127,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38660:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2128,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sellToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 84,
                              "src": "38660:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2125,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38643:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2126,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38643:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2129,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38643:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2123,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38628:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2124,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38628:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2130,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38628:49:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38618:59:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2132,
                  "nodeType": "ExpressionStatement",
                  "src": "38618:59:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2133,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38687:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2138,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38729:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2139,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "validFrom",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 86,
                              "src": "38729:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2136,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38712:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2137,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38712:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2140,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38712:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2134,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38697:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38697:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38697:49:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38687:59:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2143,
                  "nodeType": "ExpressionStatement",
                  "src": "38687:59:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2144,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38756:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2149,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38798:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2150,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "validUntil",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 88,
                              "src": "38798:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2147,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38781:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38781:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38781:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2145,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38766:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38766:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2152,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38766:50:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38756:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2154,
                  "nodeType": "ExpressionStatement",
                  "src": "38756:60:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2155,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38826:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2160,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38868:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2161,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "priceNumerator",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 90,
                              "src": "38868:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2158,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38851:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2159,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38851:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38851:38:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2156,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38836:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38836:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2163,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38836:54:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38826:64:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2165,
                  "nodeType": "ExpressionStatement",
                  "src": "38826:64:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2166,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38900:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2171,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38942:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2172,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "priceDenominator",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 92,
                              "src": "38942:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2169,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38925:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38925:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38925:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2167,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38910:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38910:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2174,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38910:56:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38900:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2176,
                  "nodeType": "ExpressionStatement",
                  "src": "38900:66:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2177,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38976:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2183,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2089,
                                  "src": "39037:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                ],
                                "id": 2182,
                                "name": "getRemainingAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2083,
                                "src": "39018:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$",
                                  "typeString": "function (struct BatchExchange.Order memory) pure returns (uint128)"
                                }
                              },
                              "id": 2184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39018:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2180,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "39001:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2181,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "39001:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39001:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2178,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38986:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38986:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2186,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38986:59:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38976:69:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2188,
                  "nodeType": "ExpressionStatement",
                  "src": "38976:69:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2189,
                    "name": "element",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2092,
                    "src": "39062:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 2093,
                  "id": 2190,
                  "nodeType": "Return",
                  "src": "39055:14:0"
                }
              ]
            },
            "documentation": "@dev called only by getEncodedOrders and used to pack auction info into bytes\n@param user list of tokenIds\n@param sellTokenBalance user's account balance of sell token\n@param order a sell order\n@return byte encoded, packed, concatenation of relevant order information",
            "id": 2192,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encodeAuctionElement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2085,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 2192,
                  "src": "38303:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2084,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "38303:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2087,
                  "name": "sellTokenBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 2192,
                  "src": "38325:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2086,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38325:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2089,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 2192,
                  "src": "38359:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2088,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "38359:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "38293:90:0"
            },
            "returnParameters": {
              "id": 2093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2092,
                  "name": "element",
                  "nodeType": "VariableDeclaration",
                  "scope": 2192,
                  "src": "38406:20:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2091,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "38406:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "38405:22:0"
            },
            "scope": 2226,
            "src": "38264:812:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2224,
              "nodeType": "Block",
              "src": "39328:184:0",
              "statements": [
                {
                  "body": {
                    "id": 2220,
                    "nodeType": "Block",
                    "src": "39383:102:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 2215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2211,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2195,
                              "src": "39401:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                "typeString": "uint128[] memory"
                              }
                            },
                            "id": 2213,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2212,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2201,
                              "src": "39409:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "39401:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2214,
                            "name": "AMOUNT_MINIMUM",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44,
                            "src": "39414:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "39401:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2219,
                        "nodeType": "IfStatement",
                        "src": "39397:78:0",
                        "trueBody": {
                          "id": 2218,
                          "nodeType": "Block",
                          "src": "39430:45:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 2216,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "39455:5:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 2199,
                              "id": 2217,
                              "nodeType": "Return",
                              "src": "39448:12:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2204,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2201,
                      "src": "39358:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2205,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2195,
                        "src": "39362:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      "id": 2206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "39362:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "39358:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2221,
                  "initializationExpression": {
                    "assignments": [
                      2201
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2201,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2221,
                        "src": "39343:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2200,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39343:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 2203,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "39355:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "39343:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2209,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "39378:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2208,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2201,
                        "src": "39378:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2210,
                    "nodeType": "ExpressionStatement",
                    "src": "39378:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "39338:147:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "39501:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2199,
                  "id": 2223,
                  "nodeType": "Return",
                  "src": "39494:11:0"
                }
              ]
            },
            "documentation": "@dev determines if value is better than currently and updates if it is.\n@param amounts array of values to be verified with AMOUNT_MINIMUM",
            "id": 2225,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyAmountThreshold",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2196,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2195,
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 2225,
                  "src": "39274:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2193,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "39274:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 2194,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "39274:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39273:26:0"
            },
            "returnParameters": {
              "id": 2199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2198,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2225,
                  "src": "39322:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2197,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "39322:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39321:6:0"
            },
            "scope": 2226,
            "src": "39243:269:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 2227,
        "src": "753:38761:0"
      }
    ],
    "src": "0:39515:0"
  },
  "legacyAST": {
    "absolutePath": "/Users/felixleupold/Gnosis/dex-contracts/contracts/BatchExchange.sol",
    "exportedSymbols": {
      "BatchExchange": [
        2226
      ]
    },
    "id": 2227,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:0"
      },
      {
        "absolutePath": "/Users/felixleupold/Gnosis/dex-contracts/contracts/EpochTokenLocker.sol",
        "file": "./EpochTokenLocker.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 4189,
        "src": "25:32:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@gnosis.pm/solidity-data-structures/contracts/libraries/IdToAddressBiMap.sol",
        "file": "@gnosis.pm/solidity-data-structures/contracts/libraries/IdToAddressBiMap.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 6490,
        "src": "58:86:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@gnosis.pm/solidity-data-structures/contracts/libraries/IterableAppendOnlySet.sol",
        "file": "@gnosis.pm/solidity-data-structures/contracts/libraries/IterableAppendOnlySet.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 6633,
        "src": "145:91:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@gnosis.pm/owl-token/contracts/5/TokenOWL.sol",
        "file": "@gnosis.pm/owl-token/contracts/5/TokenOWL.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 6271,
        "src": "237:55:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/SafeCast.sol",
        "file": "@openzeppelin/contracts/utils/SafeCast.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 9805,
        "src": "293:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "solidity-bytes-utils/contracts/BytesLib.sol",
        "file": "solidity-bytes-utils/contracts/BytesLib.sol",
        "id": 7,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 10228,
        "src": "346:53:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/felixleupold/Gnosis/dex-contracts/contracts/libraries/TokenConservation.sol",
        "file": "./libraries/TokenConservation.sol",
        "id": 8,
        "nodeType": "ImportDirective",
        "scope": 2227,
        "sourceUnit": 4662,
        "src": "400:43:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9,
              "name": "EpochTokenLocker",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4188,
              "src": "779:16:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EpochTokenLocker_$4188",
                "typeString": "contract EpochTokenLocker"
              }
            },
            "id": 10,
            "nodeType": "InheritanceSpecifier",
            "src": "779:16:0"
          }
        ],
        "contractDependencies": [
          4188
        ],
        "contractKind": "contract",
        "documentation": "@title BatchExchange - A decentralized exchange for any ERC20 token as a multi-token batch\n auction with uniform clearing prices.\n For more information visit: <https://github.com/gnosis/dex-contracts>\n @author @gnosis/dfusion-team <https://github.com/orgs/gnosis/teams/dfusion-team/members>",
        "fullyImplemented": true,
        "id": 2226,
        "linearizedBaseContracts": [
          2226,
          4188
        ],
        "name": "BatchExchange",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 13,
            "libraryName": {
              "contractScope": null,
              "id": 11,
              "name": "SafeCast",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9804,
              "src": "808:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeCast_$9804",
                "typeString": "library SafeCast"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "802:27:0",
            "typeName": {
              "id": 12,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "821:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 16,
            "libraryName": {
              "contractScope": null,
              "id": 14,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8723,
              "src": "840:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$8723",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "834:27:0",
            "typeName": {
              "id": 15,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "853:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            }
          },
          {
            "id": 19,
            "libraryName": {
              "contractScope": null,
              "id": 17,
              "name": "BytesLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10227,
              "src": "872:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesLib_$10227",
                "typeString": "library BytesLib"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "866:27:0",
            "typeName": {
              "id": 18,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "885:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "id": 22,
            "libraryName": {
              "contractScope": null,
              "id": 20,
              "name": "BytesLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10227,
              "src": "904:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesLib_$10227",
                "typeString": "library BytesLib"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "898:25:0",
            "typeName": {
              "id": 21,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "917:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 26,
            "libraryName": {
              "contractScope": null,
              "id": 23,
              "name": "TokenConservation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4661,
              "src": "934:17:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenConservation_$4661",
                "typeString": "library TokenConservation"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "928:37:0",
            "typeName": {
              "baseType": {
                "id": 24,
                "name": "int256",
                "nodeType": "ElementaryTypeName",
                "src": "956:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_int256",
                  "typeString": "int256"
                }
              },
              "id": 25,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "956:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr",
                "typeString": "int256[]"
              }
            }
          },
          {
            "id": 30,
            "libraryName": {
              "contractScope": null,
              "id": 27,
              "name": "TokenConservation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4661,
              "src": "976:17:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenConservation_$4661",
                "typeString": "library TokenConservation"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "970:37:0",
            "typeName": {
              "baseType": {
                "id": 28,
                "name": "uint16",
                "nodeType": "ElementaryTypeName",
                "src": "998:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                }
              },
              "id": 29,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "998:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                "typeString": "uint16[]"
              }
            }
          },
          {
            "id": 33,
            "libraryName": {
              "contractScope": null,
              "id": 31,
              "name": "IterableAppendOnlySet",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6632,
              "src": "1018:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IterableAppendOnlySet_$6632",
                "typeString": "library IterableAppendOnlySet"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1012:59:0",
            "typeName": {
              "contractScope": null,
              "id": 32,
              "name": "IterableAppendOnlySet.Data",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6500,
              "src": "1044:26:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Data_$6500_storage_ptr",
                "typeString": "struct IterableAppendOnlySet.Data"
              }
            }
          },
          {
            "constant": true,
            "id": 36,
            "name": "MAX_TOUCHED_ORDERS",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1162:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 34,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1162:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3330",
              "id": 35,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1207:2:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_30_by_1",
                "typeString": "int_const 30"
              },
              "value": "30"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 39,
            "name": "FEE_FOR_LISTING_TOKEN_IN_OWL",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1263:63:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 37,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1263:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3130",
              "id": 38,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1318:8:0",
              "subdenomination": "ether",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000000000000000000_by_1",
                "typeString": "int_const 10000000000000000000"
              },
              "value": "10"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 44,
            "name": "AMOUNT_MINIMUM",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1420:46:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint128",
              "typeString": "uint128"
            },
            "typeName": {
              "id": 40,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "1420:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_10000_by_1",
                "typeString": "int_const 10000"
              },
              "id": 43,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "hexValue": "3130",
                "id": 41,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1461:2:0",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_10_by_1",
                  "typeString": "int_const 10"
                },
                "value": "10"
              },
              "nodeType": "BinaryOperation",
              "operator": "**",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "34",
                "id": 42,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1465:1:0",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_4_by_1",
                  "typeString": "int_const 4"
                },
                "value": "4"
              },
              "src": "1461:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000_by_1",
                "typeString": "int_const 10000"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 50,
            "name": "UNLIMITED_ORDER_AMOUNT",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1563:60:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint128",
              "typeString": "uint128"
            },
            "typeName": {
              "id": 45,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "1563:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 48,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1620:2:0",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 47,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1621:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_minus_1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_minus_1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 46,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1612:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint128_$",
                  "typeString": "type(uint128)"
                },
                "typeName": "uint128"
              },
              "id": 49,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1612:11:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 53,
            "name": "IMPROVEMENT_DENOMINATOR",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1787:53:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 51,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1787:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "313030",
              "id": 52,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1837:3:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100_by_1",
                "typeString": "int_const 100"
              },
              "value": "100"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 56,
            "name": "FEE_DENOMINATOR",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "1958:46:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint128",
              "typeString": "uint128"
            },
            "typeName": {
              "id": 54,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "1958:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31303030",
              "id": 55,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2000:4:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000_by_1",
                "typeString": "int_const 1000"
              },
              "value": "1000"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 59,
            "name": "ENCODED_AUCTION_ELEMENT_WIDTH",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2091:59:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint128",
              "typeString": "uint128"
            },
            "typeName": {
              "id": 57,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "2091:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "313132",
              "id": 58,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2147:3:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_112_by_1",
                "typeString": "int_const 112"
              },
              "value": "112"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 61,
            "name": "MAX_TOKENS",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2282:25:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 60,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2282:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 63,
            "name": "numTokens",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2385:23:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 62,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "2385:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 65,
            "name": "feeToken",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2482:24:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_TokenOWL_$6270",
              "typeString": "contract TokenOWL"
            },
            "typeName": {
              "contractScope": null,
              "id": 64,
              "name": "TokenOWL",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6270,
              "src": "2482:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenOWL_$6270",
                "typeString": "contract TokenOWL"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 70,
            "name": "orders",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2611:41:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct BatchExchange.Order[])"
            },
            "typeName": {
              "id": 69,
              "keyType": {
                "id": 66,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2619:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2611:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct BatchExchange.Order[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 67,
                  "name": "Order",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 95,
                  "src": "2630:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                    "typeString": "struct BatchExchange.Order"
                  }
                },
                "id": 68,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2630:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage_ptr",
                  "typeString": "struct BatchExchange.Order[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 74,
            "name": "currentPrices",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2725:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
              "typeString": "mapping(uint16 => uint128)"
            },
            "typeName": {
              "id": 73,
              "keyType": {
                "id": 71,
                "name": "uint16",
                "nodeType": "ElementaryTypeName",
                "src": "2733:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                }
              },
              "nodeType": "Mapping",
              "src": "2725:26:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                "typeString": "mapping(uint16 => uint128)"
              },
              "valueType": {
                "id": 72,
                "name": "uint128",
                "nodeType": "ElementaryTypeName",
                "src": "2743:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 76,
            "name": "latestSolution",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2855:34:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_SolutionData_$117_storage",
              "typeString": "struct BatchExchange.SolutionData"
            },
            "typeName": {
              "contractScope": null,
              "id": 75,
              "name": "SolutionData",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 117,
              "src": "2855:12:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_SolutionData_$117_storage_ptr",
                "typeString": "struct BatchExchange.SolutionData"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 78,
            "name": "allUsers",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "2970:43:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Data_$6500_storage",
              "typeString": "struct IterableAppendOnlySet.Data"
            },
            "typeName": {
              "contractScope": null,
              "id": 77,
              "name": "IterableAppendOnlySet.Data",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6500,
              "src": "2970:26:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Data_$6500_storage_ptr",
                "typeString": "struct IterableAppendOnlySet.Data"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 80,
            "name": "registeredTokens",
            "nodeType": "VariableDeclaration",
            "scope": 2226,
            "src": "3019:46:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Data_$6326_storage",
              "typeString": "struct IdToAddressBiMap.Data"
            },
            "typeName": {
              "contractScope": null,
              "id": 79,
              "name": "IdToAddressBiMap.Data",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6326,
              "src": "3019:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Data_$6326_storage_ptr",
                "typeString": "struct IdToAddressBiMap.Data"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "canonicalName": "BatchExchange.Order",
            "id": 95,
            "members": [
              {
                "constant": false,
                "id": 82,
                "name": "buyToken",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3095:15:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 81,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "3095:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 84,
                "name": "sellToken",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3120:16:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 83,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "3120:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 86,
                "name": "validFrom",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3146:16:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 85,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "3146:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 88,
                "name": "validUntil",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3242:17:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 87,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "3242:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 90,
                "name": "priceNumerator",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3340:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 89,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3340:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 92,
                "name": "priceDenominator",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3372:24:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 91,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3372:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 94,
                "name": "usedAmount",
                "nodeType": "VariableDeclaration",
                "scope": 95,
                "src": "3406:18:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 93,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3406:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Order",
            "nodeType": "StructDefinition",
            "scope": 2226,
            "src": "3072:410:0",
            "visibility": "public"
          },
          {
            "canonicalName": "BatchExchange.TradeData",
            "id": 102,
            "members": [
              {
                "constant": false,
                "id": 97,
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 102,
                "src": "3515:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 96,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3515:7:0",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 99,
                "name": "volume",
                "nodeType": "VariableDeclaration",
                "scope": 102,
                "src": "3538:14:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 98,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3538:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 101,
                "name": "orderId",
                "nodeType": "VariableDeclaration",
                "scope": 102,
                "src": "3562:14:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 100,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "3562:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TradeData",
            "nodeType": "StructDefinition",
            "scope": 2226,
            "src": "3488:95:0",
            "visibility": "public"
          },
          {
            "canonicalName": "BatchExchange.SolutionData",
            "id": 117,
            "members": [
              {
                "constant": false,
                "id": 104,
                "name": "batchId",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3619:14:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 103,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "3619:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 107,
                "name": "trades",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3643:18:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage_ptr",
                  "typeString": "struct BatchExchange.TradeData[]"
                },
                "typeName": {
                  "baseType": {
                    "contractScope": null,
                    "id": 105,
                    "name": "TradeData",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 102,
                    "src": "3643:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TradeData_$102_storage_ptr",
                      "typeString": "struct BatchExchange.TradeData"
                    }
                  },
                  "id": 106,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "3643:11:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage_ptr",
                    "typeString": "struct BatchExchange.TradeData[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 110,
                "name": "tokenIdsForPrice",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3671:25:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                  "typeString": "uint16[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 108,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3671:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 109,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "3671:8:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                    "typeString": "uint16[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 112,
                "name": "solutionSubmitter",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3706:25:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 111,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3706:7:0",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 114,
                "name": "feeReward",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3741:17:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 113,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3741:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 116,
                "name": "objectiveValue",
                "nodeType": "VariableDeclaration",
                "scope": 117,
                "src": "3768:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 115,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3768:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "SolutionData",
            "nodeType": "StructDefinition",
            "scope": 2226,
            "src": "3589:208:0",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 135,
            "name": "OrderPlacement",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 119,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3833:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3833:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 121,
                  "indexed": false,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3864:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 120,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3864:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 123,
                  "indexed": true,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3886:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 122,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3886:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 125,
                  "indexed": true,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3919:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 124,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3919:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 127,
                  "indexed": false,
                  "name": "validFrom",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3953:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 126,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3953:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 129,
                  "indexed": false,
                  "name": "validUntil",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "3979:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 128,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3979:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 131,
                  "indexed": false,
                  "name": "priceNumerator",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "4006:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 130,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4006:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 133,
                  "indexed": false,
                  "name": "priceDenominator",
                  "nodeType": "VariableDeclaration",
                  "scope": 135,
                  "src": "4038:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 132,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4038:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3823:245:0"
            },
            "src": "3803:266:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 141,
            "name": "TokenListing",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 137,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 141,
                  "src": "4094:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 136,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4094:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 139,
                  "indexed": false,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 141,
                  "src": "4109:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 138,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4109:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4093:26:0"
            },
            "src": "4075:45:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted when an order is cancelled but still valid in the batch that is\ncurrently being solved. It remains in storage but will not be tradable in any future\nbatch to be solved.",
            "id": 147,
            "name": "OrderCancellation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 146,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 143,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 147,
                  "src": "4368:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 142,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4368:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 145,
                  "indexed": false,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 147,
                  "src": "4391:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 144,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4391:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4367:34:0"
            },
            "src": "4344:58:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted when an order is removed from storage.",
            "id": 153,
            "name": "OrderDeletion",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 149,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 153,
                  "src": "4502:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4502:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 151,
                  "indexed": false,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 153,
                  "src": "4525:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 150,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4525:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4501:34:0"
            },
            "src": "4482:54:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted when a new trade is settled",
            "id": 167,
            "name": "Trade",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 155,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4626:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 154,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4626:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 157,
                  "indexed": true,
                  "name": "orderId",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4657:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 156,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4657:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 159,
                  "indexed": true,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4689:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 158,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4689:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 161,
                  "indexed": false,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4781:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 160,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4781:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 163,
                  "indexed": false,
                  "name": "executedSellAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4806:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 162,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4806:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 165,
                  "indexed": false,
                  "name": "executedBuyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 167,
                  "src": "4842:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 164,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4842:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4616:257:0"
            },
            "src": "4605:269:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted when an already exectued trade gets reverted",
            "id": 181,
            "name": "TradeReversion",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 180,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 169,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "4990:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 168,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4990:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 171,
                  "indexed": true,
                  "name": "orderId",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5021:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 170,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5021:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 173,
                  "indexed": true,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5053:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 172,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5053:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 175,
                  "indexed": false,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5145:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 174,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5145:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 177,
                  "indexed": false,
                  "name": "executedSellAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5170:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 176,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5170:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 179,
                  "indexed": false,
                  "name": "executedBuyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 181,
                  "src": "5206:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 178,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5206:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4980:257:0"
            },
            "src": "4960:278:0"
          },
          {
            "anonymous": false,
            "documentation": "@dev Event emitted for each solution that is submitted",
            "id": 199,
            "name": "SolutionSubmission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 183,
                  "indexed": true,
                  "name": "submitter",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5349:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 182,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5349:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 185,
                  "indexed": false,
                  "name": "utility",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5384:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5384:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 187,
                  "indexed": false,
                  "name": "disregardedUtility",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5409:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 186,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5409:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 189,
                  "indexed": false,
                  "name": "burntFees",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5445:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 188,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5445:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 191,
                  "indexed": false,
                  "name": "lastAuctionBurntFees",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5472:28:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 190,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5472:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 194,
                  "indexed": false,
                  "name": "prices",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5510:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 192,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "5510:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 193,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5510:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 197,
                  "indexed": false,
                  "name": "tokenIdsForPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5536:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 195,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "5536:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 196,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5536:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5339:228:0"
            },
            "src": "5315:253:0"
          },
          {
            "body": {
              "id": 238,
              "nodeType": "Block",
              "src": "5820:575:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 206,
                        "name": "currentPrices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 74,
                        "src": "6016:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                          "typeString": "mapping(uint16 => uint128)"
                        }
                      },
                      "id": 208,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6030:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6016:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 209,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6035:7:0",
                      "subdenomination": "ether",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1000000000000000000_by_1",
                        "typeString": "int_const 1000000000000000000"
                      },
                      "value": "1"
                    },
                    "src": "6016:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 211,
                  "nodeType": "ExpressionStatement",
                  "src": "6016:26:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 212,
                      "name": "MAX_TOKENS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61,
                      "src": "6052:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 213,
                      "name": "maxTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 201,
                      "src": "6065:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6052:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 215,
                  "nodeType": "ExpressionStatement",
                  "src": "6052:22:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 216,
                      "name": "feeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65,
                      "src": "6084:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TokenOWL_$6270",
                        "typeString": "contract TokenOWL"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 218,
                          "name": "_feeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 203,
                          "src": "6104:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 217,
                        "name": "TokenOWL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6270,
                        "src": "6095:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TokenOWL_$6270_$",
                          "typeString": "type(contract TokenOWL)"
                        }
                      },
                      "id": 219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6095:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TokenOWL_$6270",
                        "typeString": "contract TokenOWL"
                      }
                    },
                    "src": "6084:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TokenOWL_$6270",
                      "typeString": "contract TokenOWL"
                    }
                  },
                  "id": 221,
                  "nodeType": "ExpressionStatement",
                  "src": "6084:30:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 226,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10294,
                            "src": "6293:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BatchExchange_$2226",
                              "typeString": "contract BatchExchange"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_BatchExchange_$2226",
                              "typeString": "contract BatchExchange"
                            }
                          ],
                          "id": 225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6285:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6285:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "6308:2:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 229,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6309:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_minus_1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_minus_1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6300:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6300:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 222,
                        "name": "feeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65,
                        "src": "6268:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenOWL_$6270",
                          "typeString": "contract TokenOWL"
                        }
                      },
                      "id": 224,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6807,
                      "src": "6268:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6268:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 233,
                  "nodeType": "ExpressionStatement",
                  "src": "6268:44:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 235,
                        "name": "_feeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 203,
                        "src": "6331:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 234,
                      "name": "addToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 283,
                      "src": "6322:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6322:19:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 237,
                  "nodeType": "ExpressionStatement",
                  "src": "6322:19:0"
                }
              ]
            },
            "documentation": "@dev Constructor determines exchange parameters\n@param maxTokens The maximum number of tokens that can be listed.\n@param _feeToken Address of ERC20 fee token.",
            "id": 239,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 201,
                  "name": "maxTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "5775:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 200,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5775:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 203,
                  "name": "_feeToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "5794:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 202,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5794:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5774:38:0"
            },
            "returnParameters": {
              "id": 205,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5820:0:0"
            },
            "scope": 2226,
            "src": "5763:632:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 282,
              "nodeType": "Block",
              "src": "6727:428:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 245,
                          "name": "numTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 63,
                          "src": "6745:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 246,
                          "name": "MAX_TOKENS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61,
                          "src": "6757:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6745:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d617820746f6b656e732072656163686564",
                        "id": 248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6769:20:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_14b9947d46e0b2554569c19973b701cdfb35f201a3f5beb5e896a20526ce01a7",
                          "typeString": "literal_string \"Max tokens reached\""
                        },
                        "value": "Max tokens reached"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_14b9947d46e0b2554569c19973b701cdfb35f201a3f5beb5e896a20526ce01a7",
                          "typeString": "literal_string \"Max tokens reached\""
                        }
                      ],
                      "id": 244,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "6737:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6737:53:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 250,
                  "nodeType": "ExpressionStatement",
                  "src": "6737:53:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 251,
                      "name": "numTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63,
                      "src": "6804:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6816:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6804:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 263,
                  "nodeType": "IfStatement",
                  "src": "6800:177:0",
                  "trueBody": {
                    "id": 262,
                    "nodeType": "Block",
                    "src": "6819:158:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 257,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10242,
                                "src": "6925:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6925:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 259,
                              "name": "FEE_FOR_LISTING_TOKEN_IN_OWL",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39,
                              "src": "6937:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 254,
                              "name": "feeToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 65,
                              "src": "6908:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TokenOWL_$6270",
                                "typeString": "contract TokenOWL"
                              }
                            },
                            "id": 256,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "burnOWL",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6255,
                            "src": "6908:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6908:58:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 261,
                        "nodeType": "ExpressionStatement",
                        "src": "6908:58:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 267,
                            "name": "registeredTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 80,
                            "src": "7018:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 268,
                            "name": "numTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63,
                            "src": "7036:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 269,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 241,
                            "src": "7047:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 265,
                            "name": "IdToAddressBiMap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6489,
                            "src": "6994:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                              "typeString": "type(library IdToAddressBiMap)"
                            }
                          },
                          "id": 266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "insert",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6488,
                          "src": "6994:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Data_$6326_storage_ptr_$_t_uint16_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (struct IdToAddressBiMap.Data storage pointer,uint16,address) returns (bool)"
                          }
                        },
                        "id": 270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6994:59:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e20616c72656164792072656769737465726564",
                        "id": 271,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7055:26:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ea414700a52192d3051efb9564a39df2d4fbeb5f4f4c66f00a6b0d737b48522b",
                          "typeString": "literal_string \"Token already registered\""
                        },
                        "value": "Token already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ea414700a52192d3051efb9564a39df2d4fbeb5f4f4c66f00a6b0d737b48522b",
                          "typeString": "literal_string \"Token already registered\""
                        }
                      ],
                      "id": 264,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "6986:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6986:96:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 273,
                  "nodeType": "ExpressionStatement",
                  "src": "6986:96:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 275,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 241,
                        "src": "7110:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 276,
                        "name": "numTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63,
                        "src": "7117:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 274,
                      "name": "TokenListing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 141,
                      "src": "7097:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$",
                        "typeString": "function (address,uint16)"
                      }
                    },
                    "id": 277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7097:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 278,
                  "nodeType": "EmitStatement",
                  "src": "7092:35:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "7137:11:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 279,
                      "name": "numTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63,
                      "src": "7137:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 281,
                  "nodeType": "ExpressionStatement",
                  "src": "7137:11:0"
                }
              ]
            },
            "documentation": "@dev Used to list a new token on the contract: Hence, making it available for exchange in an auction.\n@param token ERC20 token to be listed.\n     * Requirements:\n- `maxTokens` has not already been reached\n- `token` has not already been added",
            "id": 283,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 241,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 283,
                  "src": "6705:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6705:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6704:15:0"
            },
            "returnParameters": {
              "id": 243,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6727:0:0"
            },
            "scope": 2226,
            "src": "6687:468:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 308,
              "nodeType": "Block",
              "src": "7906:119:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 299,
                        "name": "buyToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 285,
                        "src": "7942:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 300,
                        "name": "sellToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 287,
                        "src": "7952:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 301,
                          "name": "getCurrentBatchId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3888,
                          "src": "7963:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                            "typeString": "function () view returns (uint32)"
                          }
                        },
                        "id": 302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7963:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 303,
                        "name": "validUntil",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 289,
                        "src": "7984:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 304,
                        "name": "buyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 291,
                        "src": "7996:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 305,
                        "name": "sellAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 293,
                        "src": "8007:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 298,
                      "name": "placeOrderInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1365,
                      "src": "7923:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint16_$_t_uint16_$_t_uint32_$_t_uint32_$_t_uint128_$_t_uint128_$returns$_t_uint16_$",
                        "typeString": "function (uint16,uint16,uint32,uint32,uint128,uint128) returns (uint16)"
                      }
                    },
                    "id": 306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7923:95:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 297,
                  "id": 307,
                  "nodeType": "Return",
                  "src": "7916:102:0"
                }
              ]
            },
            "documentation": "@dev A user facing function used to place limit sell orders in auction with expiry defined by batchId\n@param buyToken id of token to be bought\n@param sellToken id of token to be sold\n@param validUntil batchId representing order's expiry\n@param buyAmount relative minimum amount of requested buy amount\n@param sellAmount maximum amount of sell token to be exchanged\n@return orderId defined as the index in user's order array\n     * Emits an {OrderPlacement} event with all relevant order details.",
            "id": 309,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "placeOrder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 285,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7751:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 284,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "7751:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 287,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7776:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 286,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "7776:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 289,
                  "name": "validUntil",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7802:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 288,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7802:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 291,
                  "name": "buyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7829:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 290,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "7829:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 293,
                  "name": "sellAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7856:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 292,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "7856:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7741:139:0"
            },
            "returnParameters": {
              "id": 297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 296,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 309,
                  "src": "7897:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 295,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7897:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7896:9:0"
            },
            "scope": 2226,
            "src": "7722:303:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 380,
              "nodeType": "Block",
              "src": "9091:372:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 333,
                      "name": "orderIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 331,
                      "src": "9101:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                        "typeString": "uint16[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 337,
                            "name": "buyTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 312,
                            "src": "9125:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                              "typeString": "uint16[] memory"
                            }
                          },
                          "id": 338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9125:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "9112:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint16_$dyn_memory_$",
                          "typeString": "function (uint256) pure returns (uint16[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 334,
                            "name": "uint16",
                            "nodeType": "ElementaryTypeName",
                            "src": "9116:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "id": 335,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "9116:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                            "typeString": "uint16[]"
                          }
                        }
                      },
                      "id": 339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9112:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory",
                        "typeString": "uint16[] memory"
                      }
                    },
                    "src": "9101:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                      "typeString": "uint16[] memory"
                    }
                  },
                  "id": 341,
                  "nodeType": "ExpressionStatement",
                  "src": "9101:41:0"
                },
                {
                  "body": {
                    "id": 378,
                    "nodeType": "Block",
                    "src": "9199:258:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 353,
                              "name": "orderIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 331,
                              "src": "9213:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              }
                            },
                            "id": 355,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 354,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 343,
                              "src": "9222:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9213:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 357,
                                  "name": "buyTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 312,
                                  "src": "9263:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                    "typeString": "uint16[] memory"
                                  }
                                },
                                "id": 359,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 358,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9273:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9263:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 360,
                                  "name": "sellTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 315,
                                  "src": "9293:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                    "typeString": "uint16[] memory"
                                  }
                                },
                                "id": 362,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 361,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9304:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9293:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 363,
                                  "name": "validFroms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 318,
                                  "src": "9324:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 365,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 364,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9335:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9324:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 366,
                                  "name": "validUntils",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 321,
                                  "src": "9355:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 368,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 367,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9367:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9355:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 369,
                                  "name": "buyAmounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 324,
                                  "src": "9387:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                    "typeString": "uint128[] memory"
                                  }
                                },
                                "id": 371,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 370,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9398:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9387:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 372,
                                  "name": "sellAmounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 327,
                                  "src": "9418:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                    "typeString": "uint128[] memory"
                                  }
                                },
                                "id": 374,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 373,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 343,
                                  "src": "9430:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9418:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "id": 356,
                              "name": "placeOrderInternal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1365,
                              "src": "9227:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint16_$_t_uint16_$_t_uint32_$_t_uint32_$_t_uint128_$_t_uint128_$returns$_t_uint16_$",
                                "typeString": "function (uint16,uint16,uint32,uint32,uint128,uint128) returns (uint16)"
                              }
                            },
                            "id": 375,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9227:219:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "9213:233:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 377,
                        "nodeType": "ExpressionStatement",
                        "src": "9213:233:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 346,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 343,
                      "src": "9172:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 347,
                        "name": "buyTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 312,
                        "src": "9176:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      "id": 348,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9176:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9172:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 379,
                  "initializationExpression": {
                    "assignments": [
                      343
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 343,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 379,
                        "src": "9157:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 342,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9157:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 345,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9169:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "9157:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 351,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "9194:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 350,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 343,
                        "src": "9194:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 352,
                    "nodeType": "ExpressionStatement",
                    "src": "9194:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "9152:305:0"
                }
              ]
            },
            "documentation": "@dev A user facing function used to place limit sell orders in auction with expiry defined by batchId\nNote that parameters are passed as arrays and the indices correspond to each order.\n@param buyTokens ids of tokens to be bought\n@param sellTokens ids of tokens to be sold\n@param validFroms batchIds representing order's validity start time\n@param validUntils batchIds representing order's expiry\n@param buyAmounts relative minimum amount of requested buy amounts\n@param sellAmounts maximum amounts of sell token to be exchanged\n@return `orderIds` an array of indices in which `msg.sender`'s orders are included\n     * Emits an {OrderPlacement} event with all relevant order details.",
            "id": 381,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "placeValidFromOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 312,
                  "name": "buyTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8833:25:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 310,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "8833:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 311,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8833:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 315,
                  "name": "sellTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8868:26:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 313,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "8868:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 314,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8868:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 318,
                  "name": "validFroms",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8904:26:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 316,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "8904:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 317,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8904:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 321,
                  "name": "validUntils",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8940:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 319,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "8940:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 320,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8940:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 324,
                  "name": "buyAmounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "8977:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 322,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "8977:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 323,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8977:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 327,
                  "name": "sellAmounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "9014:28:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 325,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "9014:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 326,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9014:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8823:225:0"
            },
            "returnParameters": {
              "id": 332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 331,
                  "name": "orderIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "9065:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 329,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "9065:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 330,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9065:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9064:26:0"
            },
            "scope": 2226,
            "src": "8794:669:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 460,
              "nodeType": "Block",
              "src": "10018:523:0",
              "statements": [
                {
                  "assignments": [
                    388
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 388,
                      "name": "batchIdBeingSolved",
                      "nodeType": "VariableDeclaration",
                      "scope": 460,
                      "src": "10028:25:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 387,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "10028:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 393,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 389,
                        "name": "getCurrentBatchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3888,
                        "src": "10056:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                          "typeString": "function () view returns (uint32)"
                        }
                      },
                      "id": 390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10056:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10078:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "10056:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10028:51:0"
                },
                {
                  "body": {
                    "id": 458,
                    "nodeType": "Block",
                    "src": "10134:401:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "10152:72:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 406,
                                    "name": "orders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70,
                                    "src": "10172:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                      "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 409,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 407,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10242,
                                      "src": "10179:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 408,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10179:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10172:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                    "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                  }
                                },
                                "id": 413,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 410,
                                    "name": "orderIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 384,
                                    "src": "10191:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                      "typeString": "uint16[] memory"
                                    }
                                  },
                                  "id": 412,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 411,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 395,
                                    "src": "10200:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10191:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10172:31:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_storage",
                                  "typeString": "struct BatchExchange.Order storage ref"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 414,
                                "name": "batchIdBeingSolved",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 388,
                                "src": "10205:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Order_$95_storage",
                                  "typeString": "struct BatchExchange.Order storage ref"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 405,
                              "name": "checkOrderValidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2069,
                              "src": "10153:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$_t_uint32_$returns$_t_bool_$",
                                "typeString": "function (struct BatchExchange.Order memory,uint32) pure returns (bool)"
                              }
                            },
                            "id": 415,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10153:71:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 456,
                          "nodeType": "Block",
                          "src": "10364:161:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 446,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 436,
                                        "name": "orders",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 70,
                                        "src": "10382:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                          "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 442,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 437,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10242,
                                          "src": "10389:3:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 438,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10389:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "10382:18:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                        "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                      }
                                    },
                                    "id": 443,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 439,
                                        "name": "orderIds",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 384,
                                        "src": "10401:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                          "typeString": "uint16[] memory"
                                        }
                                      },
                                      "id": 441,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 440,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 395,
                                        "src": "10410:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "10401:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10382:31:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    }
                                  },
                                  "id": 444,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "validUntil",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 88,
                                  "src": "10382:42:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 445,
                                  "name": "batchIdBeingSolved",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 388,
                                  "src": "10427:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "10382:63:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 447,
                              "nodeType": "ExpressionStatement",
                              "src": "10382:63:0"
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 449,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10242,
                                      "src": "10486:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 450,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10486:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 451,
                                      "name": "orderIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 384,
                                      "src": "10498:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                        "typeString": "uint16[] memory"
                                      }
                                    },
                                    "id": 453,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 452,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 395,
                                      "src": "10507:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10498:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "id": 448,
                                  "name": "OrderCancellation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 147,
                                  "src": "10468:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$",
                                    "typeString": "function (address,uint16)"
                                  }
                                },
                                "id": 454,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10468:42:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 455,
                              "nodeType": "EmitStatement",
                              "src": "10463:47:0"
                            }
                          ]
                        },
                        "id": 457,
                        "nodeType": "IfStatement",
                        "src": "10148:377:0",
                        "trueBody": {
                          "id": 435,
                          "nodeType": "Block",
                          "src": "10226:132:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 425,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "10244:38:0",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 417,
                                      "name": "orders",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 70,
                                      "src": "10251:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                        "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                      }
                                    },
                                    "id": 420,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 418,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10242,
                                        "src": "10258:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 419,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "10258:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10251:18:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                    }
                                  },
                                  "id": 424,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 421,
                                      "name": "orderIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 384,
                                      "src": "10270:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                        "typeString": "uint16[] memory"
                                      }
                                    },
                                    "id": 423,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 422,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 395,
                                      "src": "10279:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10270:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10251:31:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_storage",
                                    "typeString": "struct BatchExchange.Order storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 426,
                              "nodeType": "ExpressionStatement",
                              "src": "10244:38:0"
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 428,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10242,
                                      "src": "10319:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 429,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10319:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 430,
                                      "name": "orderIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 384,
                                      "src": "10331:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                        "typeString": "uint16[] memory"
                                      }
                                    },
                                    "id": 432,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 431,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 395,
                                      "src": "10340:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10331:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "id": 427,
                                  "name": "OrderDeletion",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 153,
                                  "src": "10305:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$",
                                    "typeString": "function (address,uint16)"
                                  }
                                },
                                "id": 433,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10305:38:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 434,
                              "nodeType": "EmitStatement",
                              "src": "10300:43:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 398,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 395,
                      "src": "10108:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 399,
                        "name": "orderIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 384,
                        "src": "10112:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      "id": 400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10112:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10108:19:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 459,
                  "initializationExpression": {
                    "assignments": [
                      395
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 395,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 459,
                        "src": "10094:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 394,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "10094:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 397,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 396,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10105:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10094:12:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10129:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 402,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 395,
                        "src": "10129:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 404,
                    "nodeType": "ExpressionStatement",
                    "src": "10129:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "10089:446:0"
                }
              ]
            },
            "documentation": "@dev a user facing function used to cancel orders. If the order is valid for the batch that is currently\nbeing solved, it sets order expiry to that batchId. Otherwise it removes it from storage. Can be called\nmultiple times (e.g. to eventually free storage once order is expired).\n     * @param orderIds referencing the indices of user's orders to be cancelled\n     * Emits an {OrderCancellation} or {OrderDeletion} with sender's address and orderId",
            "id": 461,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cancelOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 384,
                  "name": "orderIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 461,
                  "src": "9985:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 382,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "9985:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 383,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9985:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9984:26:0"
            },
            "returnParameters": {
              "id": 386,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10018:0:0"
            },
            "scope": 2226,
            "src": "9963:578:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 501,
              "nodeType": "Block",
              "src": "11713:154:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 489,
                        "name": "cancellations",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 464,
                        "src": "11736:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "id": 488,
                      "name": "cancelOrders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 461,
                      "src": "11723:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint16_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint16[] memory)"
                      }
                    },
                    "id": 490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11723:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 491,
                  "nodeType": "ExpressionStatement",
                  "src": "11723:27:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 493,
                        "name": "buyTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 467,
                        "src": "11788:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 494,
                        "name": "sellTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 470,
                        "src": "11799:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 495,
                        "name": "validFroms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 473,
                        "src": "11811:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 496,
                        "name": "validUntils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 476,
                        "src": "11823:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 497,
                        "name": "buyAmounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 479,
                        "src": "11836:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 498,
                        "name": "sellAmounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 482,
                        "src": "11848:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      ],
                      "id": 492,
                      "name": "placeValidFromOrders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 381,
                      "src": "11767:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint16_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_array$_t_uint128_$dyn_memory_ptr_$_t_array$_t_uint128_$dyn_memory_ptr_$returns$_t_array$_t_uint16_$dyn_memory_ptr_$",
                        "typeString": "function (uint16[] memory,uint16[] memory,uint32[] memory,uint32[] memory,uint128[] memory,uint128[] memory) returns (uint16[] memory)"
                      }
                    },
                    "id": 499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11767:93:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                      "typeString": "uint16[] memory"
                    }
                  },
                  "functionReturnParameters": 487,
                  "id": 500,
                  "nodeType": "Return",
                  "src": "11760:100:0"
                }
              ]
            },
            "documentation": "@dev A user facing wrapper to cancel and place new orders in the same transaction.\n@param cancellations indices of orders to be cancelled\n@param buyTokens ids of tokens to be bought in new orders\n@param sellTokens ids of tokens to be sold in new orders\n@param validFroms batchIds representing order's validity start time in new orders\n@param validUntils batchIds represnnting order's expiry in new orders\n@param buyAmounts relative minimum amount of requested buy amounts in new orders\n@param sellAmounts maximum amounts of sell token to be exchanged in new orders\n@return an array of indices in which `msg.sender`'s new orders are included\n     * Emits {OrderCancellation} events for all cancelled orders and {OrderPlacement} events with relevant new order details.",
            "id": 502,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "replaceOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 464,
                  "name": "cancellations",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11425:29:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 462,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "11425:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 463,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11425:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 467,
                  "name": "buyTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11464:25:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 465,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "11464:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 466,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11464:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 470,
                  "name": "sellTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11499:26:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 468,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "11499:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 469,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11499:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 473,
                  "name": "validFroms",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11535:26:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 471,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11535:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 472,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11535:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 476,
                  "name": "validUntils",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11571:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 474,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11571:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 475,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11571:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 479,
                  "name": "buyAmounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11608:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 477,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "11608:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 478,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11608:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 482,
                  "name": "sellAmounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11645:28:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 480,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "11645:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 481,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11645:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11415:264:0"
            },
            "returnParameters": {
              "id": 487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 486,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "11696:15:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 484,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "11696:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 485,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11696:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11695:17:0"
            },
            "scope": 2226,
            "src": "11393:474:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 878,
              "nodeType": "Block",
              "src": "13716:4376:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 528,
                            "name": "batchId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 504,
                            "src": "13753:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "id": 527,
                          "name": "acceptingSolutions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1243,
                          "src": "13734:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint32_$returns$_t_bool_$",
                            "typeString": "function (uint32) view returns (bool)"
                          }
                        },
                        "id": 529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13734:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "536f6c7574696f6e7320617265206e6f206c6f6e67657220616363657074656420666f722074686973206261746368",
                        "id": 530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13763:49:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_51684e98cbf936ef3c6a3fc0a80886b45545ee6ee550f890d429af460d2f23a7",
                          "typeString": "literal_string \"Solutions are no longer accepted for this batch\""
                        },
                        "value": "Solutions are no longer accepted for this batch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_51684e98cbf936ef3c6a3fc0a80886b45545ee6ee550f890d429af460d2f23a7",
                          "typeString": "literal_string \"Solutions are no longer accepted for this batch\""
                        }
                      ],
                      "id": 526,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "13726:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13726:87:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 532,
                  "nodeType": "ExpressionStatement",
                  "src": "13726:87:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 535,
                            "name": "claimedObjectiveValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 506,
                            "src": "13881:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 534,
                          "name": "isObjectiveValueSufficientlyImproved",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2049,
                          "src": "13844:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 536,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13844:59:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "436c61696d6564206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e",
                        "id": 537,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13917:65:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_af9180cbf532e57d643b8957ba6f1ff9ed71c98f7bad71bebda754db19d29ccf",
                          "typeString": "literal_string \"Claimed objective doesn't sufficiently improve current solution\""
                        },
                        "value": "Claimed objective doesn't sufficiently improve current solution"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_af9180cbf532e57d643b8957ba6f1ff9ed71c98f7bad71bebda754db19d29ccf",
                          "typeString": "literal_string \"Claimed objective doesn't sufficiently improve current solution\""
                        }
                      ],
                      "id": 533,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "13823:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13823:169:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 539,
                  "nodeType": "ExpressionStatement",
                  "src": "13823:169:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 542,
                            "name": "prices",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 518,
                            "src": "14032:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                              "typeString": "uint128[] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                              "typeString": "uint128[] memory"
                            }
                          ],
                          "id": 541,
                          "name": "verifyAmountThreshold",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2225,
                          "src": "14010:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint128_$dyn_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint128[] memory) pure returns (bool)"
                          }
                        },
                        "id": 543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14010:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4174206c65617374206f6e65207072696365206c6f776572207468616e20414d4f554e545f4d494e494d554d",
                        "id": 544,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14041:46:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7198c54125f125258e89cbb4e9487637af4f5a787bc54f4e577b773c055f8df4",
                          "typeString": "literal_string \"At least one price lower than AMOUNT_MINIMUM\""
                        },
                        "value": "At least one price lower than AMOUNT_MINIMUM"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7198c54125f125258e89cbb4e9487637af4f5a787bc54f4e577b773c055f8df4",
                          "typeString": "literal_string \"At least one price lower than AMOUNT_MINIMUM\""
                        }
                      ],
                      "id": 540,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "14002:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14002:86:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 546,
                  "nodeType": "ExpressionStatement",
                  "src": "14002:86:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 548,
                            "name": "tokenIdsForPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 521,
                            "src": "14106:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                              "typeString": "uint16[] memory"
                            }
                          },
                          "id": 550,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 549,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14123:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14106:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14129:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14106:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46656520746f6b656e2068617320666978656420707269636521",
                        "id": 553,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14132:28:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f7520ae921cf9d6c86aea304539b1a547409be723693ad6177f07f7a6cdcd497",
                          "typeString": "literal_string \"Fee token has fixed price!\""
                        },
                        "value": "Fee token has fixed price!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f7520ae921cf9d6c86aea304539b1a547409be723693ad6177f07f7a6cdcd497",
                          "typeString": "literal_string \"Fee token has fixed price!\""
                        }
                      ],
                      "id": 547,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "14098:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14098:63:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 555,
                  "nodeType": "ExpressionStatement",
                  "src": "14098:63:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 557,
                            "name": "tokenIdsForPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 521,
                            "src": "14179:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                              "typeString": "uint16[] memory"
                            }
                          },
                          "id": 558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "checkPriceOrdering",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4582,
                          "src": "14179:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint16_$dyn_memory_ptr_$returns$_t_bool_$bound_to$_t_array$_t_uint16_$dyn_memory_ptr_$",
                            "typeString": "function (uint16[] memory) pure returns (bool)"
                          }
                        },
                        "id": 559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14179:37:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "70726963657320617265206e6f74206f72646572656420627920746f6b656e4964",
                        "id": 560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14218:35:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9137b0eef713f85f0680ca54e972c7b1f38a7eb175fa3940122f7db874d7f0af",
                          "typeString": "literal_string \"prices are not ordered by tokenId\""
                        },
                        "value": "prices are not ordered by tokenId"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9137b0eef713f85f0680ca54e972c7b1f38a7eb175fa3940122f7db874d7f0af",
                          "typeString": "literal_string \"prices are not ordered by tokenId\""
                        }
                      ],
                      "id": 556,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "14171:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14171:83:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 562,
                  "nodeType": "ExpressionStatement",
                  "src": "14171:83:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 564,
                            "name": "owners",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 509,
                            "src": "14272:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14272:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 566,
                          "name": "MAX_TOUCHED_ORDERS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 36,
                          "src": "14289:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14272:35:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "536f6c7574696f6e2065786365656473204d41585f544f55434845445f4f5244455253",
                        "id": 568,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14309:37:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4068888da565135ea3a72329287ecf6d57e8dfce0ccf8d5667597d10d58db9f6",
                          "typeString": "literal_string \"Solution exceeds MAX_TOUCHED_ORDERS\""
                        },
                        "value": "Solution exceeds MAX_TOUCHED_ORDERS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4068888da565135ea3a72329287ecf6d57e8dfce0ccf8d5667597d10d58db9f6",
                          "typeString": "literal_string \"Solution exceeds MAX_TOUCHED_ORDERS\""
                        }
                      ],
                      "id": 563,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "14264:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14264:83:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 570,
                  "nodeType": "ExpressionStatement",
                  "src": "14264:83:0"
                },
                {
                  "assignments": [
                    572
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 572,
                      "name": "lastAuctionBurntFees",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "14671:28:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 571,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14671:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 575,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 573,
                      "name": "burnPreviousAuctionFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1412,
                      "src": "14702:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14702:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14671:56:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 576,
                      "name": "undoCurrentSolution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1783,
                      "src": "14737:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14737:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 578,
                  "nodeType": "ExpressionStatement",
                  "src": "14737:21:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 580,
                        "name": "prices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "14788:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 581,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "14796:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "id": 579,
                      "name": "updateCurrentPrices",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1468,
                      "src": "14768:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint128_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint128[] memory,uint16[] memory)"
                      }
                    },
                    "id": 582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14768:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 583,
                  "nodeType": "ExpressionStatement",
                  "src": "14768:45:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 586,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "14823:28:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 584,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "14830:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 585,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "trades",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 107,
                      "src": "14830:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                        "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 587,
                  "nodeType": "ExpressionStatement",
                  "src": "14823:28:0"
                },
                {
                  "assignments": [
                    591
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 591,
                      "name": "tokenConservation",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "14861:33:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                        "typeString": "int256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 589,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14861:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 590,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "14861:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr",
                          "typeString": "int256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 596,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 594,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "14920:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 592,
                        "name": "TokenConservation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4661,
                        "src": "14897:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TokenConservation_$4661_$",
                          "typeString": "type(library TokenConservation)"
                        }
                      },
                      "id": 593,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "init",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4436,
                      "src": "14897:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint16_$dyn_memory_ptr_$returns$_t_array$_t_int256_$dyn_memory_ptr_$",
                        "typeString": "function (uint16[] memory) pure returns (int256[] memory)"
                      }
                    },
                    "id": 595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14897:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                      "typeString": "int256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14861:76:0"
                },
                {
                  "assignments": [
                    598
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 598,
                      "name": "utility",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "14947:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 597,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14947:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 600,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14965:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14947:19:0"
                },
                {
                  "body": {
                    "id": 739,
                    "nodeType": "Block",
                    "src": "15020:1682:0",
                    "statements": [
                      {
                        "assignments": [
                          613
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 613,
                            "name": "order",
                            "nodeType": "VariableDeclaration",
                            "scope": 739,
                            "src": "15034:18:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 612,
                              "name": "Order",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 95,
                              "src": "15034:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                                "typeString": "struct BatchExchange.Order"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 623,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 614,
                              "name": "orders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70,
                              "src": "15055:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                              }
                            },
                            "id": 618,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 615,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "15062:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 617,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 616,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "15069:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15062:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15055:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                              "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                            }
                          },
                          "id": 622,
                          "indexExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 619,
                              "name": "orderIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 512,
                              "src": "15073:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              }
                            },
                            "id": 621,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 620,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 602,
                              "src": "15082:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15073:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "15055:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_storage",
                            "typeString": "struct BatchExchange.Order storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15034:51:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 626,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 613,
                                  "src": "15126:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 627,
                                  "name": "batchId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 504,
                                  "src": "15133:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  },
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                ],
                                "id": 625,
                                "name": "checkOrderValidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2069,
                                "src": "15107:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$_t_uint32_$returns$_t_bool_$",
                                  "typeString": "function (struct BatchExchange.Order memory,uint32) pure returns (bool)"
                                }
                              },
                              "id": 628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15107:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4f7264657220697320696e76616c6964",
                              "id": 629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15143:18:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_511d1db0236a0f511515697c7be4b91f460b8ec81b93aa7463958766cc07090c",
                                "typeString": "literal_string \"Order is invalid\""
                              },
                              "value": "Order is invalid"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_511d1db0236a0f511515697c7be4b91f460b8ec81b93aa7463958766cc07090c",
                                "typeString": "literal_string \"Order is invalid\""
                              }
                            ],
                            "id": 624,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "15099:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15099:63:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 631,
                        "nodeType": "ExpressionStatement",
                        "src": "15099:63:0"
                      },
                      {
                        "assignments": [
                          633,
                          635
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 633,
                            "name": "executedBuyAmount",
                            "nodeType": "VariableDeclaration",
                            "scope": 739,
                            "src": "15177:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            "typeName": {
                              "id": 632,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "15177:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 635,
                            "name": "executedSellAmount",
                            "nodeType": "VariableDeclaration",
                            "scope": 739,
                            "src": "15204:26:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            "typeName": {
                              "id": 634,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "15204:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 642,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 637,
                                "name": "buyVolumes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 515,
                                "src": "15251:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                  "typeString": "uint128[] memory"
                                }
                              },
                              "id": 639,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 638,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "15262:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15251:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 640,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 613,
                              "src": "15266:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                "typeString": "struct BatchExchange.Order memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                "typeString": "struct BatchExchange.Order memory"
                              }
                            ],
                            "id": 636,
                            "name": "getTradedAmounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2027,
                            "src": "15234:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$_t_uint128_$",
                              "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint128,uint128)"
                            }
                          },
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15234:38:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                            "typeString": "tuple(uint128,uint128)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15176:96:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 646,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 644,
                                "name": "executedBuyAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 633,
                                "src": "15294:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 645,
                                "name": "AMOUNT_MINIMUM",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44,
                                "src": "15315:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "15294:35:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "62757920616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d",
                              "id": 647,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15331:37:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2d2f8f44722d1cc2858ca97fd0a6f2b3ed6a00f3d8ac5a1f657400c09613dd93",
                                "typeString": "literal_string \"buy amount less than AMOUNT_MINIMUM\""
                              },
                              "value": "buy amount less than AMOUNT_MINIMUM"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2d2f8f44722d1cc2858ca97fd0a6f2b3ed6a00f3d8ac5a1f657400c09613dd93",
                                "typeString": "literal_string \"buy amount less than AMOUNT_MINIMUM\""
                              }
                            ],
                            "id": 643,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "15286:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15286:83:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 649,
                        "nodeType": "ExpressionStatement",
                        "src": "15286:83:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 653,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 651,
                                "name": "executedSellAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 635,
                                "src": "15391:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 652,
                                "name": "AMOUNT_MINIMUM",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44,
                                "src": "15413:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "15391:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "73656c6c20616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d",
                              "id": 654,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15429:38:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_d7e7da1c4924dd503e6bc54b75a5d94afa5a1a2b46c1ebd46fb574a3849a54ac",
                                "typeString": "literal_string \"sell amount less than AMOUNT_MINIMUM\""
                              },
                              "value": "sell amount less than AMOUNT_MINIMUM"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_d7e7da1c4924dd503e6bc54b75a5d94afa5a1a2b46c1ebd46fb574a3849a54ac",
                                "typeString": "literal_string \"sell amount less than AMOUNT_MINIMUM\""
                              }
                            ],
                            "id": 650,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "15383:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15383:85:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 656,
                        "nodeType": "ExpressionStatement",
                        "src": "15383:85:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 660,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 613,
                                "src": "15541:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 661,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "15541:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 662,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 613,
                                "src": "15573:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 663,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sellToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 84,
                              "src": "15573:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 664,
                              "name": "tokenIdsForPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 521,
                              "src": "15606:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 665,
                              "name": "executedBuyAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 633,
                              "src": "15640:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 666,
                              "name": "executedSellAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 635,
                              "src": "15675:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 657,
                              "name": "tokenConservation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 591,
                              "src": "15482:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                                "typeString": "int256[] memory"
                              }
                            },
                            "id": 659,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateTokenConservation",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4507,
                            "src": "15482:41:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$_t_uint16_$_t_uint16_$_t_array$_t_uint16_$dyn_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$bound_to$_t_array$_t_int256_$dyn_memory_ptr_$",
                              "typeString": "function (int256[] memory,uint16,uint16,uint16[] memory,uint128,uint128) pure"
                            }
                          },
                          "id": 667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15482:225:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 668,
                        "nodeType": "ExpressionStatement",
                        "src": "15482:225:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 671,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 613,
                                    "src": "15748:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  ],
                                  "id": 670,
                                  "name": "getRemainingAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2083,
                                  "src": "15729:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$",
                                    "typeString": "function (struct BatchExchange.Order memory) pure returns (uint128)"
                                  }
                                },
                                "id": 672,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15729:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 673,
                                "name": "executedSellAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 635,
                                "src": "15758:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "15729:47:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "657865637574656453656c6c416d6f756e7420626967676572207468616e2073706563696669656420696e206f72646572",
                              "id": 675,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15778:51:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_84965987244ea93591b46f254088d618db1dc6700be37280ec262c7dbc4b05b4",
                                "typeString": "literal_string \"executedSellAmount bigger than specified in order\""
                              },
                              "value": "executedSellAmount bigger than specified in order"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_84965987244ea93591b46f254088d618db1dc6700be37280ec262c7dbc4b05b4",
                                "typeString": "literal_string \"executedSellAmount bigger than specified in order\""
                              }
                            ],
                            "id": 669,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "15721:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15721:109:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 677,
                        "nodeType": "ExpressionStatement",
                        "src": "15721:109:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 681,
                                      "name": "order",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 613,
                                      "src": "16073:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                        "typeString": "struct BatchExchange.Order memory"
                                      }
                                    },
                                    "id": 682,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "priceNumerator",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 90,
                                    "src": "16073:20:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 679,
                                    "name": "executedSellAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 635,
                                    "src": "16050:18:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "id": 680,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8640,
                                  "src": "16050:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 683,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16050:44:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 686,
                                      "name": "order",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 613,
                                      "src": "16120:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                        "typeString": "struct BatchExchange.Order memory"
                                      }
                                    },
                                    "id": 687,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "priceDenominator",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 92,
                                    "src": "16120:22:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 684,
                                    "name": "executedBuyAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 633,
                                    "src": "16098:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "id": 685,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8640,
                                  "src": "16098:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 688,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16098:45:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16050:93:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "6c696d6974207072696365206e6f7420736174697366696564",
                              "id": 690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16161:27:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3b7402825d9026d359ae1c88c60d479377280c7f5bcbb4f70342af91e303bebf",
                                "typeString": "literal_string \"limit price not satisfied\""
                              },
                              "value": "limit price not satisfied"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3b7402825d9026d359ae1c88c60d479377280c7f5bcbb4f70342af91e303bebf",
                                "typeString": "literal_string \"limit price not satisfied\""
                              }
                            ],
                            "id": 678,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10245,
                              10246
                            ],
                            "referencedDeclaration": 10246,
                            "src": "16025:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16025:177:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 692,
                        "nodeType": "ExpressionStatement",
                        "src": "16025:177:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 693,
                            "name": "utility",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 598,
                            "src": "16310:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 697,
                                    "name": "executedBuyAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 633,
                                    "src": "16348:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 698,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 613,
                                    "src": "16367:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  ],
                                  "id": 696,
                                  "name": "evaluateUtility",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1870,
                                  "src": "16332:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint256_$",
                                    "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint256)"
                                  }
                                },
                                "id": 699,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16332:41:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 694,
                                "name": "utility",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 598,
                                "src": "16320:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 695,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8563,
                              "src": "16320:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 700,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16320:54:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16310:64:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 702,
                        "nodeType": "ExpressionStatement",
                        "src": "16310:64:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 704,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "16409:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 706,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 705,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16416:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16409:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 707,
                                "name": "orderIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 512,
                                "src": "16420:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                  "typeString": "uint16[] memory"
                                }
                              },
                              "id": 709,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 708,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16429:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16420:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 710,
                              "name": "executedSellAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 635,
                              "src": "16433:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 703,
                            "name": "updateRemainingOrder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1506,
                            "src": "16388:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint16_$_t_uint128_$returns$__$",
                              "typeString": "function (address,uint16,uint128)"
                            }
                          },
                          "id": 711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16388:64:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 712,
                        "nodeType": "ExpressionStatement",
                        "src": "16388:64:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 714,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "16505:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 716,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 715,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16512:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16505:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 718,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 613,
                                    "src": "16536:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  },
                                  "id": 719,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "buyToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 82,
                                  "src": "16536:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                ],
                                "id": 717,
                                "name": "tokenIdToAddressMap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 907,
                                "src": "16516:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                  "typeString": "function (uint16) view returns (address)"
                                }
                              },
                              "id": 720,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16516:35:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 721,
                              "name": "executedBuyAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 633,
                              "src": "16553:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 713,
                            "name": "addBalanceAndBlockWithdrawForThisBatch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4038,
                            "src": "16466:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16466:105:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 723,
                        "nodeType": "ExpressionStatement",
                        "src": "16466:105:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 725,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "16596:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 727,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 726,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16603:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16596:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 728,
                                "name": "orderIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 512,
                                "src": "16607:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                  "typeString": "uint16[] memory"
                                }
                              },
                              "id": 730,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 729,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "16616:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16607:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 731,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 613,
                                "src": "16620:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 732,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sellToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 84,
                              "src": "16620:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 733,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 613,
                                "src": "16637:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 734,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "16637:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 735,
                              "name": "executedSellAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 635,
                              "src": "16653:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 736,
                              "name": "executedBuyAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 633,
                              "src": "16673:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 724,
                            "name": "Trade",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 167,
                            "src": "16590:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint128_$_t_uint128_$returns$__$",
                              "typeString": "function (address,uint16,uint16,uint16,uint128,uint128)"
                            }
                          },
                          "id": 737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16590:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 738,
                        "nodeType": "EmitStatement",
                        "src": "16585:106:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 605,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 602,
                      "src": "14996:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 606,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "15000:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 607,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15000:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14996:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 740,
                  "initializationExpression": {
                    "assignments": [
                      602
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 602,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 740,
                        "src": "14981:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 601,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14981:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 604,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 603,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14993:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "14981:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "15015:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 609,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 602,
                        "src": "15015:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 611,
                    "nodeType": "ExpressionStatement",
                    "src": "15015:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "14976:1726:0"
                },
                {
                  "body": {
                    "id": 784,
                    "nodeType": "Block",
                    "src": "16832:259:0",
                    "statements": [
                      {
                        "assignments": [
                          753
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 753,
                            "name": "order",
                            "nodeType": "VariableDeclaration",
                            "scope": 784,
                            "src": "16846:18:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 752,
                              "name": "Order",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 95,
                              "src": "16846:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                                "typeString": "struct BatchExchange.Order"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 763,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 754,
                              "name": "orders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70,
                              "src": "16867:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                              }
                            },
                            "id": 758,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 755,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "16874:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 757,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 756,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 742,
                                "src": "16881:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16874:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "16867:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                              "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                            }
                          },
                          "id": 762,
                          "indexExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 759,
                              "name": "orderIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 512,
                              "src": "16885:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                "typeString": "uint16[] memory"
                              }
                            },
                            "id": 761,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 760,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 742,
                              "src": "16894:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "16885:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16867:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_storage",
                            "typeString": "struct BatchExchange.Order storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16846:51:0"
                      },
                      {
                        "assignments": [
                          null,
                          765
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 765,
                            "name": "executedSellAmount",
                            "nodeType": "VariableDeclaration",
                            "scope": 784,
                            "src": "16914:26:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            "typeName": {
                              "id": 764,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "16914:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 772,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 767,
                                "name": "buyVolumes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 515,
                                "src": "16961:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                  "typeString": "uint128[] memory"
                                }
                              },
                              "id": 769,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 768,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 742,
                                "src": "16972:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16961:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 770,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 753,
                              "src": "16976:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                "typeString": "struct BatchExchange.Order memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                "typeString": "struct BatchExchange.Order memory"
                              }
                            ],
                            "id": 766,
                            "name": "getTradedAmounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2027,
                            "src": "16944:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$_t_uint128_$",
                              "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint128,uint128)"
                            }
                          },
                          "id": 771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16944:38:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                            "typeString": "tuple(uint128,uint128)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16911:71:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 774,
                                "name": "owners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 509,
                                "src": "17012:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 776,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 775,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 742,
                                "src": "17019:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "17012:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 778,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 753,
                                    "src": "17043:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  },
                                  "id": 779,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sellToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 84,
                                  "src": "17043:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                ],
                                "id": 777,
                                "name": "tokenIdToAddressMap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 907,
                                "src": "17023:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                  "typeString": "function (uint16) view returns (address)"
                                }
                              },
                              "id": 780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17023:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 781,
                              "name": "executedSellAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 765,
                              "src": "17061:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 773,
                            "name": "subtractBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4096,
                            "src": "16996:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16996:84:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 783,
                        "nodeType": "ExpressionStatement",
                        "src": "16996:84:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 745,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 742,
                      "src": "16808:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 746,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "16812:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16812:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16808:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 785,
                  "initializationExpression": {
                    "assignments": [
                      742
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 742,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 785,
                        "src": "16793:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 741,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16793:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 744,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16805:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "16793:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 750,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "16827:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 749,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 742,
                        "src": "16827:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 751,
                    "nodeType": "ExpressionStatement",
                    "src": "16827:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "16788:303:0"
                },
                {
                  "assignments": [
                    787
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 787,
                      "name": "disregardedUtility",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "17100:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 786,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17100:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 789,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 788,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17129:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17100:30:0"
                },
                {
                  "body": {
                    "id": 821,
                    "nodeType": "Block",
                    "src": "17184:139:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 801,
                            "name": "disregardedUtility",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 787,
                            "src": "17198:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 805,
                                        "name": "orders",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 70,
                                        "src": "17269:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                          "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 809,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 806,
                                          "name": "owners",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 509,
                                          "src": "17276:6:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 808,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 807,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 791,
                                          "src": "17283:1:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "17276:9:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "17269:17:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                        "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                      }
                                    },
                                    "id": 813,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 810,
                                        "name": "orderIds",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 512,
                                        "src": "17287:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                          "typeString": "uint16[] memory"
                                        }
                                      },
                                      "id": 812,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 811,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 791,
                                        "src": "17296:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "17287:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "17269:30:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 814,
                                      "name": "owners",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 509,
                                      "src": "17301:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 816,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 815,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 791,
                                      "src": "17308:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "17301:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 804,
                                  "name": "evaluateDisregardedUtility",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1951,
                                  "src": "17242:26:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_Order_$95_memory_ptr_$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (struct BatchExchange.Order memory,address) view returns (uint256)"
                                  }
                                },
                                "id": 817,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17242:69:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 802,
                                "name": "disregardedUtility",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 787,
                                "src": "17219:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 803,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8563,
                              "src": "17219:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 818,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17219:93:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17198:114:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 820,
                        "nodeType": "ExpressionStatement",
                        "src": "17198:114:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 794,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 791,
                      "src": "17160:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 795,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "17164:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17164:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17160:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 822,
                  "initializationExpression": {
                    "assignments": [
                      791
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 791,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 822,
                        "src": "17145:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 790,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17145:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 793,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 792,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17157:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "17145:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "17179:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 798,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 791,
                        "src": "17179:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 800,
                    "nodeType": "ExpressionStatement",
                    "src": "17179:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "17140:183:0"
                },
                {
                  "assignments": [
                    824
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 824,
                      "name": "burntFees",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "17332:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 823,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17332:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 832,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 826,
                              "name": "tokenConservation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 591,
                              "src": "17360:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                                "typeString": "int256[] memory"
                              }
                            },
                            "id": 827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "feeTokenImbalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4449,
                            "src": "17360:35:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_int256_$bound_to$_t_array$_t_int256_$dyn_memory_ptr_$",
                              "typeString": "function (int256[] memory) pure returns (int256)"
                            }
                          },
                          "id": 828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17360:37:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "17352:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17352:46:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17401:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "17352:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17332:70:0"
                },
                {
                  "assignments": [
                    834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 834,
                      "name": "objectiveValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "17513:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 833,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17513:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 842,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 840,
                        "name": "disregardedUtility",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 787,
                        "src": "17565:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 837,
                            "name": "burntFees",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 824,
                            "src": "17550:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 835,
                            "name": "utility",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 598,
                            "src": "17538:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8563,
                          "src": "17538:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17538:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8579,
                      "src": "17538:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17538:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17513:71:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 844,
                        "name": "objectiveValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 834,
                        "src": "17625:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 843,
                      "name": "checkAndOverrideObjectiveValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1802,
                      "src": "17594:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17594:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 846,
                  "nodeType": "ExpressionStatement",
                  "src": "17594:46:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 848,
                        "name": "burntFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 824,
                        "src": "17681:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 847,
                      "name": "grantRewardToSolutionSubmitter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1386,
                      "src": "17650:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17650:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 850,
                  "nodeType": "ExpressionStatement",
                  "src": "17650:41:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 851,
                        "name": "tokenConservation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 591,
                        "src": "17701:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr",
                          "typeString": "int256[] memory"
                        }
                      },
                      "id": 853,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkTokenConservation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4545,
                      "src": "17701:40:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$__$bound_to$_t_array$_t_int256_$dyn_memory_ptr_$",
                        "typeString": "function (int256[] memory) pure"
                      }
                    },
                    "id": 854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17701:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 855,
                  "nodeType": "ExpressionStatement",
                  "src": "17701:42:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 857,
                        "name": "batchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 504,
                        "src": "17768:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 858,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "17777:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 859,
                        "name": "orderIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 512,
                        "src": "17785:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 860,
                        "name": "buyVolumes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 515,
                        "src": "17795:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 861,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "17807:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "id": 856,
                      "name": "documentTrades",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1630,
                      "src": "17753:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$_t_array$_t_uint128_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,address[] memory,uint16[] memory,uint128[] memory,uint16[] memory)"
                      }
                    },
                    "id": 862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17753:71:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 863,
                  "nodeType": "ExpressionStatement",
                  "src": "17753:71:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 865,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10242,
                          "src": "17872:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17872:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 867,
                        "name": "utility",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 598,
                        "src": "17896:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 868,
                        "name": "disregardedUtility",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 787,
                        "src": "17917:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 869,
                        "name": "burntFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 824,
                        "src": "17949:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 870,
                        "name": "lastAuctionBurntFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 572,
                        "src": "17972:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 871,
                        "name": "prices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "18006:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 872,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "18026:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      ],
                      "id": 864,
                      "name": "SolutionSubmission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 199,
                      "src": "17840:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint128_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256,uint256,uint128[] memory,uint16[] memory)"
                      }
                    },
                    "id": 873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17840:212:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 874,
                  "nodeType": "EmitStatement",
                  "src": "17835:217:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 875,
                        "name": "objectiveValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 834,
                        "src": "18070:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 876,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "18069:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 525,
                  "id": 877,
                  "nodeType": "Return",
                  "src": "18062:23:0"
                }
              ]
            },
            "documentation": "@dev a solver facing function called for auction settlement\n@param batchId index of auction solution is referring to\n@param owners array of addresses corresponding to touched orders\n@param orderIds array of order indices used in parallel with owners to identify touched order\n@param buyVolumes executed buy amounts for each order identified by index of owner-orderId arrays\n@param prices list of prices for touched tokens indexed by next parameter\n@param tokenIdsForPrice price[i] is the price for the token with tokenID tokenIdsForPrice[i]\n@return the computed objective value of the solution\n     * Requirements:\n- Solutions for this `batchId` are currently being accepted.\n- Claimed objetive value is a great enough improvement on the current winning solution\n- Fee Token price is non-zero\n- `tokenIdsForPrice` is sorted.\n- Number of touched orders does not exceed `MAX_TOUCHED_ORDERS`.\n- Each touched order is valid at current `batchId`.\n- Each touched order's `executedSellAmount` does not exceed its remaining amount.\n- Limit Price of each touched order is respected.\n- Solution's objective evaluation must be positive.\n     * Sub Requirements: Those nested within other functions\n- checkAndOverrideObjectiveValue; Objetive value is a great enough improvement on the current winning solution\n- checkTokenConservation; for all, non-fee, tokens total amount sold == total amount bought",
            "id": 879,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "submitSolution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 504,
                  "name": "batchId",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13452:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 503,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13452:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 506,
                  "name": "claimedObjectiveValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13476:29:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 505,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13476:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 509,
                  "name": "owners",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13515:23:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 507,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "13515:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 508,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13515:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 512,
                  "name": "orderIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13548:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 510,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "13548:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 511,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13548:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 515,
                  "name": "buyVolumes",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13582:27:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 513,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "13582:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 514,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13582:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 518,
                  "name": "prices",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13619:23:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 516,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "13619:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 517,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13619:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 521,
                  "name": "tokenIdsForPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13652:32:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 519,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "13652:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 520,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13652:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13442:248:0"
            },
            "returnParameters": {
              "id": 525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 524,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "13707:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 523,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13707:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13706:9:0"
            },
            "scope": 2226,
            "src": "13419:4673:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 892,
              "nodeType": "Block",
              "src": "18367:70:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 888,
                        "name": "registeredTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "18407:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 889,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 881,
                        "src": "18425:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 886,
                        "name": "IdToAddressBiMap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6489,
                        "src": "18384:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                          "typeString": "type(library IdToAddressBiMap)"
                        }
                      },
                      "id": 887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6414,
                      "src": "18384:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_address_$returns$_t_uint16_$",
                        "typeString": "function (struct IdToAddressBiMap.Data storage pointer,address) view returns (uint16)"
                      }
                    },
                    "id": 890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18384:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 885,
                  "id": 891,
                  "nodeType": "Return",
                  "src": "18377:53:0"
                }
              ]
            },
            "documentation": "@dev View returning ID of listed tokens\n@param addr address of listed token.\n@return tokenId as stored within the contract.",
            "id": 893,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenAddressToIdMap",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 881,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 893,
                  "src": "18324:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 880,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18324:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18323:14:0"
            },
            "returnParameters": {
              "id": 885,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 884,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 893,
                  "src": "18359:6:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 883,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "18359:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18358:8:0"
            },
            "scope": 2226,
            "src": "18295:142:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 906,
              "nodeType": "Block",
              "src": "18688:75:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 902,
                        "name": "registeredTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "18735:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 903,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 895,
                        "src": "18753:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 900,
                        "name": "IdToAddressBiMap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6489,
                        "src": "18705:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                          "typeString": "type(library IdToAddressBiMap)"
                        }
                      },
                      "id": 901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getAddressAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6389,
                      "src": "18705:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_uint16_$returns$_t_address_$",
                        "typeString": "function (struct IdToAddressBiMap.Data storage pointer,uint16) view returns (address)"
                      }
                    },
                    "id": 904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18705:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 899,
                  "id": 905,
                  "nodeType": "Return",
                  "src": "18698:58:0"
                }
              ]
            },
            "documentation": "@dev View returning address of listed token by ID\n@param id tokenId as stored, via BiMap, within the contract.\n@return address of (listed) token",
            "id": 907,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenIdToAddressMap",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 895,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 907,
                  "src": "18647:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 894,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "18647:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18646:11:0"
            },
            "returnParameters": {
              "id": 899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 898,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 907,
                  "src": "18679:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 897,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18679:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18678:9:0"
            },
            "scope": 2226,
            "src": "18618:145:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 920,
              "nodeType": "Block",
              "src": "19029:75:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 916,
                        "name": "registeredTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "19074:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 917,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 909,
                        "src": "19092:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Data_$6326_storage",
                          "typeString": "struct IdToAddressBiMap.Data storage ref"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 914,
                        "name": "IdToAddressBiMap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6489,
                        "src": "19046:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                          "typeString": "type(library IdToAddressBiMap)"
                        }
                      },
                      "id": 915,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hasAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6364,
                      "src": "19046:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (struct IdToAddressBiMap.Data storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19046:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 913,
                  "id": 919,
                  "nodeType": "Return",
                  "src": "19039:58:0"
                }
              ]
            },
            "documentation": "@dev View returning a bool attesting whether token was already added\n@param addr address of the token to be checked\n@return bool attesting whether token was already added",
            "id": 921,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 910,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 909,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "18988:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 908,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18988:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18987:14:0"
            },
            "returnParameters": {
              "id": 913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 912,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "19023:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 911,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19023:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19022:6:0"
            },
            "scope": 2226,
            "src": "18970:134:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 980,
              "nodeType": "Block",
              "src": "19609:316:0",
              "statements": [
                {
                  "body": {
                    "id": 976,
                    "nodeType": "Block",
                    "src": "19702:192:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 974,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 951,
                            "name": "elements",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 930,
                            "src": "19716:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 955,
                                    "name": "user",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 923,
                                    "src": "19781:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 957,
                                        "name": "user",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 923,
                                        "src": "19798:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "baseExpression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                  "argumentTypes": null,
                                                  "id": 959,
                                                  "name": "orders",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 70,
                                                  "src": "19824:6:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                                    "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                                  }
                                                },
                                                "id": 961,
                                                "indexExpression": {
                                                  "argumentTypes": null,
                                                  "id": 960,
                                                  "name": "user",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 923,
                                                  "src": "19831:4:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "19824:12:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                                  "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                                }
                                              },
                                              "id": 963,
                                              "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 962,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 933,
                                                "src": "19837:1:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint16",
                                                  "typeString": "uint16"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "19824:15:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Order_$95_storage",
                                                "typeString": "struct BatchExchange.Order storage ref"
                                              }
                                            },
                                            "id": 964,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sellToken",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 84,
                                            "src": "19824:25:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            }
                                          ],
                                          "id": 958,
                                          "name": "tokenIdToAddressMap",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 907,
                                          "src": "19804:19:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                            "typeString": "function (uint16) view returns (address)"
                                          }
                                        },
                                        "id": 965,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "19804:46:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 956,
                                      "name": "getBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3976,
                                      "src": "19787:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                        "typeString": "function (address,address) view returns (uint256)"
                                      }
                                    },
                                    "id": 966,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "19787:64:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 967,
                                        "name": "orders",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 70,
                                        "src": "19853:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                          "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 969,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 968,
                                        "name": "user",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 923,
                                        "src": "19860:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "19853:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                        "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                      }
                                    },
                                    "id": 971,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 970,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 933,
                                      "src": "19866:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "19853:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_storage",
                                      "typeString": "struct BatchExchange.Order storage ref"
                                    }
                                  ],
                                  "id": 954,
                                  "name": "encodeAuctionElement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2192,
                                  "src": "19760:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_struct$_Order_$95_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (address,uint256,struct BatchExchange.Order memory) pure returns (bytes memory)"
                                  }
                                },
                                "id": 972,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19760:109:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 952,
                                "name": "elements",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 930,
                                "src": "19727:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 953,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9822,
                              "src": "19727:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 973,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19727:156:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "19716:167:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 975,
                        "nodeType": "ExpressionStatement",
                        "src": "19716:167:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 947,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 936,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 933,
                      "src": "19643:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 939,
                              "name": "orders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70,
                              "src": "19656:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                              }
                            },
                            "id": 941,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 940,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 923,
                              "src": "19663:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19656:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                              "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                            }
                          },
                          "id": 942,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19656:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "id": 945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 943,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 925,
                            "src": "19677:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 944,
                            "name": "pageSize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 927,
                            "src": "19686:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "19677:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 937,
                          "name": "Math",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8536,
                          "src": "19647:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Math_$8536_$",
                            "typeString": "type(library Math)"
                          }
                        },
                        "id": 938,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "min",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8503,
                        "src": "19647:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 946,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19647:48:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19643:52:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 977,
                  "initializationExpression": {
                    "assignments": [
                      933
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 933,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 977,
                        "src": "19624:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 932,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "19624:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 935,
                    "initialValue": {
                      "argumentTypes": null,
                      "id": 934,
                      "name": "offset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 925,
                      "src": "19635:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "19624:17:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "19697:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 948,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 933,
                        "src": "19697:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 950,
                    "nodeType": "ExpressionStatement",
                    "src": "19697:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "19619:275:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 978,
                    "name": "elements",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 930,
                    "src": "19910:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 931,
                  "id": 979,
                  "nodeType": "Return",
                  "src": "19903:15:0"
                }
              ]
            },
            "documentation": "@dev View returning all byte-encoded sell orders for specified user\n@param user address of user whose orders are being queried\n@param offset uint determining the starting orderIndex\n@param pageSize uint determining the count of elements to be viewed\n@return encoded bytes representing all orders",
            "id": 981,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEncodedUserOrdersPaginated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 923,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 981,
                  "src": "19498:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 922,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19498:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 925,
                  "name": "offset",
                  "nodeType": "VariableDeclaration",
                  "scope": 981,
                  "src": "19520:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 924,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "19520:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 927,
                  "name": "pageSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 981,
                  "src": "19543:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 926,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "19543:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19488:76:0"
            },
            "returnParameters": {
              "id": 931,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 930,
                  "name": "elements",
                  "nodeType": "VariableDeclaration",
                  "scope": 981,
                  "src": "19586:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 929,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "19586:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19585:23:0"
            },
            "scope": 2226,
            "src": "19450:475:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1064,
              "nodeType": "Block",
              "src": "20359:539:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    },
                    "id": 993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 990,
                        "name": "allUsers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 78,
                        "src": "20373:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6500_storage",
                          "typeString": "struct IterableAppendOnlySet.Data storage ref"
                        }
                      },
                      "id": 991,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "size",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6499,
                      "src": "20373:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20390:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "20373:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 997,
                  "nodeType": "IfStatement",
                  "src": "20369:61:0",
                  "trueBody": {
                    "id": 996,
                    "nodeType": "Block",
                    "src": "20393:37:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 994,
                          "name": "users",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 988,
                          "src": "20414:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 989,
                        "id": 995,
                        "nodeType": "Return",
                        "src": "20407:12:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    999
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 999,
                      "name": "count",
                      "nodeType": "VariableDeclaration",
                      "scope": 1064,
                      "src": "20439:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 998,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "20439:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1001,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "20454:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20439:16:0"
                },
                {
                  "assignments": [
                    1003
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1003,
                      "name": "current",
                      "nodeType": "VariableDeclaration",
                      "scope": 1064,
                      "src": "20465:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1002,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "20465:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1005,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1004,
                    "name": "previousPageUser",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 983,
                    "src": "20483:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20465:34:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1006,
                      "name": "current",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1003,
                      "src": "20513:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1008,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20532:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "20524:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20524:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "20513:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1031,
                  "nodeType": "IfStatement",
                  "src": "20509:160:0",
                  "trueBody": {
                    "id": 1030,
                    "nodeType": "Block",
                    "src": "20536:133:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1011,
                            "name": "current",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1003,
                            "src": "20550:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1012,
                                "name": "allUsers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 78,
                                "src": "20560:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Data_$6500_storage",
                                  "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                }
                              },
                              "id": 1013,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "first",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6600,
                              "src": "20560:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                "typeString": "function (struct IterableAppendOnlySet.Data storage pointer) view returns (address)"
                              }
                            },
                            "id": 1014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20560:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "20550:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1016,
                        "nodeType": "ExpressionStatement",
                        "src": "20550:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1017,
                            "name": "users",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 988,
                            "src": "20590:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1022,
                                    "name": "current",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1003,
                                    "src": "20628:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1020,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10229,
                                    "src": "20611:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 1021,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "20611:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 1023,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20611:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1018,
                                "name": "users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 988,
                                "src": "20598:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9822,
                              "src": "20598:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 1024,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20598:39:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "20590:47:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1026,
                        "nodeType": "ExpressionStatement",
                        "src": "20590:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "20651:7:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 1027,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 999,
                            "src": "20651:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 1029,
                        "nodeType": "ExpressionStatement",
                        "src": "20651:7:0"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 1060,
                    "nodeType": "Block",
                    "src": "20731:139:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1040,
                            "name": "current",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1003,
                            "src": "20745:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1043,
                                "name": "current",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1003,
                                "src": "20769:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1041,
                                "name": "allUsers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 78,
                                "src": "20755:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Data_$6500_storage",
                                  "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                }
                              },
                              "id": 1042,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "next",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6631,
                              "src": "20755:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                "typeString": "function (struct IterableAppendOnlySet.Data storage pointer,address) view returns (address)"
                              }
                            },
                            "id": 1044,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20755:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "20745:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1046,
                        "nodeType": "ExpressionStatement",
                        "src": "20745:32:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1047,
                            "name": "users",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 988,
                            "src": "20791:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1052,
                                    "name": "current",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1003,
                                    "src": "20829:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1050,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10229,
                                    "src": "20812:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 1051,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "20812:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 1053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20812:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1048,
                                "name": "users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 988,
                                "src": "20799:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1049,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9822,
                              "src": "20799:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 1054,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20799:39:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "20791:47:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1056,
                        "nodeType": "ExpressionStatement",
                        "src": "20791:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "20852:7:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 1057,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 999,
                            "src": "20852:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 1059,
                        "nodeType": "ExpressionStatement",
                        "src": "20852:7:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "id": 1034,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1032,
                        "name": "count",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 999,
                        "src": "20685:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1033,
                        "name": "pageSize",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 985,
                        "src": "20693:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "src": "20685:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1035,
                        "name": "current",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "20705:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1036,
                          "name": "allUsers",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 78,
                          "src": "20716:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Data_$6500_storage",
                            "typeString": "struct IterableAppendOnlySet.Data storage ref"
                          }
                        },
                        "id": 1037,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "last",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6497,
                        "src": "20716:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "20705:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "20685:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1061,
                  "nodeType": "WhileStatement",
                  "src": "20678:192:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1062,
                    "name": "users",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 988,
                    "src": "20886:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 989,
                  "id": 1063,
                  "nodeType": "Return",
                  "src": "20879:12:0"
                }
              ]
            },
            "documentation": "@dev View returning all byte-encoded users in paginated form\n@param previousPageUser address of last user received in last pages (address(0) for first page)\n@param pageSize uint determining the count of users to be returned per page\n@return encoded packed bytes of user addresses",
            "id": 1065,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getUsersPaginated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 983,
                  "name": "previousPageUser",
                  "nodeType": "VariableDeclaration",
                  "scope": 1065,
                  "src": "20275:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 982,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20275:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 985,
                  "name": "pageSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 1065,
                  "src": "20301:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 984,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "20301:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20274:43:0"
            },
            "returnParameters": {
              "id": 989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 988,
                  "name": "users",
                  "nodeType": "VariableDeclaration",
                  "scope": 1065,
                  "src": "20339:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 987,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20339:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20338:20:0"
            },
            "scope": 2226,
            "src": "20248:650:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1081,
              "nodeType": "Block",
              "src": "21195:74:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1073,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1067,
                        "src": "21242:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1074,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21248:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1077,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "21258:2:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21259:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_minus_1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_minus_1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 1075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21251:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint16_$",
                            "typeString": "type(uint16)"
                          },
                          "typeName": "uint16"
                        },
                        "id": 1078,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21251:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 1072,
                      "name": "getEncodedUserOrdersPaginated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 981,
                      "src": "21212:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint16_$_t_uint16_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,uint16,uint16) view returns (bytes memory)"
                      }
                    },
                    "id": 1079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21212:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1071,
                  "id": 1080,
                  "nodeType": "Return",
                  "src": "21205:57:0"
                }
              ]
            },
            "documentation": "@dev View returning all byte-encoded sell orders for specified user\n@param user address of user whose orders are being queried\n@return encoded bytes representing all orders",
            "id": 1082,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEncodedUserOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1067,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1082,
                  "src": "21137:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21137:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21136:14:0"
            },
            "returnParameters": {
              "id": 1071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1070,
                  "name": "elements",
                  "nodeType": "VariableDeclaration",
                  "scope": 1082,
                  "src": "21172:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1069,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "21172:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21171:23:0"
            },
            "scope": 2226,
            "src": "21107:162:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1167,
              "nodeType": "Block",
              "src": "21940:822:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    },
                    "id": 1096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1093,
                        "name": "allUsers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 78,
                        "src": "21954:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6500_storage",
                          "typeString": "struct IterableAppendOnlySet.Data storage ref"
                        }
                      },
                      "id": 1094,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "size",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6499,
                      "src": "21954:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1095,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21971:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "21954:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1100,
                  "nodeType": "IfStatement",
                  "src": "21950:64:0",
                  "trueBody": {
                    "id": 1099,
                    "nodeType": "Block",
                    "src": "21974:40:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1097,
                          "name": "elements",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1091,
                          "src": "21995:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1092,
                        "id": 1098,
                        "nodeType": "Return",
                        "src": "21988:15:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1102
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1102,
                      "name": "currentOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1167,
                      "src": "22023:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 1101,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "22023:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1104,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1103,
                    "name": "previousPageUserOffset",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1086,
                    "src": "22046:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22023:45:0"
                },
                {
                  "assignments": [
                    1106
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1106,
                      "name": "currentUser",
                      "nodeType": "VariableDeclaration",
                      "scope": 1167,
                      "src": "22078:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1105,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "22078:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1108,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1107,
                    "name": "previousPageUser",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1084,
                    "src": "22100:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22078:38:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1109,
                      "name": "currentUser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1106,
                      "src": "22130:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 1111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "22153:3:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1110,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "22145:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1112,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22145:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "22130:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1121,
                  "nodeType": "IfStatement",
                  "src": "22126:88:0",
                  "trueBody": {
                    "id": 1120,
                    "nodeType": "Block",
                    "src": "22159:55:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1114,
                            "name": "currentUser",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1106,
                            "src": "22173:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1115,
                                "name": "allUsers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 78,
                                "src": "22187:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Data_$6500_storage",
                                  "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                }
                              },
                              "id": 1116,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "first",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6600,
                              "src": "22187:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                "typeString": "function (struct IterableAppendOnlySet.Data storage pointer) view returns (address)"
                              }
                            },
                            "id": 1117,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22187:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "22173:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1119,
                        "nodeType": "ExpressionStatement",
                        "src": "22173:30:0"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 1165,
                    "nodeType": "Block",
                    "src": "22290:466:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1128,
                            "name": "elements",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1091,
                            "src": "22304:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1132,
                                    "name": "currentUser",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1106,
                                    "src": "22399:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1133,
                                    "name": "currentOffset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1102,
                                    "src": "22432:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    "id": 1141,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 1134,
                                      "name": "pageSize",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1088,
                                      "src": "22467:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 1139,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 1136,
                                              "name": "elements",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1091,
                                              "src": "22485:8:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 1137,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "22485:15:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "/",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 1138,
                                            "name": "ENCODED_AUCTION_ELEMENT_WIDTH",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 59,
                                            "src": "22503:29:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            }
                                          },
                                          "src": "22485:47:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 1135,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "22478:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint16_$",
                                          "typeString": "type(uint16)"
                                        },
                                        "typeName": "uint16"
                                      },
                                      "id": 1140,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "22478:55:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "src": "22467:66:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "id": 1131,
                                  "name": "getEncodedUserOrdersPaginated",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 981,
                                  "src": "22348:29:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint16_$_t_uint16_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (address,uint16,uint16) view returns (bytes memory)"
                                  }
                                },
                                "id": 1142,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22348:203:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1129,
                                "name": "elements",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1091,
                                "src": "22315:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1130,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9822,
                              "src": "22315:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 1143,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22315:250:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "22304:261:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1145,
                        "nodeType": "ExpressionStatement",
                        "src": "22304:261:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1146,
                            "name": "currentUser",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1106,
                            "src": "22583:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1147,
                              "name": "allUsers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 78,
                              "src": "22598:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Data_$6500_storage",
                                "typeString": "struct IterableAppendOnlySet.Data storage ref"
                              }
                            },
                            "id": 1148,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "last",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6497,
                            "src": "22598:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "22583:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1153,
                        "nodeType": "IfStatement",
                        "src": "22579:82:0",
                        "trueBody": {
                          "id": 1152,
                          "nodeType": "Block",
                          "src": "22613:48:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1150,
                                "name": "elements",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1091,
                                "src": "22638:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 1092,
                              "id": 1151,
                              "nodeType": "Return",
                              "src": "22631:15:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1154,
                            "name": "currentOffset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1102,
                            "src": "22674:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1155,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22690:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "22674:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 1157,
                        "nodeType": "ExpressionStatement",
                        "src": "22674:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1163,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1158,
                            "name": "currentUser",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1106,
                            "src": "22705:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1161,
                                "name": "currentUser",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1106,
                                "src": "22733:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1159,
                                "name": "allUsers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 78,
                                "src": "22719:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Data_$6500_storage",
                                  "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                }
                              },
                              "id": 1160,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "next",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6631,
                              "src": "22719:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                "typeString": "function (struct IterableAppendOnlySet.Data storage pointer,address) view returns (address)"
                              }
                            },
                            "id": 1162,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22719:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "22705:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1164,
                        "nodeType": "ExpressionStatement",
                        "src": "22705:40:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1125,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1122,
                          "name": "elements",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1091,
                          "src": "22230:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "22230:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1124,
                        "name": "ENCODED_AUCTION_ELEMENT_WIDTH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59,
                        "src": "22248:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "src": "22230:47:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1126,
                      "name": "pageSize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1088,
                      "src": "22280:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "22230:58:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1166,
                  "nodeType": "WhileStatement",
                  "src": "22223:533:0"
                }
              ]
            },
            "documentation": "@dev View returning byte-encoded sell orders in paginated form\n@param previousPageUser address of last user received in the previous page (address(0) for first page)\n@param previousPageUserOffset the number of orders received for the last user on the previous page (0 for first page).\n@param pageSize uint determining the count of orders to be returned per page\n@return encoded bytes representing a page of orders ordered by (user, index)",
            "id": 1168,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEncodedUsersPaginated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1084,
                  "name": "previousPageUser",
                  "nodeType": "VariableDeclaration",
                  "scope": 1168,
                  "src": "21801:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1083,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21801:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1086,
                  "name": "previousPageUserOffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1168,
                  "src": "21835:29:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1085,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "21835:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1088,
                  "name": "pageSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 1168,
                  "src": "21874:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1087,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "21874:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21791:104:0"
            },
            "returnParameters": {
              "id": 1092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1091,
                  "name": "elements",
                  "nodeType": "VariableDeclaration",
                  "scope": 1168,
                  "src": "21917:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1090,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "21917:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21916:23:0"
            },
            "scope": 2226,
            "src": "21758:1004:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1222,
              "nodeType": "Block",
              "src": "22983:434:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    },
                    "id": 1176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1173,
                        "name": "allUsers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 78,
                        "src": "22997:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6500_storage",
                          "typeString": "struct IterableAppendOnlySet.Data storage ref"
                        }
                      },
                      "id": 1174,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "size",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6499,
                      "src": "22997:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23013:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22997:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1219,
                  "nodeType": "IfStatement",
                  "src": "22993:393:0",
                  "trueBody": {
                    "id": 1218,
                    "nodeType": "Block",
                    "src": "23016:370:0",
                    "statements": [
                      {
                        "assignments": [
                          1178
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1178,
                            "name": "user",
                            "nodeType": "VariableDeclaration",
                            "scope": 1218,
                            "src": "23030:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1177,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "23030:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1182,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1179,
                              "name": "allUsers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 78,
                              "src": "23045:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Data_$6500_storage",
                                "typeString": "struct IterableAppendOnlySet.Data storage ref"
                              }
                            },
                            "id": 1180,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "first",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6600,
                            "src": "23045:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                              "typeString": "function (struct IterableAppendOnlySet.Data storage pointer) view returns (address)"
                            }
                          },
                          "id": 1181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23045:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23030:31:0"
                      },
                      {
                        "assignments": [
                          1184
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1184,
                            "name": "stop",
                            "nodeType": "VariableDeclaration",
                            "scope": 1218,
                            "src": "23075:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1183,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "23075:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1186,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23087:5:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23075:17:0"
                      },
                      {
                        "body": {
                          "id": 1216,
                          "nodeType": "Block",
                          "src": "23120:256:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1189,
                                  "name": "elements",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1171,
                                  "src": "23138:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1193,
                                          "name": "user",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1178,
                                          "src": "23186:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 1192,
                                        "name": "getEncodedUserOrders",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1082,
                                        "src": "23165:20:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function (address) view returns (bytes memory)"
                                        }
                                      },
                                      "id": 1194,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "23165:26:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1190,
                                      "name": "elements",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1171,
                                      "src": "23149:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 1191,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "concat",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9822,
                                    "src": "23149:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 1195,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23149:43:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "src": "23138:54:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1197,
                              "nodeType": "ExpressionStatement",
                              "src": "23138:54:0"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 1201,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1198,
                                  "name": "user",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1178,
                                  "src": "23214:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1199,
                                    "name": "allUsers",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 78,
                                    "src": "23222:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Data_$6500_storage",
                                      "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                    }
                                  },
                                  "id": 1200,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "last",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6497,
                                  "src": "23222:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "23214:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1214,
                                "nodeType": "Block",
                                "src": "23295:67:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1212,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1207,
                                        "name": "user",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1178,
                                        "src": "23317:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 1210,
                                            "name": "user",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1178,
                                            "src": "23338:4:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1208,
                                            "name": "allUsers",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 78,
                                            "src": "23324:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Data_$6500_storage",
                                              "typeString": "struct IterableAppendOnlySet.Data storage ref"
                                            }
                                          },
                                          "id": 1209,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "next",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6631,
                                          "src": "23324:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6500_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                                            "typeString": "function (struct IterableAppendOnlySet.Data storage pointer,address) view returns (address)"
                                          }
                                        },
                                        "id": 1211,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23324:19:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "src": "23317:26:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 1213,
                                    "nodeType": "ExpressionStatement",
                                    "src": "23317:26:0"
                                  }
                                ]
                              },
                              "id": 1215,
                              "nodeType": "IfStatement",
                              "src": "23210:152:0",
                              "trueBody": {
                                "id": 1206,
                                "nodeType": "Block",
                                "src": "23237:52:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1204,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1202,
                                        "name": "stop",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1184,
                                        "src": "23259:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "74727565",
                                        "id": 1203,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "23266:4:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "23259:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 1205,
                                    "nodeType": "ExpressionStatement",
                                    "src": "23259:11:0"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "id": 1188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "23113:5:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 1187,
                            "name": "stop",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1184,
                            "src": "23114:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1217,
                        "nodeType": "WhileStatement",
                        "src": "23106:270:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1220,
                    "name": "elements",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1171,
                    "src": "23402:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1172,
                  "id": 1221,
                  "nodeType": "Return",
                  "src": "23395:15:0"
                }
              ]
            },
            "documentation": "@dev View returning all byte-encoded sell orders\n@return encoded bytes representing all orders ordered by (user, index)",
            "id": 1223,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEncodedOrders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1169,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22936:2:0"
            },
            "returnParameters": {
              "id": 1172,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1171,
                  "name": "elements",
                  "nodeType": "VariableDeclaration",
                  "scope": 1223,
                  "src": "22960:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1170,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "22960:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22959:23:0"
            },
            "scope": 2226,
            "src": "22911:506:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1242,
              "nodeType": "Block",
              "src": "23494:103:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 1235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1230,
                        "name": "batchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1225,
                        "src": "23511:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 1234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1231,
                            "name": "getCurrentBatchId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3888,
                            "src": "23522:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                              "typeString": "function () view returns (uint32)"
                            }
                          },
                          "id": 1232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23522:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1233,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23544:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "23522:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "23511:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1236,
                          "name": "getSecondsRemainingInBatch",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3901,
                          "src": "23549:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23549:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1238,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23581:9:0",
                        "subdenomination": "minutes",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_60_by_1",
                          "typeString": "int_const 60"
                        },
                        "value": "1"
                      },
                      "src": "23549:41:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "23511:79:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1229,
                  "id": 1241,
                  "nodeType": "Return",
                  "src": "23504:86:0"
                }
              ]
            },
            "documentation": null,
            "id": 1243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "acceptingSolutions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1225,
                  "name": "batchId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1243,
                  "src": "23451:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1224,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "23451:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23450:16:0"
            },
            "returnParameters": {
              "id": 1229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1228,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1243,
                  "src": "23488:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1227,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23488:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23487:6:0"
            },
            "scope": 2226,
            "src": "23423:174:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1263,
              "nodeType": "Block",
              "src": "23859:171:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 1254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1248,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "23873:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1249,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "batchId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 104,
                      "src": "23873:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 1253,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1250,
                          "name": "getCurrentBatchId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3888,
                          "src": "23899:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                            "typeString": "function () view returns (uint32)"
                          }
                        },
                        "id": 1251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23899:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1252,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23921:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "23899:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "23873:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1261,
                    "nodeType": "Block",
                    "src": "23991:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24012:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1247,
                        "id": 1260,
                        "nodeType": "Return",
                        "src": "24005:8:0"
                      }
                    ]
                  },
                  "id": 1262,
                  "nodeType": "IfStatement",
                  "src": "23869:155:0",
                  "trueBody": {
                    "id": 1258,
                    "nodeType": "Block",
                    "src": "23924:61:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1255,
                            "name": "latestSolution",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 76,
                            "src": "23945:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                              "typeString": "struct BatchExchange.SolutionData storage ref"
                            }
                          },
                          "id": 1256,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "objectiveValue",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 116,
                          "src": "23945:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1247,
                        "id": 1257,
                        "nodeType": "Return",
                        "src": "23938:36:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev gets the objective value of currently winning solution.\n@return objective function evaluation of the currently winning solution, or zero if no solution proposed.",
            "id": 1264,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentObjectiveValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1244,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23826:2:0"
            },
            "returnParameters": {
              "id": 1247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1246,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1264,
                  "src": "23850:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1245,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23850:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23849:9:0"
            },
            "scope": 2226,
            "src": "23793:237:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1364,
              "nodeType": "Block",
              "src": "24295:961:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1284,
                            "name": "registeredTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 80,
                            "src": "24336:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1285,
                            "name": "buyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1266,
                            "src": "24354:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1282,
                            "name": "IdToAddressBiMap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6489,
                            "src": "24313:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                              "typeString": "type(library IdToAddressBiMap)"
                            }
                          },
                          "id": 1283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hasId",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6347,
                          "src": "24313:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_uint16_$returns$_t_bool_$",
                            "typeString": "function (struct IdToAddressBiMap.Data storage pointer,uint16) view returns (bool)"
                          }
                        },
                        "id": 1286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24313:50:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "42757920746f6b656e206d757374206265206c6973746564",
                        "id": 1287,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24365:26:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3d538c739e678ab4e23ea9c40d42539aa276d51d4c82e76e198cc47faa32c8d0",
                          "typeString": "literal_string \"Buy token must be listed\""
                        },
                        "value": "Buy token must be listed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3d538c739e678ab4e23ea9c40d42539aa276d51d4c82e76e198cc47faa32c8d0",
                          "typeString": "literal_string \"Buy token must be listed\""
                        }
                      ],
                      "id": 1281,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "24305:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24305:87:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1289,
                  "nodeType": "ExpressionStatement",
                  "src": "24305:87:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1293,
                            "name": "registeredTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 80,
                            "src": "24433:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1294,
                            "name": "sellToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1268,
                            "src": "24451:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Data_$6326_storage",
                              "typeString": "struct IdToAddressBiMap.Data storage ref"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1291,
                            "name": "IdToAddressBiMap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6489,
                            "src": "24410:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IdToAddressBiMap_$6489_$",
                              "typeString": "type(library IdToAddressBiMap)"
                            }
                          },
                          "id": 1292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hasId",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6347,
                          "src": "24410:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Data_$6326_storage_ptr_$_t_uint16_$returns$_t_bool_$",
                            "typeString": "function (struct IdToAddressBiMap.Data storage pointer,uint16) view returns (bool)"
                          }
                        },
                        "id": 1295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24410:51:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53656c6c20746f6b656e206d757374206265206c6973746564",
                        "id": 1296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24463:27:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_86bed28b1c496a41e04c9492fd6fc1642606259449a54f6e4e3a160d5919b7fb",
                          "typeString": "literal_string \"Sell token must be listed\""
                        },
                        "value": "Sell token must be listed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_86bed28b1c496a41e04c9492fd6fc1642606259449a54f6e4e3a160d5919b7fb",
                          "typeString": "literal_string \"Sell token must be listed\""
                        }
                      ],
                      "id": 1290,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "24402:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24402:89:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1298,
                  "nodeType": "ExpressionStatement",
                  "src": "24402:89:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 1302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1300,
                          "name": "buyToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1266,
                          "src": "24509:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1301,
                          "name": "sellToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1268,
                          "src": "24521:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "src": "24509:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "45786368616e676520746f6b656e73206e6f742064697374696e6374",
                        "id": 1303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24532:30:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2c6192f37071bd8e05382b248226ad90159192cc58a99bd710ee7227bf6520f",
                          "typeString": "literal_string \"Exchange tokens not distinct\""
                        },
                        "value": "Exchange tokens not distinct"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2c6192f37071bd8e05382b248226ad90159192cc58a99bd710ee7227bf6520f",
                          "typeString": "literal_string \"Exchange tokens not distinct\""
                        }
                      ],
                      "id": 1299,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "24501:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24501:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1305,
                  "nodeType": "ExpressionStatement",
                  "src": "24501:62:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 1310,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1307,
                          "name": "validFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1270,
                          "src": "24581:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1308,
                            "name": "getCurrentBatchId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3888,
                            "src": "24594:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                              "typeString": "function () view returns (uint32)"
                            }
                          },
                          "id": 1309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24594:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "24581:32:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f72646572732063616e277420626520706c6163656420696e207468652070617374",
                        "id": 1311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24615:36:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76a8e7c51f781111be6bb8ef7c4896c0f2122e73f83c789110c68af6cee5dc8a",
                          "typeString": "literal_string \"Orders can't be placed in the past\""
                        },
                        "value": "Orders can't be placed in the past"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76a8e7c51f781111be6bb8ef7c4896c0f2122e73f83c789110c68af6cee5dc8a",
                          "typeString": "literal_string \"Orders can't be placed in the past\""
                        }
                      ],
                      "id": 1306,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "24573:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24573:79:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1313,
                  "nodeType": "ExpressionStatement",
                  "src": "24573:79:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1320,
                            "name": "buyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1266,
                            "src": "24733:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1321,
                            "name": "sellToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1268,
                            "src": "24770:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1322,
                            "name": "validFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1270,
                            "src": "24808:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1323,
                            "name": "validUntil",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1272,
                            "src": "24847:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1324,
                            "name": "buyAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1274,
                            "src": "24891:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1325,
                            "name": "sellAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1276,
                            "src": "24936:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1326,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24976:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1319,
                          "name": "Order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 95,
                          "src": "24699:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Order_$95_storage_ptr_$",
                            "typeString": "type(struct BatchExchange.Order storage pointer)"
                          }
                        },
                        "id": 1327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "buyToken",
                          "sellToken",
                          "validFrom",
                          "validUntil",
                          "priceNumerator",
                          "priceDenominator",
                          "usedAmount"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "24699:293:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_memory",
                          "typeString": "struct BatchExchange.Order memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Order_$95_memory",
                          "typeString": "struct BatchExchange.Order memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1314,
                          "name": "orders",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70,
                          "src": "24662:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                          }
                        },
                        "id": 1317,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1315,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10242,
                            "src": "24669:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "24669:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "24662:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                          "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                        }
                      },
                      "id": 1318,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24662:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Order_$95_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct BatchExchange.Order storage ref) returns (uint256)"
                      }
                    },
                    "id": 1328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24662:340:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1329,
                  "nodeType": "ExpressionStatement",
                  "src": "24662:340:0"
                },
                {
                  "assignments": [
                    1331
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1331,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 1364,
                      "src": "25012:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 1330,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "25012:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1342,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1332,
                                  "name": "orders",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70,
                                  "src": "25030:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                    "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                  }
                                },
                                "id": 1335,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1333,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10242,
                                    "src": "25037:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 1334,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "25037:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25030:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                  "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                }
                              },
                              "id": 1336,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25030:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25058:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "25030:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 1339,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "25029:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toUint16",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9782,
                      "src": "25029:40:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint16_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint16)"
                      }
                    },
                    "id": 1341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25029:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25012:59:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1344,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10242,
                          "src": "25101:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "25101:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1346,
                        "name": "orderId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1331,
                        "src": "25113:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1347,
                        "name": "buyToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1266,
                        "src": "25122:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1348,
                        "name": "sellToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1268,
                        "src": "25132:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1349,
                        "name": "validFrom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1270,
                        "src": "25143:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1350,
                        "name": "validUntil",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1272,
                        "src": "25154:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1351,
                        "name": "buyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1274,
                        "src": "25166:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1352,
                        "name": "sellAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "25177:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 1343,
                      "name": "OrderPlacement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 135,
                      "src": "25086:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint32_$_t_uint32_$_t_uint128_$_t_uint128_$returns$__$",
                        "typeString": "function (address,uint16,uint16,uint16,uint32,uint32,uint128,uint128)"
                      }
                    },
                    "id": 1353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25086:102:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1354,
                  "nodeType": "EmitStatement",
                  "src": "25081:107:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1358,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10242,
                          "src": "25214:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "25214:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1355,
                        "name": "allUsers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 78,
                        "src": "25198:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Data_$6500_storage",
                          "typeString": "struct IterableAppendOnlySet.Data storage ref"
                        }
                      },
                      "id": 1357,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "insert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6541,
                      "src": "25198:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Data_$6500_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$6500_storage_ptr_$",
                        "typeString": "function (struct IterableAppendOnlySet.Data storage pointer,address) returns (bool)"
                      }
                    },
                    "id": 1360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25198:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1361,
                  "nodeType": "ExpressionStatement",
                  "src": "25198:27:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1362,
                    "name": "orderId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1331,
                    "src": "25242:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 1280,
                  "id": 1363,
                  "nodeType": "Return",
                  "src": "25235:14:0"
                }
              ]
            },
            "documentation": "Private Functions",
            "id": 1365,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "placeOrderInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1266,
                  "name": "buyToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24114:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1265,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "24114:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1268,
                  "name": "sellToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24139:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1267,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "24139:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1270,
                  "name": "validFrom",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24165:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1269,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "24165:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1272,
                  "name": "validUntil",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24191:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1271,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "24191:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1274,
                  "name": "buyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24218:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1273,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "24218:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1276,
                  "name": "sellAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24245:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1275,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "24245:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24104:165:0"
            },
            "returnParameters": {
              "id": 1280,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1279,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1365,
                  "src": "24287:6:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1278,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "24287:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24286:8:0"
            },
            "scope": 2226,
            "src": "24077:1179:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1385,
              "nodeType": "Block",
              "src": "25484:148:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1370,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "25494:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1372,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "feeReward",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 114,
                      "src": "25494:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1373,
                      "name": "feeReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1367,
                      "src": "25521:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25494:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1375,
                  "nodeType": "ExpressionStatement",
                  "src": "25494:36:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1377,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10242,
                          "src": "25579:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "25579:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1380,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25611:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1379,
                          "name": "tokenIdToAddressMap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 907,
                          "src": "25591:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                            "typeString": "function (uint16) view returns (address)"
                          }
                        },
                        "id": 1381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25591:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1382,
                        "name": "feeReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1367,
                        "src": "25615:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1376,
                      "name": "addBalanceAndBlockWithdrawForThisBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4038,
                      "src": "25540:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25540:85:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1384,
                  "nodeType": "ExpressionStatement",
                  "src": "25540:85:0"
                }
              ]
            },
            "documentation": "@dev called at the end of submitSolution with a value of tokenConservation / 2\n@param feeReward amount to be rewarded to the solver",
            "id": 1386,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "grantRewardToSolutionSubmitter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1368,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1367,
                  "name": "feeReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 1386,
                  "src": "25457:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1366,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25457:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25456:19:0"
            },
            "returnParameters": {
              "id": 1369,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25484:0:0"
            },
            "scope": 2226,
            "src": "25417:215:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1411,
              "nodeType": "Block",
              "src": "25824:193:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "25838:26:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1391,
                        "name": "currentBatchHasSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1997,
                        "src": "25839:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 1392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25839:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1408,
                  "nodeType": "IfStatement",
                  "src": "25834:159:0",
                  "trueBody": {
                    "id": 1407,
                    "nodeType": "Block",
                    "src": "25866:127:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1398,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10294,
                                  "src": "25905:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_BatchExchange_$2226",
                                    "typeString": "contract BatchExchange"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_BatchExchange_$2226",
                                    "typeString": "contract BatchExchange"
                                  }
                                ],
                                "id": 1397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "25897:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 1399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25897:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1400,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "25912:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1401,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "feeReward",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 114,
                              "src": "25912:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1394,
                              "name": "feeToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 65,
                              "src": "25880:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TokenOWL_$6270",
                                "typeString": "contract TokenOWL"
                              }
                            },
                            "id": 1396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "burnOWL",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6255,
                            "src": "25880:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 1402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25880:57:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1403,
                        "nodeType": "ExpressionStatement",
                        "src": "25880:57:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1404,
                            "name": "latestSolution",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 76,
                            "src": "25958:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                              "typeString": "struct BatchExchange.SolutionData storage ref"
                            }
                          },
                          "id": 1405,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "feeReward",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 114,
                          "src": "25958:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1390,
                        "id": 1406,
                        "nodeType": "Return",
                        "src": "25951:31:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "26009:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 1390,
                  "id": 1410,
                  "nodeType": "Return",
                  "src": "26002:8:0"
                }
              ]
            },
            "documentation": "@dev called during solution submission to burn fees from previous auction\n@return amount of OWL burnt",
            "id": 1412,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "burnPreviousAuctionFees",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1387,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25795:2:0"
            },
            "returnParameters": {
              "id": 1390,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1389,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1412,
                  "src": "25815:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1388,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25815:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25814:9:0"
            },
            "scope": 2226,
            "src": "25763:254:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1467,
              "nodeType": "Block",
              "src": "26401:297:0",
              "statements": [
                {
                  "body": {
                    "id": 1442,
                    "nodeType": "Block",
                    "src": "26480:78:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1433,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "26494:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1438,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1434,
                                  "name": "latestSolution",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 76,
                                  "src": "26508:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                    "typeString": "struct BatchExchange.SolutionData storage ref"
                                  }
                                },
                                "id": 1435,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "tokenIdsForPrice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 110,
                                "src": "26508:31:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint16_$dyn_storage",
                                  "typeString": "uint16[] storage ref"
                                }
                              },
                              "id": 1437,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1436,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1422,
                                "src": "26540:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "26508:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "26494:49:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26546:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "26494:53:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 1441,
                        "nodeType": "ExpressionStatement",
                        "src": "26494:53:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1425,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1422,
                      "src": "26431:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1426,
                          "name": "latestSolution",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 76,
                          "src": "26435:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                            "typeString": "struct BatchExchange.SolutionData storage ref"
                          }
                        },
                        "id": 1427,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenIdsForPrice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 110,
                        "src": "26435:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_storage",
                          "typeString": "uint16[] storage ref"
                        }
                      },
                      "id": 1428,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "26435:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26431:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1443,
                  "initializationExpression": {
                    "assignments": [
                      1422
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1422,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1443,
                        "src": "26416:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26416:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1424,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26428:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "26416:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1431,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "26475:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1430,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1422,
                        "src": "26475:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1432,
                    "nodeType": "ExpressionStatement",
                    "src": "26475:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "26411:147:0"
                },
                {
                  "body": {
                    "id": 1465,
                    "nodeType": "Block",
                    "src": "26621:71:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1455,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "26635:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1459,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1456,
                                "name": "tokenIdsForPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1418,
                                "src": "26649:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                  "typeString": "uint16[] memory"
                                }
                              },
                              "id": 1458,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1457,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1445,
                                "src": "26666:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "26649:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "26635:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1460,
                              "name": "prices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1415,
                              "src": "26672:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                "typeString": "uint128[] memory"
                              }
                            },
                            "id": 1462,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1461,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1445,
                              "src": "26679:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "26672:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "26635:46:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 1464,
                        "nodeType": "ExpressionStatement",
                        "src": "26635:46:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1448,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1445,
                      "src": "26587:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1449,
                        "name": "tokenIdsForPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1418,
                        "src": "26591:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                          "typeString": "uint16[] memory"
                        }
                      },
                      "id": 1450,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "26591:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26587:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1466,
                  "initializationExpression": {
                    "assignments": [
                      1445
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1445,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1466,
                        "src": "26572:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1444,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26572:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1447,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1446,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26584:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "26572:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "26616:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1452,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1445,
                        "src": "26616:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1454,
                    "nodeType": "ExpressionStatement",
                    "src": "26616:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "26567:125:0"
                }
              ]
            },
            "documentation": "@dev Called from within submitSolution to update the token prices.\n@param prices list of prices for touched tokens only, first price is always fee token price\n@param tokenIdsForPrice price[i] is the price for the token with tokenID tokenIdsForPrice[i]",
            "id": 1468,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateCurrentPrices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1419,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1415,
                  "name": "prices",
                  "nodeType": "VariableDeclaration",
                  "scope": 1468,
                  "src": "26334:23:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1413,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "26334:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 1414,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "26334:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1418,
                  "name": "tokenIdsForPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 1468,
                  "src": "26359:32:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1416,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "26359:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 1417,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "26359:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26333:59:0"
            },
            "returnParameters": {
              "id": 1420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26401:0:0"
            },
            "scope": 2226,
            "src": "26305:393:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1505,
              "nodeType": "Block",
              "src": "27149:196:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1478,
                            "name": "orders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70,
                            "src": "27188:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                              "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                            }
                          },
                          "id": 1480,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1479,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1470,
                            "src": "27195:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "27188:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                            "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                          }
                        },
                        "id": 1482,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1481,
                          "name": "orderId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1472,
                          "src": "27202:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27188:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_storage",
                          "typeString": "struct BatchExchange.Order storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Order_$95_storage",
                          "typeString": "struct BatchExchange.Order storage ref"
                        }
                      ],
                      "id": 1477,
                      "name": "isOrderWithLimitedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1562,
                      "src": "27163:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (struct BatchExchange.Order memory) pure returns (bool)"
                      }
                    },
                    "id": 1483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27163:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1504,
                  "nodeType": "IfStatement",
                  "src": "27159:180:0",
                  "trueBody": {
                    "id": 1503,
                    "nodeType": "Block",
                    "src": "27213:126:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1484,
                                  "name": "orders",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70,
                                  "src": "27227:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                    "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                  }
                                },
                                "id": 1487,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1485,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1470,
                                  "src": "27234:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27227:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                  "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                }
                              },
                              "id": 1488,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1486,
                                "name": "orderId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1472,
                                "src": "27241:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27227:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_storage",
                                "typeString": "struct BatchExchange.Order storage ref"
                              }
                            },
                            "id": 1489,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "usedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 94,
                            "src": "27227:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1497,
                                    "name": "executedAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1474,
                                    "src": "27301:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 1490,
                                          "name": "orders",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 70,
                                          "src": "27263:6:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                            "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                          }
                                        },
                                        "id": 1492,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 1491,
                                          "name": "owner",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1470,
                                          "src": "27270:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "27263:13:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                          "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                        }
                                      },
                                      "id": 1494,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1493,
                                        "name": "orderId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1472,
                                        "src": "27277:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "27263:22:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_storage",
                                        "typeString": "struct BatchExchange.Order storage ref"
                                      }
                                    },
                                    "id": 1495,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "usedAmount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 94,
                                    "src": "27263:33:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "id": 1496,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8563,
                                  "src": "27263:37:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1498,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27263:53:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1499,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint128",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9719,
                              "src": "27263:63:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256) pure returns (uint128)"
                              }
                            },
                            "id": 1500,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27263:65:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "27227:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 1502,
                        "nodeType": "ExpressionStatement",
                        "src": "27227:101:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Updates an order's remaing requested sell amount upon (partial) execution of a standing order\n@param owner order's corresponding user address\n@param orderId index of order in list of owner's orders\n@param executedAmount proportion of order's requested sellAmount that was filled.",
            "id": 1506,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateRemainingOrder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1470,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1506,
                  "src": "27065:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1469,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27065:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1472,
                  "name": "orderId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1506,
                  "src": "27088:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1471,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "27088:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1474,
                  "name": "executedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1506,
                  "src": "27112:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1473,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "27112:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27055:85:0"
            },
            "returnParameters": {
              "id": 1476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27149:0:0"
            },
            "scope": 2226,
            "src": "27026:319:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1543,
              "nodeType": "Block",
              "src": "27799:196:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1516,
                            "name": "orders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70,
                            "src": "27838:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                              "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                            }
                          },
                          "id": 1518,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1517,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1508,
                            "src": "27845:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "27838:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                            "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                          }
                        },
                        "id": 1520,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1519,
                          "name": "orderId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1510,
                          "src": "27852:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27838:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_storage",
                          "typeString": "struct BatchExchange.Order storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Order_$95_storage",
                          "typeString": "struct BatchExchange.Order storage ref"
                        }
                      ],
                      "id": 1515,
                      "name": "isOrderWithLimitedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1562,
                      "src": "27813:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (struct BatchExchange.Order memory) pure returns (bool)"
                      }
                    },
                    "id": 1521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27813:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1542,
                  "nodeType": "IfStatement",
                  "src": "27809:180:0",
                  "trueBody": {
                    "id": 1541,
                    "nodeType": "Block",
                    "src": "27863:126:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1522,
                                  "name": "orders",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70,
                                  "src": "27877:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                    "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                  }
                                },
                                "id": 1525,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1523,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1508,
                                  "src": "27884:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27877:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                  "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                }
                              },
                              "id": 1526,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1524,
                                "name": "orderId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1510,
                                "src": "27891:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27877:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$95_storage",
                                "typeString": "struct BatchExchange.Order storage ref"
                              }
                            },
                            "id": 1527,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "usedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 94,
                            "src": "27877:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1535,
                                    "name": "executedAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1512,
                                    "src": "27951:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 1528,
                                          "name": "orders",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 70,
                                          "src": "27913:6:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                            "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                          }
                                        },
                                        "id": 1530,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 1529,
                                          "name": "owner",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1508,
                                          "src": "27920:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "27913:13:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                          "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                        }
                                      },
                                      "id": 1532,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1531,
                                        "name": "orderId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1510,
                                        "src": "27927:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "27913:22:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_storage",
                                        "typeString": "struct BatchExchange.Order storage ref"
                                      }
                                    },
                                    "id": 1533,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "usedAmount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 94,
                                    "src": "27913:33:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "id": 1534,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8579,
                                  "src": "27913:37:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1536,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27913:53:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1537,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint128",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9719,
                              "src": "27913:63:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256) pure returns (uint128)"
                              }
                            },
                            "id": 1538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27913:65:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "27877:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 1540,
                        "nodeType": "ExpressionStatement",
                        "src": "27877:101:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev The inverse of updateRemainingOrder, called when reverting a solution in favour of a better one.\n@param owner order's corresponding user address\n@param orderId index of order in list of owner's orders\n@param executedAmount proportion of order's requested sellAmount that was filled.",
            "id": 1544,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "revertRemainingOrder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1508,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1544,
                  "src": "27715:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1507,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27715:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1510,
                  "name": "orderId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1544,
                  "src": "27738:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1509,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "27738:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1512,
                  "name": "executedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1544,
                  "src": "27762:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1511,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "27762:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27705:85:0"
            },
            "returnParameters": {
              "id": 1514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27799:0:0"
            },
            "scope": 2226,
            "src": "27676:319:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1561,
              "nodeType": "Block",
              "src": "28272:122:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "id": 1554,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1551,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1546,
                          "src": "28289:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1552,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceNumerator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 90,
                        "src": "28289:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1553,
                        "name": "UNLIMITED_ORDER_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50,
                        "src": "28313:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "src": "28289:46:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "id": 1558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1555,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1546,
                          "src": "28339:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1556,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceDenominator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 92,
                        "src": "28339:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1557,
                        "name": "UNLIMITED_ORDER_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50,
                        "src": "28365:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "src": "28339:48:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "28289:98:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1550,
                  "id": 1560,
                  "nodeType": "Return",
                  "src": "28282:105:0"
                }
              ]
            },
            "documentation": "@dev Checks whether an order is intended to track its usedAmount\n@param order order under inspection\n@return true if the given order does track its usedAmount",
            "id": 1562,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOrderWithLimitedAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1546,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 1562,
                  "src": "28224:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1545,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "28224:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28223:20:0"
            },
            "returnParameters": {
              "id": 1550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1549,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1562,
                  "src": "28266:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1548,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "28266:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28265:6:0"
            },
            "scope": 2226,
            "src": "28190:204:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1629,
              "nodeType": "Block",
              "src": "29115:341:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1579,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "29125:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1581,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "batchId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 104,
                      "src": "29125:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1582,
                      "name": "batchId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1564,
                      "src": "29150:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "29125:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 1584,
                  "nodeType": "ExpressionStatement",
                  "src": "29125:32:0"
                },
                {
                  "body": {
                    "id": 1614,
                    "nodeType": "Block",
                    "src": "29211:124:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1602,
                                    "name": "owners",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1567,
                                    "src": "29270:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 1604,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1603,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1586,
                                    "src": "29277:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29270:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1605,
                                    "name": "orderIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1570,
                                    "src": "29290:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                                      "typeString": "uint16[] memory"
                                    }
                                  },
                                  "id": 1607,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1606,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1586,
                                    "src": "29299:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29290:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1608,
                                    "name": "volumes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1573,
                                    "src": "29311:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                      "typeString": "uint128[] memory"
                                    }
                                  },
                                  "id": 1610,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1609,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1586,
                                    "src": "29319:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29311:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  },
                                  {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                ],
                                "id": 1601,
                                "name": "TradeData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 102,
                                "src": "29252:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_TradeData_$102_storage_ptr_$",
                                  "typeString": "type(struct BatchExchange.TradeData storage pointer)"
                                }
                              },
                              "id": 1611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "owner",
                                "orderId",
                                "volume"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "29252:71:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TradeData_$102_memory",
                                "typeString": "struct BatchExchange.TradeData memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_TradeData_$102_memory",
                                "typeString": "struct BatchExchange.TradeData memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1596,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "29225:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1599,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "trades",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 107,
                              "src": "29225:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                              }
                            },
                            "id": 1600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "29225:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_TradeData_$102_storage_$returns$_t_uint256_$",
                              "typeString": "function (struct BatchExchange.TradeData storage ref) returns (uint256)"
                            }
                          },
                          "id": 1612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29225:99:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1613,
                        "nodeType": "ExpressionStatement",
                        "src": "29225:99:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1589,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1586,
                      "src": "29187:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1590,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1567,
                        "src": "29191:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 1591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29191:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "29187:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1615,
                  "initializationExpression": {
                    "assignments": [
                      1586
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1586,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1615,
                        "src": "29172:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1585,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29172:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1588,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29184:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "29172:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "29206:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1593,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1586,
                        "src": "29206:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1595,
                    "nodeType": "ExpressionStatement",
                    "src": "29206:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "29167:168:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1616,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "29344:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1618,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "tokenIdsForPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 110,
                      "src": "29344:31:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$dyn_storage",
                        "typeString": "uint16[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1619,
                      "name": "tokenIdsForPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1576,
                      "src": "29378:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                        "typeString": "uint16[] memory"
                      }
                    },
                    "src": "29344:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage",
                      "typeString": "uint16[] storage ref"
                    }
                  },
                  "id": 1621,
                  "nodeType": "ExpressionStatement",
                  "src": "29344:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1627,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1622,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "29404:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1624,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "solutionSubmitter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 112,
                      "src": "29404:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1625,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10242,
                        "src": "29439:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1626,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29439:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "29404:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1628,
                  "nodeType": "ExpressionStatement",
                  "src": "29404:45:0"
                }
              ]
            },
            "documentation": "@dev This function writes solution information into contract storage\n@param batchId index of referenced auction\n@param owners array of addresses corresponding to touched orders\n@param orderIds array of order indices used in parallel with owners to identify touched order\n@param volumes executed buy amounts for each order identified by index of owner-orderId arrays\n@param tokenIdsForPrice price[i] is the price for the token with tokenID tokenIdsForPrice[i]",
            "id": 1630,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "documentTrades",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1577,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1564,
                  "name": "batchId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "28943:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1563,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "28943:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1567,
                  "name": "owners",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "28967:23:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1565,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "28967:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1566,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "28967:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1570,
                  "name": "orderIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "29000:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1568,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "29000:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 1569,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "29000:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1573,
                  "name": "volumes",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "29034:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1571,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "29034:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 1572,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "29034:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1576,
                  "name": "tokenIdsForPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 1630,
                  "src": "29068:32:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1574,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "29068:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 1575,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "29068:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28933:173:0"
            },
            "returnParameters": {
              "id": 1578,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29115:0:0"
            },
            "scope": 2226,
            "src": "28910:546:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1782,
              "nodeType": "Block",
              "src": "29605:1348:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1633,
                      "name": "currentBatchHasSolution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1997,
                      "src": "29619:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                        "typeString": "function () view returns (bool)"
                      }
                    },
                    "id": 1634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29619:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1781,
                  "nodeType": "IfStatement",
                  "src": "29615:1332:0",
                  "trueBody": {
                    "id": 1780,
                    "nodeType": "Block",
                    "src": "29646:1301:0",
                    "statements": [
                      {
                        "body": {
                          "id": 1691,
                          "nodeType": "Block",
                          "src": "29719:391:0",
                          "statements": [
                            {
                              "assignments": [
                                1648
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1648,
                                  "name": "owner",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1691,
                                  "src": "29737:13:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 1647,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29737:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1654,
                              "initialValue": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1649,
                                      "name": "latestSolution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 76,
                                      "src": "29753:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                        "typeString": "struct BatchExchange.SolutionData storage ref"
                                      }
                                    },
                                    "id": 1650,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "trades",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 107,
                                    "src": "29753:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                    }
                                  },
                                  "id": 1652,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1651,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1636,
                                    "src": "29775:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29753:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                    "typeString": "struct BatchExchange.TradeData storage ref"
                                  }
                                },
                                "id": 1653,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 97,
                                "src": "29753:30:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29737:46:0"
                            },
                            {
                              "assignments": [
                                1656
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1656,
                                  "name": "orderId",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1691,
                                  "src": "29801:14:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  },
                                  "typeName": {
                                    "id": 1655,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29801:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1662,
                              "initialValue": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1657,
                                      "name": "latestSolution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 76,
                                      "src": "29818:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                        "typeString": "struct BatchExchange.SolutionData storage ref"
                                      }
                                    },
                                    "id": 1658,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "trades",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 107,
                                    "src": "29818:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                    }
                                  },
                                  "id": 1660,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1659,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1636,
                                    "src": "29840:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29818:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                    "typeString": "struct BatchExchange.TradeData storage ref"
                                  }
                                },
                                "id": 1661,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "orderId",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 101,
                                "src": "29818:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29801:49:0"
                            },
                            {
                              "assignments": [
                                1664
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1664,
                                  "name": "order",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1691,
                                  "src": "29868:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 1663,
                                    "name": "Order",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 95,
                                    "src": "29868:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                                      "typeString": "struct BatchExchange.Order"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1670,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1665,
                                    "name": "orders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70,
                                    "src": "29889:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                      "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 1667,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1666,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1648,
                                    "src": "29896:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29889:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                    "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                  }
                                },
                                "id": 1669,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1668,
                                  "name": "orderId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1656,
                                  "src": "29903:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "29889:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_storage",
                                  "typeString": "struct BatchExchange.Order storage ref"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29868:43:0"
                            },
                            {
                              "assignments": [
                                null,
                                1672
                              ],
                              "declarations": [
                                null,
                                {
                                  "constant": false,
                                  "id": 1672,
                                  "name": "sellAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1691,
                                  "src": "29932:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  },
                                  "typeName": {
                                    "id": 1671,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29932:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1681,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1674,
                                          "name": "latestSolution",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 76,
                                          "src": "29971:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                            "typeString": "struct BatchExchange.SolutionData storage ref"
                                          }
                                        },
                                        "id": 1675,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "trades",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 107,
                                        "src": "29971:21:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                          "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                        }
                                      },
                                      "id": 1677,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1676,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1636,
                                        "src": "29993:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "29971:24:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                        "typeString": "struct BatchExchange.TradeData storage ref"
                                      }
                                    },
                                    "id": 1678,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "volume",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 99,
                                    "src": "29971:31:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1679,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1664,
                                    "src": "30004:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  ],
                                  "id": 1673,
                                  "name": "getTradedAmounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2027,
                                  "src": "29954:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$_t_uint128_$",
                                    "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint128,uint128)"
                                  }
                                },
                                "id": 1680,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29954:56:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                                  "typeString": "tuple(uint128,uint128)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29929:81:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1683,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1648,
                                    "src": "30039:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1685,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1664,
                                          "src": "30066:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                            "typeString": "struct BatchExchange.Order memory"
                                          }
                                        },
                                        "id": 1686,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sellToken",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 84,
                                        "src": "30066:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      ],
                                      "id": 1684,
                                      "name": "tokenIdToAddressMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 907,
                                      "src": "30046:19:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                        "typeString": "function (uint16) view returns (address)"
                                      }
                                    },
                                    "id": 1687,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "30046:36:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1688,
                                    "name": "sellAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1672,
                                    "src": "30084:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1682,
                                  "name": "addBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4070,
                                  "src": "30028:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256)"
                                  }
                                },
                                "id": 1689,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30028:67:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1690,
                              "nodeType": "ExpressionStatement",
                              "src": "30028:67:0"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1639,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1636,
                            "src": "29680:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1640,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "29684:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1641,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "trades",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 107,
                              "src": "29684:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                              }
                            },
                            "id": 1642,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "29684:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29680:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1692,
                        "initializationExpression": {
                          "assignments": [
                            1636
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1636,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 1692,
                              "src": "29665:9:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1635,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "29665:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 1638,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "29677:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "29665:13:0"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1645,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "29714:3:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 1644,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1636,
                              "src": "29714:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1646,
                          "nodeType": "ExpressionStatement",
                          "src": "29714:3:0"
                        },
                        "nodeType": "ForStatement",
                        "src": "29660:450:0"
                      },
                      {
                        "body": {
                          "id": 1768,
                          "nodeType": "Block",
                          "src": "30182:595:0",
                          "statements": [
                            {
                              "assignments": [
                                1706
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1706,
                                  "name": "owner",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30200:13:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 1705,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30200:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1712,
                              "initialValue": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1707,
                                      "name": "latestSolution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 76,
                                      "src": "30216:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                        "typeString": "struct BatchExchange.SolutionData storage ref"
                                      }
                                    },
                                    "id": 1708,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "trades",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 107,
                                    "src": "30216:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                    }
                                  },
                                  "id": 1710,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1709,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1694,
                                    "src": "30238:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "30216:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                    "typeString": "struct BatchExchange.TradeData storage ref"
                                  }
                                },
                                "id": 1711,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 97,
                                "src": "30216:30:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30200:46:0"
                            },
                            {
                              "assignments": [
                                1714
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1714,
                                  "name": "orderId",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30264:14:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  },
                                  "typeName": {
                                    "id": 1713,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30264:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1720,
                              "initialValue": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1715,
                                      "name": "latestSolution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 76,
                                      "src": "30281:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                        "typeString": "struct BatchExchange.SolutionData storage ref"
                                      }
                                    },
                                    "id": 1716,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "trades",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 107,
                                    "src": "30281:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                      "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                    }
                                  },
                                  "id": 1718,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1717,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1694,
                                    "src": "30303:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "30281:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                    "typeString": "struct BatchExchange.TradeData storage ref"
                                  }
                                },
                                "id": 1719,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "orderId",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 101,
                                "src": "30281:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30264:49:0"
                            },
                            {
                              "assignments": [
                                1722
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1722,
                                  "name": "order",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30331:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 1721,
                                    "name": "Order",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 95,
                                    "src": "30331:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                                      "typeString": "struct BatchExchange.Order"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1728,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1723,
                                    "name": "orders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70,
                                    "src": "30352:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Order_$95_storage_$dyn_storage_$",
                                      "typeString": "mapping(address => struct BatchExchange.Order storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 1725,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1724,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1706,
                                    "src": "30359:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "30352:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Order_$95_storage_$dyn_storage",
                                    "typeString": "struct BatchExchange.Order storage ref[] storage ref"
                                  }
                                },
                                "id": 1727,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1726,
                                  "name": "orderId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1714,
                                  "src": "30366:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "30352:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_storage",
                                  "typeString": "struct BatchExchange.Order storage ref"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30331:43:0"
                            },
                            {
                              "assignments": [
                                1730,
                                1732
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1730,
                                  "name": "buyAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30393:17:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  },
                                  "typeName": {
                                    "id": 1729,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30393:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 1732,
                                  "name": "sellAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1768,
                                  "src": "30412:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  },
                                  "typeName": {
                                    "id": 1731,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30412:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1741,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1734,
                                          "name": "latestSolution",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 76,
                                          "src": "30451:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                            "typeString": "struct BatchExchange.SolutionData storage ref"
                                          }
                                        },
                                        "id": 1735,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "trades",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 107,
                                        "src": "30451:21:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                          "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                                        }
                                      },
                                      "id": 1737,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1736,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1694,
                                        "src": "30473:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "30451:24:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TradeData_$102_storage",
                                        "typeString": "struct BatchExchange.TradeData storage ref"
                                      }
                                    },
                                    "id": 1738,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "volume",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 99,
                                    "src": "30451:31:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1739,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1722,
                                    "src": "30484:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  ],
                                  "id": 1733,
                                  "name": "getTradedAmounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2027,
                                  "src": "30434:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint128_$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$_t_uint128_$",
                                    "typeString": "function (uint128,struct BatchExchange.Order memory) view returns (uint128,uint128)"
                                  }
                                },
                                "id": 1740,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30434:56:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                                  "typeString": "tuple(uint128,uint128)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30392:98:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1743,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1706,
                                    "src": "30529:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1744,
                                    "name": "orderId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1714,
                                    "src": "30536:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1745,
                                    "name": "sellAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1732,
                                    "src": "30545:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1742,
                                  "name": "revertRemainingOrder",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1544,
                                  "src": "30508:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint16_$_t_uint128_$returns$__$",
                                    "typeString": "function (address,uint16,uint128)"
                                  }
                                },
                                "id": 1746,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30508:48:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1747,
                              "nodeType": "ExpressionStatement",
                              "src": "30508:48:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1749,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1706,
                                    "src": "30599:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1751,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1722,
                                          "src": "30626:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                            "typeString": "struct BatchExchange.Order memory"
                                          }
                                        },
                                        "id": 1752,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "buyToken",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 82,
                                        "src": "30626:14:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      ],
                                      "id": 1750,
                                      "name": "tokenIdToAddressMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 907,
                                      "src": "30606:19:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                        "typeString": "function (uint16) view returns (address)"
                                      }
                                    },
                                    "id": 1753,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "30606:35:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1754,
                                    "name": "buyAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1730,
                                    "src": "30643:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1748,
                                  "name": "subtractBalanceUnchecked",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4128,
                                  "src": "30574:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256)"
                                  }
                                },
                                "id": 1755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30574:79:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1756,
                              "nodeType": "ExpressionStatement",
                              "src": "30574:79:0"
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1758,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1706,
                                    "src": "30691:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1759,
                                    "name": "orderId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1714,
                                    "src": "30698:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1760,
                                      "name": "order",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1722,
                                      "src": "30707:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                        "typeString": "struct BatchExchange.Order memory"
                                      }
                                    },
                                    "id": 1761,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sellToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 84,
                                    "src": "30707:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1762,
                                      "name": "order",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1722,
                                      "src": "30724:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                        "typeString": "struct BatchExchange.Order memory"
                                      }
                                    },
                                    "id": 1763,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "buyToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 82,
                                    "src": "30724:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1764,
                                    "name": "sellAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1732,
                                    "src": "30740:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1765,
                                    "name": "buyAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1730,
                                    "src": "30752:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1757,
                                  "name": "TradeReversion",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 181,
                                  "src": "30676:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint128_$_t_uint128_$returns$__$",
                                    "typeString": "function (address,uint16,uint16,uint16,uint128,uint128)"
                                  }
                                },
                                "id": 1766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30676:86:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1767,
                              "nodeType": "EmitStatement",
                              "src": "30671:91:0"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1697,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1694,
                            "src": "30143:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1698,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "30147:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1699,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "trades",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 107,
                              "src": "30147:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_TradeData_$102_storage_$dyn_storage",
                                "typeString": "struct BatchExchange.TradeData storage ref[] storage ref"
                              }
                            },
                            "id": 1700,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "30147:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30143:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1769,
                        "initializationExpression": {
                          "assignments": [
                            1694
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1694,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 1769,
                              "src": "30128:9:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1693,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "30128:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 1696,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "30140:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "30128:13:0"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1703,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "30177:3:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 1702,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1694,
                              "src": "30177:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1704,
                          "nodeType": "ExpressionStatement",
                          "src": "30177:3:0"
                        },
                        "nodeType": "ForStatement",
                        "src": "30123:654:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1771,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "30853:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1772,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "solutionSubmitter",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 112,
                              "src": "30853:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1774,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "30907:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1773,
                                "name": "tokenIdToAddressMap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 907,
                                "src": "30887:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                  "typeString": "function (uint16) view returns (address)"
                                }
                              },
                              "id": 1775,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30887:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1776,
                                "name": "latestSolution",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 76,
                                "src": "30911:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                                  "typeString": "struct BatchExchange.SolutionData storage ref"
                                }
                              },
                              "id": 1777,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "feeReward",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 114,
                              "src": "30911:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1770,
                            "name": "subtractBalanceUnchecked",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4128,
                            "src": "30828:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30828:108:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1779,
                        "nodeType": "ExpressionStatement",
                        "src": "30828:108:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev reverts all relevant contract storage relating to an overwritten auction solution.",
            "id": 1783,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "undoCurrentSolution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1631,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29594:2:0"
            },
            "returnParameters": {
              "id": 1632,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29605:0:0"
            },
            "scope": 2226,
            "src": "29566:1387:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1801,
              "nodeType": "Block",
              "src": "31244:237:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1790,
                            "name": "newObjectiveValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1785,
                            "src": "31312:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1789,
                          "name": "isObjectiveValueSufficientlyImproved",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2049,
                          "src": "31275:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 1791,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31275:55:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6577206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e",
                        "id": 1792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31344:61:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_43e1a90ed98a9f793ebd7d4e20d4e1458b3afd145d17a0f63106b93bef891844",
                          "typeString": "literal_string \"New objective doesn't sufficiently improve current solution\""
                        },
                        "value": "New objective doesn't sufficiently improve current solution"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_43e1a90ed98a9f793ebd7d4e20d4e1458b3afd145d17a0f63106b93bef891844",
                          "typeString": "literal_string \"New objective doesn't sufficiently improve current solution\""
                        }
                      ],
                      "id": 1788,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10245,
                        10246
                      ],
                      "referencedDeclaration": 10246,
                      "src": "31254:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31254:161:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1794,
                  "nodeType": "ExpressionStatement",
                  "src": "31254:161:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "31425:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1797,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "objectiveValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 116,
                      "src": "31425:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1798,
                      "name": "newObjectiveValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1785,
                      "src": "31457:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31425:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1800,
                  "nodeType": "ExpressionStatement",
                  "src": "31425:49:0"
                }
              ]
            },
            "documentation": "@dev determines if value is better than currently and updates if it is.\n@param newObjectiveValue proposed value to be updated if a great enough improvement on the current objective value",
            "id": 1802,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkAndOverrideObjectiveValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1785,
                  "name": "newObjectiveValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "31209:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1784,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31209:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31208:27:0"
            },
            "returnParameters": {
              "id": 1787,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31244:0:0"
            },
            "scope": 2226,
            "src": "31169:312:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1869,
              "nodeType": "Block",
              "src": "31924:623:0",
              "statements": [
                {
                  "assignments": [
                    1812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1812,
                      "name": "execSellTimesBuy",
                      "nodeType": "VariableDeclaration",
                      "scope": 1869,
                      "src": "32042:24:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1811,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32042:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1828,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1825,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1806,
                          "src": "32180:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1826,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceNumerator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 90,
                        "src": "32180:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1814,
                            "name": "execBuy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1804,
                            "src": "32091:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1815,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "32100:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1818,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1816,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1806,
                                "src": "32114:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 1817,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "32114:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "32100:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1819,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "32131:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1822,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1820,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1806,
                                "src": "32145:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 1821,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sellToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 84,
                              "src": "32145:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "32131:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "id": 1813,
                          "name": "getExecutedSellAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1983,
                          "src": "32069:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint128_$_t_uint128_$_t_uint128_$returns$_t_uint128_$",
                            "typeString": "function (uint128,uint128,uint128) pure returns (uint128)"
                          }
                        },
                        "id": 1823,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32069:93:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 1824,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8640,
                      "src": "32069:110:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32069:132:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32042:159:0"
                },
                {
                  "assignments": [
                    1830
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1830,
                      "name": "roundedUtility",
                      "nodeType": "VariableDeclaration",
                      "scope": 1869,
                      "src": "32212:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1829,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32212:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1845,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1840,
                          "name": "currentPrices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "32299:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                            "typeString": "mapping(uint16 => uint128)"
                          }
                        },
                        "id": 1843,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1841,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1806,
                            "src": "32313:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          },
                          "id": 1842,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buyToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 82,
                          "src": "32313:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "32299:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1835,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1806,
                                  "src": "32270:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                "id": 1836,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "priceDenominator",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 92,
                                "src": "32270:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1833,
                                "name": "execSellTimesBuy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1812,
                                "src": "32249:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1834,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "div",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8656,
                              "src": "32249:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1837,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32249:44:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1831,
                            "name": "execBuy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1804,
                            "src": "32237:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "id": 1832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8579,
                          "src": "32237:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32237:57:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8640,
                      "src": "32237:61:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32237:92:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32212:117:0"
                },
                {
                  "assignments": [
                    1847
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1847,
                      "name": "utilityError",
                      "nodeType": "VariableDeclaration",
                      "scope": 1869,
                      "src": "32339:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1846,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32339:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1863,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1860,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1806,
                          "src": "32459:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1861,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceDenominator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 92,
                        "src": "32459:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1854,
                              "name": "currentPrices",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "32411:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                "typeString": "mapping(uint16 => uint128)"
                              }
                            },
                            "id": 1857,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1855,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1806,
                                "src": "32425:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 1856,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "32425:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "32411:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1850,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1806,
                                  "src": "32383:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                "id": 1851,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "priceDenominator",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 92,
                                "src": "32383:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1848,
                                "name": "execSellTimesBuy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1812,
                                "src": "32362:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mod",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8699,
                              "src": "32362:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1852,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32362:44:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1853,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8640,
                          "src": "32362:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32362:79:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8656,
                      "src": "32362:83:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32362:129:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32339:152:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1866,
                        "name": "utilityError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1847,
                        "src": "32527:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1864,
                        "name": "roundedUtility",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1830,
                        "src": "32508:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1865,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8579,
                      "src": "32508:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32508:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1810,
                  "id": 1868,
                  "nodeType": "Return",
                  "src": "32501:39:0"
                }
              ]
            },
            "documentation": "@dev Evaluates utility of executed trade\n@param execBuy represents proportion of order executed (in terms of buy amount)\n@param order the sell order whose utility is being evaluated\n@return Utility = ((execBuy * order.sellAmt - execSell * order.buyAmt) * price.buyToken) / order.sellAmt",
            "id": 1870,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "evaluateUtility",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1807,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1804,
                  "name": "execBuy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "31856:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1803,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "31856:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1806,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "31873:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1805,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "31873:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31855:37:0"
            },
            "returnParameters": {
              "id": 1810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1809,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "31915:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1808,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31915:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31914:9:0"
            },
            "scope": 2226,
            "src": "31831:716:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1950,
              "nodeType": "Block",
              "src": "33425:611:0",
              "statements": [
                {
                  "assignments": [
                    1880
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1880,
                      "name": "leftoverSellAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 1950,
                      "src": "33435:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1879,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33435:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1894,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1884,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1872,
                            "src": "33492:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          ],
                          "id": 1883,
                          "name": "getRemainingAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2083,
                          "src": "33473:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$",
                            "typeString": "function (struct BatchExchange.Order memory) pure returns (uint128)"
                          }
                        },
                        "id": 1885,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33473:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1887,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1874,
                            "src": "33511:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1889,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1872,
                                  "src": "33537:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                "id": 1890,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sellToken",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 84,
                                "src": "33537:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "id": 1888,
                              "name": "tokenIdToAddressMap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 907,
                              "src": "33517:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint16_$returns$_t_address_$",
                                "typeString": "function (uint16) view returns (address)"
                              }
                            },
                            "id": 1891,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33517:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1886,
                          "name": "getBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "33500:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address,address) view returns (uint256)"
                          }
                        },
                        "id": 1892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33500:54:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1881,
                        "name": "Math",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8536,
                        "src": "33464:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Math_$8536_$",
                          "typeString": "type(library Math)"
                        }
                      },
                      "id": 1882,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "min",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8503,
                      "src": "33464:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33464:91:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33435:120:0"
                },
                {
                  "assignments": [
                    1896
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1896,
                      "name": "limitTermLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 1950,
                      "src": "33565:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1895,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33565:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1905,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1902,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1872,
                          "src": "33624:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1903,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceDenominator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 92,
                        "src": "33624:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1897,
                          "name": "currentPrices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "33589:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                            "typeString": "mapping(uint16 => uint128)"
                          }
                        },
                        "id": 1900,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1898,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1872,
                            "src": "33603:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          },
                          "id": 1899,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sellToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 84,
                          "src": "33603:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "33589:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 1901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8640,
                      "src": "33589:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33589:58:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33565:82:0"
                },
                {
                  "assignments": [
                    1907
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1907,
                      "name": "limitTermRight",
                      "nodeType": "VariableDeclaration",
                      "scope": 1950,
                      "src": "33657:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1906,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33657:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1924,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 1922,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1920,
                          "name": "FEE_DENOMINATOR",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56,
                          "src": "33776:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "33794:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "33776:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1917,
                            "name": "FEE_DENOMINATOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "33742:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1911,
                                  "name": "currentPrices",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 74,
                                  "src": "33707:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                                    "typeString": "mapping(uint16 => uint128)"
                                  }
                                },
                                "id": 1914,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1912,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1872,
                                    "src": "33721:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                      "typeString": "struct BatchExchange.Order memory"
                                    }
                                  },
                                  "id": 1913,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "buyToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 82,
                                  "src": "33721:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "33707:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1908,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1872,
                                  "src": "33682:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                },
                                "id": 1909,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "priceNumerator",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 90,
                                "src": "33682:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "id": 1910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8640,
                              "src": "33682:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33682:55:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8640,
                          "src": "33682:59:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33682:76:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8656,
                      "src": "33682:80:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33682:123:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33657:148:0"
                },
                {
                  "assignments": [
                    1926
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1926,
                      "name": "limitTerm",
                      "nodeType": "VariableDeclaration",
                      "scope": 1950,
                      "src": "33815:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1925,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33815:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1928,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "33835:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33815:21:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1929,
                      "name": "limitTermLeft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "33850:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1930,
                      "name": "limitTermRight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1907,
                      "src": "33866:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "33850:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1940,
                  "nodeType": "IfStatement",
                  "src": "33846:106:0",
                  "trueBody": {
                    "id": 1939,
                    "nodeType": "Block",
                    "src": "33882:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1937,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1932,
                            "name": "limitTerm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "33896:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1935,
                                "name": "limitTermRight",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1907,
                                "src": "33926:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1933,
                                "name": "limitTermLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1896,
                                "src": "33908:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8579,
                              "src": "33908:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1936,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33908:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33896:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1938,
                        "nodeType": "ExpressionStatement",
                        "src": "33896:45:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1946,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1872,
                          "src": "34006:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 1947,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "priceDenominator",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 92,
                        "src": "34006:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1943,
                            "name": "limitTerm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "33991:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1941,
                            "name": "leftoverSellAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1880,
                            "src": "33968:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8640,
                          "src": "33968:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1944,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33968:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8656,
                      "src": "33968:37:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33968:61:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1878,
                  "id": 1949,
                  "nodeType": "Return",
                  "src": "33961:68:0"
                }
              ]
            },
            "documentation": "@dev computes a measure of how much of an order was disregarded (only valid when limit price is respected)\n@param order the sell order whose disregarded utility is being evaluated\n@param user address of order's owner\n@return disregardedUtility of the order (after it has been applied)\nNote that:\n|disregardedUtility| = (limitTerm * leftoverSellAmount) / order.sellAmount\nwhere limitTerm = price.SellToken * order.sellAmt - order.buyAmt * price.buyToken / (1 - phi)\nand leftoverSellAmount = order.sellAmt - execSellAmt\nBalances and orders have all been updated so: sellAmount - execSellAmt == remainingAmount(order).\nFor correctness, we take the minimum of this with the user's token balance.",
            "id": 1951,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "evaluateDisregardedUtility",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1875,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1872,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 1951,
                  "src": "33360:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1871,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "33360:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1874,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1951,
                  "src": "33380:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1873,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "33380:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33359:34:0"
            },
            "returnParameters": {
              "id": 1878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1877,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1951,
                  "src": "33416:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1876,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33416:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33415:9:0"
            },
            "scope": 2226,
            "src": "33324:712:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1982,
              "nodeType": "Block",
              "src": "35326:325:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1977,
                            "name": "sellTokenPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1957,
                            "src": "35560:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1974,
                                "name": "FEE_DENOMINATOR",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 56,
                                "src": "35522:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    "id": 1971,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 1969,
                                      "name": "FEE_DENOMINATOR",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 56,
                                      "src": "35480:15:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 1970,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "35498:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "35480:19:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1966,
                                        "name": "buyTokenPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1955,
                                        "src": "35444:13:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 1963,
                                            "name": "executedBuyAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1953,
                                            "src": "35404:17:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            }
                                          ],
                                          "id": 1962,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "35396:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": "uint256"
                                        },
                                        "id": 1964,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "35396:26:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1965,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8640,
                                      "src": "35396:47:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1967,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "35396:62:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1968,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8656,
                                  "src": "35396:83:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1972,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "35396:104:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8640,
                              "src": "35396:125:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1975,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35396:142:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8656,
                          "src": "35396:163:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1978,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35396:179:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toUint128",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9719,
                      "src": "35396:206:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint128)"
                      }
                    },
                    "id": 1980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35396:208:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 1961,
                  "id": 1981,
                  "nodeType": "Return",
                  "src": "35377:227:0"
                }
              ]
            },
            "documentation": "@dev Evaluates executedBuy amount based on prices and executedBuyAmout (fees included)\n@param executedBuyAmount amount of buyToken executed for purchase in batch auction\n@param buyTokenPrice uniform clearing price of buyToken\n@param sellTokenPrice uniform clearing price of sellToken\n@return executedSellAmount as expressed in Equation (2)\nhttps://github.com/gnosis/dex-contracts/issues/173#issuecomment-526163117\nexecSellAmount * p[sellToken] * (1 - phi) == execBuyAmount * p[buyToken]\nwhere phi = 1/FEE_DENOMINATOR\nNote that: 1 - phi = (FEE_DENOMINATOR - 1) / FEE_DENOMINATOR\nAnd so, 1/(1-phi) = FEE_DENOMINATOR / (FEE_DENOMINATOR - 1)\nexecSellAmount = (execBuyAmount * p[buyToken]) / (p[sellToken] * (1 - phi))\n               = (execBuyAmount * buyTokenPrice / sellTokenPrice) * FEE_DENOMINATOR / (FEE_DENOMINATOR - 1)\nin order to minimize rounding errors, the order of operations is switched\n               = ((executedBuyAmount * buyTokenPrice) / (FEE_DENOMINATOR - 1)) * FEE_DENOMINATOR) / sellTokenPrice",
            "id": 1983,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getExecutedSellAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1953,
                  "name": "executedBuyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "35200:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1952,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "35200:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1955,
                  "name": "buyTokenPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "35235:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1954,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "35235:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1957,
                  "name": "sellTokenPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "35266:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1956,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "35266:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35190:104:0"
            },
            "returnParameters": {
              "id": 1961,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1960,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "35317:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1959,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "35317:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35316:9:0"
            },
            "scope": 2226,
            "src": "35160:491:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1996,
              "nodeType": "Block",
              "src": "35898:73:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 1994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1988,
                        "name": "latestSolution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "35915:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SolutionData_$117_storage",
                          "typeString": "struct BatchExchange.SolutionData storage ref"
                        }
                      },
                      "id": 1989,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "batchId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 104,
                      "src": "35915:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 1993,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1990,
                          "name": "getCurrentBatchId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3888,
                          "src": "35941:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                            "typeString": "function () view returns (uint32)"
                          }
                        },
                        "id": 1991,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35941:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1992,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "35963:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "35941:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "35915:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1987,
                  "id": 1995,
                  "nodeType": "Return",
                  "src": "35908:56:0"
                }
              ]
            },
            "documentation": "@dev used to determine if solution if first provided in current batch\n@return true if `latestSolution` is storing a solution for current batch, else false",
            "id": 1997,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentBatchHasSolution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1984,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35867:2:0"
            },
            "returnParameters": {
              "id": 1987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1986,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1997,
                  "src": "35892:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1985,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "35892:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35891:6:0"
            },
            "scope": 2226,
            "src": "35835:136:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2026,
              "nodeType": "Block",
              "src": "36380:251:0",
              "statements": [
                {
                  "assignments": [
                    2009
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2009,
                      "name": "executedSellAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 2026,
                      "src": "36390:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 2008,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "36390:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2021,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2011,
                        "name": "executedBuyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1999,
                        "src": "36454:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2012,
                          "name": "currentPrices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "36485:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                            "typeString": "mapping(uint16 => uint128)"
                          }
                        },
                        "id": 2015,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2013,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2001,
                            "src": "36499:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          },
                          "id": 2014,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buyToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 82,
                          "src": "36499:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "36485:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2016,
                          "name": "currentPrices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "36528:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_uint128_$",
                            "typeString": "mapping(uint16 => uint128)"
                          }
                        },
                        "id": 2019,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2017,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2001,
                            "src": "36542:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                              "typeString": "struct BatchExchange.Order memory"
                            }
                          },
                          "id": 2018,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sellToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 84,
                          "src": "36542:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "36528:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 2010,
                      "name": "getExecutedSellAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1983,
                      "src": "36419:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint128_$_t_uint128_$_t_uint128_$returns$_t_uint128_$",
                        "typeString": "function (uint128,uint128,uint128) pure returns (uint128)"
                      }
                    },
                    "id": 2020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36419:149:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36390:178:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 2022,
                        "name": "executedBuyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1999,
                        "src": "36586:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2023,
                        "name": "executedSellAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2009,
                        "src": "36605:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "id": 2024,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "36585:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                      "typeString": "tuple(uint128,uint128)"
                    }
                  },
                  "functionReturnParameters": 2007,
                  "id": 2025,
                  "nodeType": "Return",
                  "src": "36578:46:0"
                }
              ]
            },
            "documentation": "@dev Compute trade execution based on executedBuyAmount and relevant token prices\n@param executedBuyAmount executed buy amount\n@param order contains relevant buy-sell token information\n@return (executedBuyAmount, executedSellAmount)",
            "id": 2027,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTradedAmounts",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1999,
                  "name": "executedBuyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2027,
                  "src": "36293:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1998,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "36293:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2001,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 2027,
                  "src": "36320:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2000,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "36320:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36292:47:0"
            },
            "returnParameters": {
              "id": 2007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2004,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2027,
                  "src": "36362:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 2003,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "36362:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2006,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2027,
                  "src": "36371:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 2005,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "36371:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36361:18:0"
            },
            "scope": 2226,
            "src": "36267:364:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2048,
              "nodeType": "Block",
              "src": "37013:131:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2036,
                              "name": "IMPROVEMENT_DENOMINATOR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53,
                              "src": "37050:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2034,
                              "name": "objectiveValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "37031:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2035,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8640,
                            "src": "37031:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2037,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37031:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 2041,
                                "name": "IMPROVEMENT_DENOMINATOR",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 53,
                                "src": "37108:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 2042,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "37134:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "37108:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2038,
                                "name": "getCurrentObjectiveValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1264,
                                "src": "37077:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 2039,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "37077:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8640,
                            "src": "37077:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37077:59:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "37031:105:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 2046,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "37030:107:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2033,
                  "id": 2047,
                  "nodeType": "Return",
                  "src": "37023:114:0"
                }
              ]
            },
            "documentation": "@dev Checks that the proposed objective value is a significant enough improvement on the latest one\n@param objectiveValue the proposed objective value to check\n@return true if the objectiveValue is a significant enough improvement, false otherwise",
            "id": 2049,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isObjectiveValueSufficientlyImproved",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2029,
                  "name": "objectiveValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 2049,
                  "src": "36961:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2028,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36961:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36960:24:0"
            },
            "returnParameters": {
              "id": 2033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2032,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2049,
                  "src": "37007:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2031,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "37007:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37006:6:0"
            },
            "scope": 2226,
            "src": "36915:229:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2068,
              "nodeType": "Block",
              "src": "37522:81:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 2061,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2058,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2051,
                          "src": "37539:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 2059,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "validFrom",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 86,
                        "src": "37539:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2060,
                        "name": "batchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2053,
                        "src": "37558:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "37539:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 2065,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2062,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2051,
                          "src": "37569:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                            "typeString": "struct BatchExchange.Order memory"
                          }
                        },
                        "id": 2063,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "validUntil",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 88,
                        "src": "37569:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2064,
                        "name": "batchId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2053,
                        "src": "37589:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "37569:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "37539:57:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2057,
                  "id": 2067,
                  "nodeType": "Return",
                  "src": "37532:64:0"
                }
              ]
            },
            "documentation": "@dev used to determine if an order is valid for specific auction/batch\n@param order object whose validity is in question\n@param batchId auction index of validity\n@return true if order is valid in auction batchId else false",
            "id": 2069,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkOrderValidity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2051,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 2069,
                  "src": "37458:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2050,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "37458:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2053,
                  "name": "batchId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2069,
                  "src": "37478:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 2052,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "37478:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37457:36:0"
            },
            "returnParameters": {
              "id": 2057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2056,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2069,
                  "src": "37516:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2055,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "37516:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37515:6:0"
            },
            "scope": 2226,
            "src": "37430:173:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2082,
              "nodeType": "Block",
              "src": "37881:65:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    },
                    "id": 2080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2076,
                        "name": "order",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2071,
                        "src": "37898:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                          "typeString": "struct BatchExchange.Order memory"
                        }
                      },
                      "id": 2077,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "priceDenominator",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 92,
                      "src": "37898:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2078,
                        "name": "order",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2071,
                        "src": "37923:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                          "typeString": "struct BatchExchange.Order memory"
                        }
                      },
                      "id": 2079,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "usedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 94,
                      "src": "37923:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "37898:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 2075,
                  "id": 2081,
                  "nodeType": "Return",
                  "src": "37891:48:0"
                }
              ]
            },
            "documentation": "@dev computes the remaining sell amount for a given order\n@param order the order for which remaining amount should be calculated\n@return the remaining sell amount",
            "id": 2083,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRemainingAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2071,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 2083,
                  "src": "37830:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2070,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "37830:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37829:20:0"
            },
            "returnParameters": {
              "id": 2075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2074,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2083,
                  "src": "37872:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 2073,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "37872:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37871:9:0"
            },
            "scope": 2226,
            "src": "37802:144:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2191,
              "nodeType": "Block",
              "src": "38428:648:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2094,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38438:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2097,
                          "name": "user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "38465:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2095,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10229,
                          "src": "38448:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 2096,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "encodePacked",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "38448:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                          "typeString": "function () pure returns (bytes memory)"
                        }
                      },
                      "id": 2098,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38448:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38438:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2100,
                  "nodeType": "ExpressionStatement",
                  "src": "38438:32:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2101,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38480:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2106,
                              "name": "sellTokenBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2087,
                              "src": "38522:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2104,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38505:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2105,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38505:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38505:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2102,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38490:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2103,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38490:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38490:50:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38480:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2110,
                  "nodeType": "ExpressionStatement",
                  "src": "38480:60:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2111,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38550:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2116,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38592:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2117,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buyToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 82,
                              "src": "38592:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2114,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38575:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2115,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38575:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38575:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2112,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38560:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2113,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38560:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2119,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38560:48:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38550:58:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2121,
                  "nodeType": "ExpressionStatement",
                  "src": "38550:58:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2122,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38618:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2127,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38660:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2128,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sellToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 84,
                              "src": "38660:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2125,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38643:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2126,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38643:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2129,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38643:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2123,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38628:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2124,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38628:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2130,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38628:49:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38618:59:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2132,
                  "nodeType": "ExpressionStatement",
                  "src": "38618:59:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2133,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38687:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2138,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38729:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2139,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "validFrom",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 86,
                              "src": "38729:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2136,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38712:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2137,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38712:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2140,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38712:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2134,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38697:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38697:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38697:49:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38687:59:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2143,
                  "nodeType": "ExpressionStatement",
                  "src": "38687:59:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2144,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38756:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2149,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38798:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2150,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "validUntil",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 88,
                              "src": "38798:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2147,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38781:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38781:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38781:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2145,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38766:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38766:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2152,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38766:50:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38756:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2154,
                  "nodeType": "ExpressionStatement",
                  "src": "38756:60:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2155,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38826:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2160,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38868:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2161,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "priceNumerator",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 90,
                              "src": "38868:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2158,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38851:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2159,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38851:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38851:38:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2156,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38836:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38836:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2163,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38836:54:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38826:64:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2165,
                  "nodeType": "ExpressionStatement",
                  "src": "38826:64:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2166,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38900:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2171,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2089,
                                "src": "38942:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                  "typeString": "struct BatchExchange.Order memory"
                                }
                              },
                              "id": 2172,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "priceDenominator",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 92,
                              "src": "38942:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2169,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "38925:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "38925:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38925:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2167,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38910:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38910:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2174,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38910:56:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38900:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2176,
                  "nodeType": "ExpressionStatement",
                  "src": "38900:66:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2177,
                      "name": "element",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "38976:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2183,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2089,
                                  "src": "39037:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                                    "typeString": "struct BatchExchange.Order memory"
                                  }
                                ],
                                "id": 2182,
                                "name": "getRemainingAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2083,
                                "src": "39018:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$95_memory_ptr_$returns$_t_uint128_$",
                                  "typeString": "function (struct BatchExchange.Order memory) pure returns (uint128)"
                                }
                              },
                              "id": 2184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39018:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2180,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10229,
                              "src": "39001:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 2181,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "39001:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 2185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39001:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2178,
                          "name": "element",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2092,
                          "src": "38986:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "concat",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9822,
                        "src": "38986:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) pure returns (bytes memory)"
                        }
                      },
                      "id": 2186,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38986:59:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "38976:69:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2188,
                  "nodeType": "ExpressionStatement",
                  "src": "38976:69:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2189,
                    "name": "element",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2092,
                    "src": "39062:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 2093,
                  "id": 2190,
                  "nodeType": "Return",
                  "src": "39055:14:0"
                }
              ]
            },
            "documentation": "@dev called only by getEncodedOrders and used to pack auction info into bytes\n@param user list of tokenIds\n@param sellTokenBalance user's account balance of sell token\n@param order a sell order\n@return byte encoded, packed, concatenation of relevant order information",
            "id": 2192,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encodeAuctionElement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2085,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 2192,
                  "src": "38303:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2084,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "38303:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2087,
                  "name": "sellTokenBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 2192,
                  "src": "38325:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2086,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38325:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2089,
                  "name": "order",
                  "nodeType": "VariableDeclaration",
                  "scope": 2192,
                  "src": "38359:18:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Order_$95_memory_ptr",
                    "typeString": "struct BatchExchange.Order"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2088,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "38359:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$95_storage_ptr",
                      "typeString": "struct BatchExchange.Order"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "38293:90:0"
            },
            "returnParameters": {
              "id": 2093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2092,
                  "name": "element",
                  "nodeType": "VariableDeclaration",
                  "scope": 2192,
                  "src": "38406:20:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2091,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "38406:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "38405:22:0"
            },
            "scope": 2226,
            "src": "38264:812:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2224,
              "nodeType": "Block",
              "src": "39328:184:0",
              "statements": [
                {
                  "body": {
                    "id": 2220,
                    "nodeType": "Block",
                    "src": "39383:102:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 2215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2211,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2195,
                              "src": "39401:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                "typeString": "uint128[] memory"
                              }
                            },
                            "id": 2213,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2212,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2201,
                              "src": "39409:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "39401:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2214,
                            "name": "AMOUNT_MINIMUM",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44,
                            "src": "39414:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "39401:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2219,
                        "nodeType": "IfStatement",
                        "src": "39397:78:0",
                        "trueBody": {
                          "id": 2218,
                          "nodeType": "Block",
                          "src": "39430:45:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 2216,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "39455:5:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 2199,
                              "id": 2217,
                              "nodeType": "Return",
                              "src": "39448:12:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2204,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2201,
                      "src": "39358:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2205,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2195,
                        "src": "39362:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[] memory"
                        }
                      },
                      "id": 2206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "39362:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "39358:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2221,
                  "initializationExpression": {
                    "assignments": [
                      2201
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2201,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2221,
                        "src": "39343:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2200,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39343:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 2203,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "39355:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "39343:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2209,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "39378:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2208,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2201,
                        "src": "39378:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2210,
                    "nodeType": "ExpressionStatement",
                    "src": "39378:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "39338:147:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "39501:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2199,
                  "id": 2223,
                  "nodeType": "Return",
                  "src": "39494:11:0"
                }
              ]
            },
            "documentation": "@dev determines if value is better than currently and updates if it is.\n@param amounts array of values to be verified with AMOUNT_MINIMUM",
            "id": 2225,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyAmountThreshold",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2196,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2195,
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 2225,
                  "src": "39274:24:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2193,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "39274:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 2194,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "39274:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39273:26:0"
            },
            "returnParameters": {
              "id": 2199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2198,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2225,
                  "src": "39322:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2197,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "39322:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39321:6:0"
            },
            "scope": 2226,
            "src": "39243:269:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 2227,
        "src": "753:38761:0"
      }
    ],
    "src": "0:39515:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.10+commit.5a6ea5b1.Emscripten.clang"
  },
  "networks": {
    "1": {
      "links": {
        "IdToAddressBiMap": "0xED4d05496C71e71cC2A8726af1242C22108d1761",
        "IterableAppendOnlySet": "0xCDDB32b6Bb2808D5B5115dAab207479cE98d2636"
      },
      "address": "0x6F400810b62df8E13fded51bE75fF5393eaa841F",
      "transactionHash": "0xe74e8e965afc67f96a38caee794f008be33a7fe7ea96b9baad7b2963250ac36a"
    },
    "4": {
      "links": {
        "IdToAddressBiMap": "0x5c4C6bf91240A5fdBfB9a1BEd8d43227046e2feA",
        "IterableAppendOnlySet": "0x0D47D0548FDAD66B06E81a826EED8c687aCddBCB"
      },
      "address": "0xC576eA7bd102F7E476368a5E98FA455d1Ea34dE2",
      "transactionHash": "0xc5bf4f48747093a79b623c2a2392ccbdb73a3d788e7d1f0f53f640ea18496d90"
    },
    "100": {
      "links": {
        "IdToAddressBiMap": "0x048E53A455a058462eA58442E1D94Fbc955495cB",
        "IterableAppendOnlySet": "0x57E6B987c2ccd421859A244dd22a0D5a62D88f91"
      },
      "address": "0x25B06305CC4ec6AfCF3E7c0b673da1EF8ae26313",
      "transactionHash": "0xd5e7da686ace1ae7f1917ad54b8610ee936bdc900e56b495739795fba3d5e7c1"
    }
  },
  "schemaVersion": "3.3.1",
  "updatedAt": "2020-11-19T13:56:16.611Z",
  "networkType": "ethereum",
  "devdoc": {
    "author": "@gnosis/dfusion-team <https://github.com/orgs/gnosis/teams/dfusion-team/members>",
    "methods": {
      "addToken(address)": {
        "details": "Used to list a new token on the contract: Hence, making it available for exchange in an auction.",
        "params": {
          "token": "ERC20 token to be listed.     * Requirements: - `maxTokens` has not already been reached - `token` has not already been added"
        }
      },
      "cancelOrders(uint16[])": {
        "details": "a user facing function used to cancel orders. If the order is valid for the batch that is currently being solved, it sets order expiry to that batchId. Otherwise it removes it from storage. Can be called multiple times (e.g. to eventually free storage once order is expired).",
        "params": {
          "orderIds": "referencing the indices of user's orders to be cancelled     * Emits an {OrderCancellation} or {OrderDeletion} with sender's address and orderId"
        }
      },
      "constructor": {
        "details": "Constructor determines exchange parameters",
        "params": {
          "_feeToken": "Address of ERC20 fee token.",
          "maxTokens": "The maximum number of tokens that can be listed."
        }
      },
      "deposit(address,uint256)": {
        "details": "credits user with deposit amount on next epoch (given by getCurrentBatchId)",
        "params": {
          "amount": "number of token(s) to be credited to user's account     * Emits an {Deposit} event with relevent deposit information.     * Requirements: - token transfer to contract is successfull",
          "token": "address of token to be deposited"
        }
      },
      "getBalance(address,address)": {
        "details": "fetches and returns user's balance",
        "params": {
          "token": "address of ERC20 token return Current `token` balance of `user`'s account",
          "user": "address of user"
        }
      },
      "getCurrentBatchId()": {
        "details": "getter function to determine current auction id. return current batchId"
      },
      "getCurrentObjectiveValue()": {
        "details": "gets the objective value of currently winning solution.",
        "return": "objective function evaluation of the currently winning solution, or zero if no solution proposed."
      },
      "getEncodedOrders()": {
        "details": "View returning all byte-encoded sell orders",
        "return": "encoded bytes representing all orders ordered by (user, index)"
      },
      "getEncodedUserOrders(address)": {
        "details": "View returning all byte-encoded sell orders for specified user",
        "params": {
          "user": "address of user whose orders are being queried"
        },
        "return": "encoded bytes representing all orders"
      },
      "getEncodedUserOrdersPaginated(address,uint16,uint16)": {
        "details": "View returning all byte-encoded sell orders for specified user",
        "params": {
          "offset": "uint determining the starting orderIndex",
          "pageSize": "uint determining the count of elements to be viewed",
          "user": "address of user whose orders are being queried"
        },
        "return": "encoded bytes representing all orders"
      },
      "getEncodedUsersPaginated(address,uint16,uint16)": {
        "details": "View returning byte-encoded sell orders in paginated form",
        "params": {
          "pageSize": "uint determining the count of orders to be returned per page",
          "previousPageUser": "address of last user received in the previous page (address(0) for first page)",
          "previousPageUserOffset": "the number of orders received for the last user on the previous page (0 for first page)."
        },
        "return": "encoded bytes representing a page of orders ordered by (user, index)"
      },
      "getPendingDeposit(address,address)": {
        "details": "getter function used to display pending deposit",
        "params": {
          "token": "address of ERC20 token return amount and batchId of deposit's transfer if any (else 0)",
          "user": "address of user"
        }
      },
      "getPendingWithdraw(address,address)": {
        "details": "getter function used to display pending withdraw",
        "params": {
          "token": "address of ERC20 token return amount and batchId when withdraw was requested if any (else 0)",
          "user": "address of user"
        }
      },
      "getSecondsRemainingInBatch()": {
        "details": "used to determine how much time is left in a batch return seconds remaining in current batch"
      },
      "getUsersPaginated(address,uint16)": {
        "details": "View returning all byte-encoded users in paginated form",
        "params": {
          "pageSize": "uint determining the count of users to be returned per page",
          "previousPageUser": "address of last user received in last pages (address(0) for first page)"
        },
        "return": "encoded packed bytes of user addresses"
      },
      "hasToken(address)": {
        "details": "View returning a bool attesting whether token was already added",
        "params": {
          "addr": "address of the token to be checked"
        },
        "return": "bool attesting whether token was already added"
      },
      "hasValidWithdrawRequest(address,address)": {
        "details": "Used to determine if user has a valid pending withdraw request of specific token",
        "params": {
          "token": "address of ERC20 token return true if `user` has valid withdraw request for `token`, otherwise false",
          "user": "address of user"
        }
      },
      "placeOrder(uint16,uint16,uint32,uint128,uint128)": {
        "details": "A user facing function used to place limit sell orders in auction with expiry defined by batchId",
        "params": {
          "buyAmount": "relative minimum amount of requested buy amount",
          "buyToken": "id of token to be bought",
          "sellAmount": "maximum amount of sell token to be exchanged",
          "sellToken": "id of token to be sold",
          "validUntil": "batchId representing order's expiry"
        },
        "return": "orderId defined as the index in user's order array     * Emits an {OrderPlacement} event with all relevant order details."
      },
      "placeValidFromOrders(uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])": {
        "details": "A user facing function used to place limit sell orders in auction with expiry defined by batchId Note that parameters are passed as arrays and the indices correspond to each order.",
        "params": {
          "buyAmounts": "relative minimum amount of requested buy amounts",
          "buyTokens": "ids of tokens to be bought",
          "sellAmounts": "maximum amounts of sell token to be exchanged",
          "sellTokens": "ids of tokens to be sold",
          "validFroms": "batchIds representing order's validity start time",
          "validUntils": "batchIds representing order's expiry"
        },
        "return": "`orderIds` an array of indices in which `msg.sender`'s orders are included     * Emits an {OrderPlacement} event with all relevant order details."
      },
      "replaceOrders(uint16[],uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])": {
        "details": "A user facing wrapper to cancel and place new orders in the same transaction.",
        "params": {
          "buyAmounts": "relative minimum amount of requested buy amounts in new orders",
          "buyTokens": "ids of tokens to be bought in new orders",
          "cancellations": "indices of orders to be cancelled",
          "sellAmounts": "maximum amounts of sell token to be exchanged in new orders",
          "sellTokens": "ids of tokens to be sold in new orders",
          "validFroms": "batchIds representing order's validity start time in new orders",
          "validUntils": "batchIds represnnting order's expiry in new orders"
        },
        "return": "an array of indices in which `msg.sender`'s new orders are included     * Emits {OrderCancellation} events for all cancelled orders and {OrderPlacement} events with relevant new order details."
      },
      "requestFutureWithdraw(address,uint256,uint32)": {
        "details": "Signals and initiates user's intent to withdraw.",
        "params": {
          "amount": "number of token(s) to be withdrawn",
          "batchId": "state index at which request is to be made.     * Emits an {WithdrawRequest} event with relevent request information.",
          "token": "address of token to be withdrawn"
        }
      },
      "requestWithdraw(address,uint256)": {
        "details": "Signals and initiates user's intent to withdraw.",
        "params": {
          "amount": "number of token(s) to be withdrawn     * Emits an {WithdrawRequest} event with relevent request information.",
          "token": "address of token to be withdrawn"
        }
      },
      "submitSolution(uint32,uint256,address[],uint16[],uint128[],uint128[],uint16[])": {
        "details": "a solver facing function called for auction settlement",
        "params": {
          "batchId": "index of auction solution is referring to",
          "buyVolumes": "executed buy amounts for each order identified by index of owner-orderId arrays",
          "orderIds": "array of order indices used in parallel with owners to identify touched order",
          "owners": "array of addresses corresponding to touched orders",
          "prices": "list of prices for touched tokens indexed by next parameter",
          "tokenIdsForPrice": "price[i] is the price for the token with tokenID tokenIdsForPrice[i]"
        },
        "return": "the computed objective value of the solution     * Requirements: - Solutions for this `batchId` are currently being accepted. - Claimed objetive value is a great enough improvement on the current winning solution - Fee Token price is non-zero - `tokenIdsForPrice` is sorted. - Number of touched orders does not exceed `MAX_TOUCHED_ORDERS`. - Each touched order is valid at current `batchId`. - Each touched order's `executedSellAmount` does not exceed its remaining amount. - Limit Price of each touched order is respected. - Solution's objective evaluation must be positive.     * Sub Requirements: Those nested within other functions - checkAndOverrideObjectiveValue; Objetive value is a great enough improvement on the current winning solution - checkTokenConservation; for all, non-fee, tokens total amount sold == total amount bought"
      },
      "tokenAddressToIdMap(address)": {
        "details": "View returning ID of listed tokens",
        "params": {
          "addr": "address of listed token."
        },
        "return": "tokenId as stored within the contract."
      },
      "tokenIdToAddressMap(uint16)": {
        "details": "View returning address of listed token by ID",
        "params": {
          "id": "tokenId as stored, via BiMap, within the contract."
        },
        "return": "address of (listed) token"
      },
      "withdraw(address,address)": {
        "details": "Claims pending withdraw - can be called on behalf of others",
        "params": {
          "token": "address of token to be withdrawn",
          "user": "address of user who withdraw is being claimed.     * Emits an {Withdraw} event stating that `user` withdrew `amount` of `token`     * Requirements: - withdraw was requested in previous epoch - token was received from exchange in current auction batch"
        }
      }
    },
    "title": "BatchExchange - A decentralized exchange for any ERC20 token as a multi-token batch auction with uniform clearing prices. For more information visit: <https://github.com/gnosis/dex-contracts>"
  },
  "userdoc": {
    "methods": {}
  }
}
