{
  "contractName": "KErc20",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "invokerAddress",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "decimals",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "redeemer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOfUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "invokerAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "kTokenAmountToTokenAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "lock",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "redeemUnderlying",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "invokerAddress",
          "type": "address"
        }
      ],
      "name": "setInvokerAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "ceiling",
          "type": "bool"
        }
      ],
      "name": "tokenAmountToKTokenAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferUnderlying",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unlock",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isKEther",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalReserve",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"invokerAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"invokerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isKEther\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"kTokenAmountToTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"lock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlying\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"invokerAddress\",\"type\":\"address\"}],\"name\":\"setInvokerAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"ceiling\",\"type\":\"bool\"}],\"name\":\"tokenAmountToKTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlying\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}.     * Requirements:     * - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`).     * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei.     * NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller.     * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.     * Emits an {Approval} event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller.     * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.     * Emits an {Approval} event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address.\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}.     * Requirements:     * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/kbrizzle/code/kollateral/protocol/contracts/KErc20.sol\":\"KErc20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/kbrizzle/code/kollateral/protocol/contracts/ExtendedMath.sol\":{\"keccak256\":\"0x9b4a67b1242134b64f557613259bfb51268d488cbc7b27cb2bc72c2f21f2b71f\",\"urls\":[\"bzz-raw://47bc3f04cddcbbe7a0373a074d50bbc1720ef7d73266532aab07474ea426ab43\",\"dweb:/ipfs/QmdPdivc8yXbmvDL1nG8xXHJF7qcfx6JqQoCFBv1ohDmdP\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/KErc20.sol\":{\"keccak256\":\"0x8861f5525b83c0b01d8bddfac5187a04ca7469ab8af454291b872ee4e95bd098\",\"urls\":[\"bzz-raw://dc9f7ee2eefb7a915f083aad3e7cca65b4d8d62f74398462b904dc56accef080\",\"dweb:/ipfs/Qmd8Q2xLBhvJEwY2jJ3imw3CjMMtc84YiY5wrVFzFroVgA\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/Ktoken.sol\":{\"keccak256\":\"0x748a3edca97018638a9ed18f3484977c124517f2261af8a7be3e1b8ee2fbe8a8\",\"urls\":[\"bzz-raw://9b5d42beda89cdf788e79cec733d96c4c4eaf896694948ee2c0fa5bb46d3972c\",\"dweb:/ipfs/Qmc9sGpHe3CTiEG9gzrdHtCgsuHBfAToTBGYmL8a4JL3J1\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/interfaces/IKToken.sol\":{\"keccak256\":\"0x5b03d279a41856eef739da4ee50155425bbd95d99d80e4b910ec5abb91a99e40\",\"urls\":[\"bzz-raw://4ef7259b5604ef20e62b2503bc34d4052f99b85a18a80b072b8883bb7f9559de\",\"dweb:/ipfs/QmUsVQH9M3FoB4rpJGZJpZrbk2kcDFyRg5E5WfAKqHYkok\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x90a3995645af7562d84b9d69363ffa5ae7217714ab61e951bf7bc450f40e4061\",\"urls\":[\"bzz-raw://216ef9d6b614db4eb46970b4e84903f2534a45572dd30a79f0041f1a5830f436\",\"dweb:/ipfs/QmNPrJ4MWKUAWzKXpUqeyKRUfosaoANZAqXgvepdrCwZAG\"]},\"@openzeppelin/contracts/access/Roles.sol\":{\"keccak256\":\"0xb002c378d7b82a101bd659c341518953ca0919d342c0a400196982c0e7e7bcdb\",\"urls\":[\"bzz-raw://00a788c4631466c220b385bdd100c571d24b2deccd657615cfbcef6cadf669a4\",\"dweb:/ipfs/QmTEwDbjJNxmMNCDMqtuou3dyM8Wtp8Q9NFvn7SAVM7Jf3\"]},\"@openzeppelin/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0xd1b5c934bab36d753c22987ad98c7614cb50ebf641371a83c96f8138619d7c30\",\"urls\":[\"bzz-raw://69c4bb822caae3d1bfd38e81f03b6d618d4d83cbb8e9f8236d28e1c4fe1d0d81\",\"dweb:/ipfs/QmWamstbFhdySmocF2TSKYVLLZF24JG4aXMvHiRdWKv3RA\"]},\"@openzeppelin/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xd3e5a49edfb74654d122962cc60b917d1c60461e669a7262fd7aba201fac1260\",\"urls\":[\"bzz-raw://0307a3cae4df037aee16fb0b0d94849cb4d9b20d7d7182c185f3efac6d2caec0\",\"dweb:/ipfs/QmezTANBfrJmCvxfmfyfcfFGtbcUEUtoJCjfxKnAePiNoE\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0xecd8ab29d9a5771c3964d0cd1788c4a5098a0081b20fb275da850a22b1c59806\",\"urls\":[\"bzz-raw://696a75bc2c55407ce8251ccc7d19ecb1b7b2be1796a160a6524312babcc7e3d4\",\"dweb:/ipfs/QmQViKEp3y99h9uhRssE29TmjBKRnFMaoz3eJZ4eggggg2\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x65a4078c03875c25413a068ce9cfdd7e68a90f8786612d1189c89341e6e3b802\",\"urls\":[\"bzz-raw://45c0d95495b944fbb1aa09d900b0ab530903a432125ab8fddfa05064a7988991\",\"dweb:/ipfs/Qma2VeknkKA1THeubGzshWFk44BktXkXP1UKp9Un2uDSsu\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0x4a3a810b7ebe742e897e1fd428b3eeed2196d3acea58eaf9c566ed10d545d2ed\",\"urls\":[\"bzz-raw://28d03f328e19e4099d5013de0649afaeaabac1a614e130767ab1cb4aca9775b6\",\"dweb:/ipfs/Qmb9iW7yNuYehB2NfhRMs9TakqbLVQhBhmGMkaDZ5g1Eb4\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xe86fdc15fbc379ecf14d6aa4f51b87c0be8476e114e23c171b790a6717230655\",\"urls\":[\"bzz-raw://81905037f66d37ed211a4e3430af74f36e18b3a5d5b688e6d7d5ee199824a41a\",\"dweb:/ipfs/QmTcpgNKqLVRbcgNSUHazAbVf2bz5uh5mPkAijGeYW7Sqb\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620035d5380380620035d5833981810160405260a08110156200003757600080fd5b810190808051906020019092919080519060200190929190805160405193929190846401000000008211156200006c57600080fd5b838201915060208201858111156200008357600080fd5b8251866001820283011164010000000082111715620000a157600080fd5b8083526020830192505050908051906020019080838360005b83811015620000d7578082015181840152602081019050620000ba565b50505050905090810190601f168015620001055780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200012957600080fd5b838201915060208201858111156200014057600080fd5b82518660018202830111640100000000821117156200015e57600080fd5b8083526020830192505050908051906020019080838360005b838110156200019457808201518184015260208101905062000177565b50505050905090810190601f168015620001c25780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505084848484848282828260039080519060200190620001f6929190620003a5565b5081600490805190602001906200020f929190620003a5565b5080600560006101000a81548160ff021916908360ff1602179055505050506001600681905550620002466200039d60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a384600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a819055505050505050505050505062000454565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003e857805160ff191683800117855562000419565b8280016001018555821562000419579182015b8281111562000418578251825591602001919060010190620003fb565b5b5090506200042891906200042c565b5090565b6200045191905b808211156200044d57600081600090555060010162000433565b5090565b90565b61317180620004646000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063a9059cbb116100a2578063e4cd4f2011610071578063e4cd4f201461095c578063f10c9667146109a0578063f2fde38b146109c2578063f83d08ba14610a06576101cf565b8063a9059cbb146107ee578063c740b91814610854578063db006a751461089e578063dd62ed3e146108e4576101cf565b80639d76ea58116100de5780639d76ea58146106ee578063a0712d6814610738578063a457c2d71461077e578063a69df4b5146107e4576101cf565b80638da5cb5b146105ff5780638f32d59b1461064957806395d89b411461066b576101cf565b806339509351116101715780634c68df671161014b5780634c68df671461053957806370a0823114610557578063715018a6146105af578063852a12e3146105b9576101cf565b806339509351146104395780633af9e6691461049f5780633c34c1f1146104f7576101cf565b806323b872dd116101ad57806323b872dd146102db5780632bee95d214610361578063313ce567146103af578063336d2692146103d3576101cf565b806306fdde03146101d4578063095ea7b31461025757806318160ddd146102bd575b600080fd5b6101dc610a10565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a36004803603604081101561026d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ab2565b604051808215151515815260200191505060405180910390f35b6102c5610ad0565b6040518082815260200191505060405180910390f35b610347600480360360608110156102f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ada565b604051808215151515815260200191505060405180910390f35b6103996004803603604081101561037757600080fd5b8101908080359060200190929190803515159060200190929190505050610b78565b6040518082815260200191505060405180910390f35b6103b7610b8e565b604051808260ff1660ff16815260200191505060405180910390f35b61041f600480360360408110156103e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ba5565b604051808215151515815260200191505060405180910390f35b6104856004803603604081101561044f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e12565b604051808215151515815260200191505060405180910390f35b6104e1600480360360208110156104b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ec5565b6040518082815260200191505060405180910390f35b6105236004803603602081101561050d57600080fd5b8101908080359060200190929190505050610edf565b6040518082815260200191505060405180910390f35b610541610f34565b6040518082815260200191505060405180910390f35b6105996004803603602081101561056d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611015565b6040518082815260200191505060405180910390f35b6105b761105d565b005b6105e5600480360360208110156105cf57600080fd5b8101908080359060200190929190505050611198565b604051808215151515815260200191505060405180910390f35b610607611233565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61065161125d565b604051808215151515815260200191505060405180910390f35b6106736112bc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106b3578082015181840152602081019050610698565b50505050905090810190601f1680156106e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106f661135e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107646004803603602081101561074e57600080fd5b8101908080359060200190929190505050611388565b604051808215151515815260200191505060405180910390f35b6107ca6004803603604081101561079457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061150c565b604051808215151515815260200191505060405180910390f35b6107ec6115d9565b005b61083a6004803603604081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ad565b604051808215151515815260200191505060405180910390f35b61085c6117cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108ca600480360360208110156108b457600080fd5b81019080803590602001909291905050506117f5565b604051808215151515815260200191505060405180910390f35b610946600480360360408110156108fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061188c565b6040518082815260200191505060405180910390f35b61099e6004803603602081101561097257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611913565b005b6109a86119d1565b604051808215151515815260200191505060405180910390f35b610a04600480360360208110156109d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d9565b005b610a0e611a5f565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610aa85780601f10610a7d57610100808354040283529160200191610aa8565b820191906000526020600020905b815481529060010190602001808311610a8b57829003601f168201915b5050505050905090565b6000610ac6610abf611c31565b8484611c39565b6001905092915050565b6000600254905090565b6000610ae7848484611e30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b1985610b14611c31565b61188c565b14610b6d57610b6c84610b2a611c31565b610b678560405180606001604052806028815260200161306560289139610b588a610b53611c31565b61188c565b6120e69092919063ffffffff16565b611c39565b5b600190509392505050565b6000610b86838360006121a6565b905092915050565b6000600560009054906101000a900460ff16905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015610ca45750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c6757600080fd5b505afa158015610c7b573d6000803e3d6000fd5b505050506040513d6020811015610c9157600080fd5b8101908080519060200190929190505050155b610cf9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612ff0602e913960400191505060405180910390fd5b43600a5410610d70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4b546f6b656e3a206c6f636b656400000000000000000000000000000000000081525060200191505060405180910390fd5b600160066000828254019250508190555060006006549050610d928484612210565b91506006548114610e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5092915050565b6000610ebb610e1f611c31565b84610eb68560016000610e30611c31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122fe90919063ffffffff16565b611c39565b6001905092915050565b6000610ed8610ed383611015565b610edf565b9050919050565b600080610eea610ad0565b1415610ef95760009050610f2f565b610f2c610f04610ad0565b610f1e610f0f610f34565b8561238690919063ffffffff16565b61240c90919063ffffffff16565b90505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fd557600080fd5b505afa158015610fe9573d6000803e3d6000fd5b505050506040513d6020811015610fff57600080fd5b8101908080519060200190929190505050905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61106561125d565b6110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000806111a3610f34565b11611216576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4b546f6b656e3a206e6f2072657365727665000000000000000000000000000081525060200191505060405180910390fd5b61122c8261122784600160006121a6565b612456565b9050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112a0611c31565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113545780601f1061132957610100808354040283529160200191611354565b820191906000526020600020905b81548152906001019060200180831161133757829003601f168201915b5050505050905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561146b57600080fd5b505af115801561147f573d6000803e3d6000fd5b505050506040513d602081101561149557600080fd5b81019080805190602001909291905050506114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130ae6021913960400191505060405180910390fd5b61150483612662565b915050919050565b60006115cf611519611c31565b846115ca856040518060600160405280602581526020016131186025913960016000611543611c31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e69092919063ffffffff16565b611c39565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156116d65750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561169957600080fd5b505afa1580156116ad573d6000803e3d6000fd5b505050506040513d60208110156116c357600080fd5b8101908080519060200190929190505050155b61172b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612ff0602e913960400191505060405180910390fd5b43600a5410156117a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4b546f6b656e3a206e6f74206c6f636b6564000000000000000000000000000081525060200191505060405180910390fd5b6000600a81905550565b60006117c16117ba611c31565b8484611e30565b6001905092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080611800610ad0565b11611873576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4b546f6b656e3a206e6f20737570706c7900000000000000000000000000000081525060200191505060405180910390fd5b61188561187f83610edf565b83612456565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61191b61125d565b61198d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080905090565b6119e161125d565b611a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a5c8161282d565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015611b5c5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1f57600080fd5b505afa158015611b33573d6000803e3d6000fd5b505050506040513d6020811015611b4957600080fd5b8101908080519060200190929190505050155b611bb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612ff0602e913960400191505060405180910390fd5b43600a5410611c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4b546f6b656e3a206c6f636b656400000000000000000000000000000000000081525060200191505060405180910390fd5b43600a81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806130f46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612fce6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806130cf6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612f636023913960400191505060405180910390fd5b611fa78160405180606001604052806026815260200161301e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061203a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122fe90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561215857808201518184015260208101905061213d565b50505050905090810190601f1680156121855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806121b1610f34565b14156121c05760009050612209565b6000826121d4576121cf610f34565b6121df565b846121dd610f34565b035b90506122056121fe6121ef610ad0565b8761238690919063ffffffff16565b8286612973565b9150505b9392505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156122bb57600080fd5b505af11580156122cf573d6000803e3d6000fd5b505050506040513d60208110156122e557600080fd5b8101908080519060200190929190505050905092915050565b60008082840190508381101561237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314156123995760009050612406565b60008284029050828482816123aa57fe5b0414612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130446021913960400191505060405180910390fd5b809150505b92915050565b600061244e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129d4565b905092915050565b600043600a54106124cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4b546f6b656e3a206c6f636b656400000000000000000000000000000000000081525060200191505060405180910390fd5b6001600660008282540192505081905550600060065490506124f13384612a9a565b6124fb3385612210565b61256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4b546f6b656e3a20746f6b656e207472616e73666572206661696c656400000081525060200191505060405180910390fd5b7fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929338585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019150600654811461265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5092915050565b600043600a54106126db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4b546f6b656e3a206c6f636b656400000000000000000000000000000000000081525060200191505060405180910390fd5b60016006600082825401925050819055506000600654905060008061271085612702610f34565b612c5290919063ffffffff16565b111561272a5761272384600060016121a6565b905061272e565b8390505b6127383382612c9c565b7f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f338583604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019250506006548114612827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b50919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612fa86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080612989848661240c90919063ffffffff16565b90508280156129ab575060006129a88587612e5790919063ffffffff16565b14155b6129b557806129ca565b6129c96001826122fe90919063ffffffff16565b5b9150509392505050565b60008083118290612a80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a45578082015181840152602081019050612a2a565b50505050905090810190601f168015612a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612a8c57fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061308d6021913960400191505060405180910390fd5b612b8b81604051806060016040528060228152602001612f86602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e69092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612be281600254612c5290919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612c9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120e6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612d54816002546122fe90919063ffffffff16565b600281905550612dab816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122fe90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612e9983836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612ea1565b905092915050565b6000808314158290612f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f13578082015181840152602081019050612ef8565b50505050905090810190601f168015612f405780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481612f5857fe5b069050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734b546f6b656e3a206f6e6c792063616e2062652063616c6c656420627920756e70617573656420696e766f6b657245524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f20616464726573734b45726332303a20746f6b656e207472616e7366657246726f6d206661696c656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820dedfd3eddacc210cdf8957b0feb4f4077a20f138f14baedb75a5e48bdfd0601564736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063a9059cbb116100a2578063e4cd4f2011610071578063e4cd4f201461095c578063f10c9667146109a0578063f2fde38b146109c2578063f83d08ba14610a06576101cf565b8063a9059cbb146107ee578063c740b91814610854578063db006a751461089e578063dd62ed3e146108e4576101cf565b80639d76ea58116100de5780639d76ea58146106ee578063a0712d6814610738578063a457c2d71461077e578063a69df4b5146107e4576101cf565b80638da5cb5b146105ff5780638f32d59b1461064957806395d89b411461066b576101cf565b806339509351116101715780634c68df671161014b5780634c68df671461053957806370a0823114610557578063715018a6146105af578063852a12e3146105b9576101cf565b806339509351146104395780633af9e6691461049f5780633c34c1f1146104f7576101cf565b806323b872dd116101ad57806323b872dd146102db5780632bee95d214610361578063313ce567146103af578063336d2692146103d3576101cf565b806306fdde03146101d4578063095ea7b31461025757806318160ddd146102bd575b600080fd5b6101dc610a10565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a36004803603604081101561026d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ab2565b604051808215151515815260200191505060405180910390f35b6102c5610ad0565b6040518082815260200191505060405180910390f35b610347600480360360608110156102f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ada565b604051808215151515815260200191505060405180910390f35b6103996004803603604081101561037757600080fd5b8101908080359060200190929190803515159060200190929190505050610b78565b6040518082815260200191505060405180910390f35b6103b7610b8e565b604051808260ff1660ff16815260200191505060405180910390f35b61041f600480360360408110156103e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ba5565b604051808215151515815260200191505060405180910390f35b6104856004803603604081101561044f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e12565b604051808215151515815260200191505060405180910390f35b6104e1600480360360208110156104b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ec5565b6040518082815260200191505060405180910390f35b6105236004803603602081101561050d57600080fd5b8101908080359060200190929190505050610edf565b6040518082815260200191505060405180910390f35b610541610f34565b6040518082815260200191505060405180910390f35b6105996004803603602081101561056d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611015565b6040518082815260200191505060405180910390f35b6105b761105d565b005b6105e5600480360360208110156105cf57600080fd5b8101908080359060200190929190505050611198565b604051808215151515815260200191505060405180910390f35b610607611233565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61065161125d565b604051808215151515815260200191505060405180910390f35b6106736112bc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106b3578082015181840152602081019050610698565b50505050905090810190601f1680156106e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106f661135e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107646004803603602081101561074e57600080fd5b8101908080359060200190929190505050611388565b604051808215151515815260200191505060405180910390f35b6107ca6004803603604081101561079457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061150c565b604051808215151515815260200191505060405180910390f35b6107ec6115d9565b005b61083a6004803603604081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ad565b604051808215151515815260200191505060405180910390f35b61085c6117cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108ca600480360360208110156108b457600080fd5b81019080803590602001909291905050506117f5565b604051808215151515815260200191505060405180910390f35b610946600480360360408110156108fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061188c565b6040518082815260200191505060405180910390f35b61099e6004803603602081101561097257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611913565b005b6109a86119d1565b604051808215151515815260200191505060405180910390f35b610a04600480360360208110156109d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d9565b005b610a0e611a5f565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610aa85780601f10610a7d57610100808354040283529160200191610aa8565b820191906000526020600020905b815481529060010190602001808311610a8b57829003601f168201915b5050505050905090565b6000610ac6610abf611c31565b8484611c39565b6001905092915050565b6000600254905090565b6000610ae7848484611e30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b1985610b14611c31565b61188c565b14610b6d57610b6c84610b2a611c31565b610b678560405180606001604052806028815260200161306560289139610b588a610b53611c31565b61188c565b6120e69092919063ffffffff16565b611c39565b5b600190509392505050565b6000610b86838360006121a6565b905092915050565b6000600560009054906101000a900460ff16905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015610ca45750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c6757600080fd5b505afa158015610c7b573d6000803e3d6000fd5b505050506040513d6020811015610c9157600080fd5b8101908080519060200190929190505050155b610cf9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612ff0602e913960400191505060405180910390fd5b43600a5410610d70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4b546f6b656e3a206c6f636b656400000000000000000000000000000000000081525060200191505060405180910390fd5b600160066000828254019250508190555060006006549050610d928484612210565b91506006548114610e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5092915050565b6000610ebb610e1f611c31565b84610eb68560016000610e30611c31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122fe90919063ffffffff16565b611c39565b6001905092915050565b6000610ed8610ed383611015565b610edf565b9050919050565b600080610eea610ad0565b1415610ef95760009050610f2f565b610f2c610f04610ad0565b610f1e610f0f610f34565b8561238690919063ffffffff16565b61240c90919063ffffffff16565b90505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fd557600080fd5b505afa158015610fe9573d6000803e3d6000fd5b505050506040513d6020811015610fff57600080fd5b8101908080519060200190929190505050905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61106561125d565b6110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000806111a3610f34565b11611216576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4b546f6b656e3a206e6f2072657365727665000000000000000000000000000081525060200191505060405180910390fd5b61122c8261122784600160006121a6565b612456565b9050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112a0611c31565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113545780601f1061132957610100808354040283529160200191611354565b820191906000526020600020905b81548152906001019060200180831161133757829003601f168201915b5050505050905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561146b57600080fd5b505af115801561147f573d6000803e3d6000fd5b505050506040513d602081101561149557600080fd5b81019080805190602001909291905050506114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130ae6021913960400191505060405180910390fd5b61150483612662565b915050919050565b60006115cf611519611c31565b846115ca856040518060600160405280602581526020016131186025913960016000611543611c31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e69092919063ffffffff16565b611c39565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156116d65750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561169957600080fd5b505afa1580156116ad573d6000803e3d6000fd5b505050506040513d60208110156116c357600080fd5b8101908080519060200190929190505050155b61172b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612ff0602e913960400191505060405180910390fd5b43600a5410156117a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4b546f6b656e3a206e6f74206c6f636b6564000000000000000000000000000081525060200191505060405180910390fd5b6000600a81905550565b60006117c16117ba611c31565b8484611e30565b6001905092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080611800610ad0565b11611873576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4b546f6b656e3a206e6f20737570706c7900000000000000000000000000000081525060200191505060405180910390fd5b61188561187f83610edf565b83612456565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61191b61125d565b61198d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080905090565b6119e161125d565b611a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a5c8161282d565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015611b5c5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1f57600080fd5b505afa158015611b33573d6000803e3d6000fd5b505050506040513d6020811015611b4957600080fd5b8101908080519060200190929190505050155b611bb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612ff0602e913960400191505060405180910390fd5b43600a5410611c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4b546f6b656e3a206c6f636b656400000000000000000000000000000000000081525060200191505060405180910390fd5b43600a81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806130f46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612fce6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806130cf6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612f636023913960400191505060405180910390fd5b611fa78160405180606001604052806026815260200161301e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061203a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122fe90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561215857808201518184015260208101905061213d565b50505050905090810190601f1680156121855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806121b1610f34565b14156121c05760009050612209565b6000826121d4576121cf610f34565b6121df565b846121dd610f34565b035b90506122056121fe6121ef610ad0565b8761238690919063ffffffff16565b8286612973565b9150505b9392505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156122bb57600080fd5b505af11580156122cf573d6000803e3d6000fd5b505050506040513d60208110156122e557600080fd5b8101908080519060200190929190505050905092915050565b60008082840190508381101561237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314156123995760009050612406565b60008284029050828482816123aa57fe5b0414612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130446021913960400191505060405180910390fd5b809150505b92915050565b600061244e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129d4565b905092915050565b600043600a54106124cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4b546f6b656e3a206c6f636b656400000000000000000000000000000000000081525060200191505060405180910390fd5b6001600660008282540192505081905550600060065490506124f13384612a9a565b6124fb3385612210565b61256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4b546f6b656e3a20746f6b656e207472616e73666572206661696c656400000081525060200191505060405180910390fd5b7fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929338585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019150600654811461265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5092915050565b600043600a54106126db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4b546f6b656e3a206c6f636b656400000000000000000000000000000000000081525060200191505060405180910390fd5b60016006600082825401925050819055506000600654905060008061271085612702610f34565b612c5290919063ffffffff16565b111561272a5761272384600060016121a6565b905061272e565b8390505b6127383382612c9c565b7f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f338583604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019250506006548114612827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b50919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612fa86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080612989848661240c90919063ffffffff16565b90508280156129ab575060006129a88587612e5790919063ffffffff16565b14155b6129b557806129ca565b6129c96001826122fe90919063ffffffff16565b5b9150509392505050565b60008083118290612a80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a45578082015181840152602081019050612a2a565b50505050905090810190601f168015612a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612a8c57fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061308d6021913960400191505060405180910390fd5b612b8b81604051806060016040528060228152602001612f86602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e69092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612be281600254612c5290919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612c9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120e6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612d54816002546122fe90919063ffffffff16565b600281905550612dab816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122fe90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612e9983836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612ea1565b905092915050565b6000808314158290612f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f13578082015181840152602081019050612ef8565b50505050905090810190601f168015612f405780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481612f5857fe5b069050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734b546f6b656e3a206f6e6c792063616e2062652063616c6c656420627920756e70617573656420696e766f6b657245524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f20616464726573734b45726332303a20746f6b656e207472616e7366657246726f6d206661696c656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820dedfd3eddacc210cdf8957b0feb4f4077a20f138f14baedb75a5e48bdfd0601564736f6c63430005100032",
  "sourceMap": "101:953:2:-;;;166:200;8:9:-1;5:2;;;30:1;27;20:12;5:2;166:200:2;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;166:200:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;384:12;379:3;372:25;420:4;415:3;411:14;404:21;;0:432;;166:200:2;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;166:200:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;384:12;379:3;372:25;420:4;415:3;411:14;404:21;;0:432;;166:200:2;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;166:200:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;305:12;319:14;335:4;341:6;349:8;969:4:5;975:6;983:8;512:4:20;504:5;:12;;;;;;;;;;;;:::i;:::-;;536:6;526:7;:16;;;;;;;;;;;;:::i;:::-;;564:8;552:9;;:20;;;;;;;;;;;;;;;;;;416:163;;;879:1:22;863:13;:17;;;;707:12:18;:10;;;:12;;:::i;:::-;698:6;;:21;;;;;;;;;;;;;;;;;;767:6;;;;;;;;;;;734:40;;763:1;734:40;;;;;;;;;;;;1023:12:5;1007:13;;:28;;;;;;;;;;;;;;;;;;1063:14;1045:15;;:32;;;;;;;;;;;;;;;;;;1095:1;1087:5;:9;;;;821:282;;;;;166:200:2;;;;;101:953;;788:96:13;833:15;867:10;860:17;;788:96;:::o;101:953:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "101:953:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;101:953:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;644:81:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;644:81:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2500:149:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2500:149:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1559:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3219:374:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3219:374:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3628:186;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3628:186:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1472:81:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2529:204:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2529:204:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3802:207:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3802:207:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4786:141:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4786:141:5;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4438:229;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4438:229:5;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;740:140:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1706:108:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1706:108:19;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1642:137:18;;;:::i;:::-;;1384:254:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1384:254:5;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;857:77:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1208:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;838:85:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;838:85:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4933:93:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;372:280:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;372:280:2;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4496:258:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4496:258:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3032:92:5;;;:::i;:::-;;2017:155:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2017:155:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5032:97:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1154:224;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1154:224:5;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2230:132:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2230:132:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5703:119:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5703:119:5;;;;;;;;;;;;;;;;;;;:::i;:::-;;658:76:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1928:107:18;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1928:107:18;;;;;;;;;;;;;;;;;;;:::i;:::-;;2923:103:5;;;:::i;:::-;;644:81:20;681:13;713:5;706:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;644:81;:::o;2500:149:19:-;2566:4;2582:39;2591:12;:10;:12::i;:::-;2605:7;2614:6;2582:8;:39::i;:::-;2638:4;2631:11;;2500:149;;;;:::o;1559:89::-;1603:7;1629:12;;1622:19;;1559:89;:::o;3219:374:5:-;3308:4;3324:36;3334:6;3342:9;3353:6;3324:9;:36::i;:::-;3417:2;3374:31;3384:6;3392:12;:10;:12::i;:::-;3374:9;:31::i;:::-;:46;3370:196;;3436:119;3445:6;3453:12;:10;:12::i;:::-;3467:87;3503:6;3467:87;;;;;;;;;;;;;;;;;:31;3477:6;3485:12;:10;:12::i;:::-;3467:9;:31::i;:::-;:35;;:87;;;;;:::i;:::-;3436:8;:119::i;:::-;3370:196;3582:4;3575:11;;3219:374;;;;;:::o;3628:186::-;3719:7;3745:62;3779:11;3792:7;3801:5;3745:33;:62::i;:::-;3738:69;;3628:186;;;;:::o;1472:81:20:-;1513:5;1537:9;;;;;;;;;;;1530:16;;1472:81;:::o;2529:204:5:-;2661:4;5236:15;;;;;;;;;;;5222:29;;:10;:29;;;:68;;;;;5265:15;;;;;;;;;;;5256:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5256:34:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5256:34:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5256:34:5;;;;;;;;;;;;;;;;5255:35;5222:68;5201:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5539:12;5531:5;;:20;5523:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1313:1:22;1296:13;;:18;;;;;;;;;;;1324:20;1347:13;;1324:36;;2688:38:5;2715:2;2719:6;2688:26;:38::i;:::-;2681:45;;1405:13:22;;1389:12;:29;1381:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5580:1:5;2529:204;;;;:::o;3802:207:19:-;3882:4;3898:83;3907:12;:10;:12::i;:::-;3921:7;3930:50;3969:10;3930:11;:25;3942:12;:10;:12::i;:::-;3930:25;;;;;;;;;;;;;;;:34;3956:7;3930:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3898:8;:83::i;:::-;3998:4;3991:11;;3802:207;;;;:::o;4786:141:5:-;4851:7;4877:43;4903:16;4913:5;4903:9;:16::i;:::-;4877:25;:43::i;:::-;4870:50;;4786:141;;;:::o;4438:229::-;4516:7;4556:1;4539:13;:11;:13::i;:::-;:18;4535:57;;;4580:1;4573:8;;;;4535:57;4609:51;4646:13;:11;:13::i;:::-;4609:32;4626:14;:12;:14::i;:::-;4609:12;:16;;:32;;;;:::i;:::-;:36;;:51;;;;:::i;:::-;4602:58;;4438:229;;;;:::o;740:140:2:-;797:7;834:13;;;;;;;;;;;827:31;;;867:4;827:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:46:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;827:46:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;827:46:2;;;;;;;;;;;;;;;;820:53;;740:140;:::o;1706:108:19:-;1763:7;1789:9;:18;1799:7;1789:18;;;;;;;;;;;;;;;;1782:25;;1706:108;;;:::o;1642:137:18:-;1061:9;:7;:9::i;:::-;1053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1740:1;1703:40;;1724:6;;;;;;;;;;;1703:40;;;;;;;;;;;;1770:1;1753:6;;:19;;;;;;;;;;;;;;;;;;1642:137::o;1384:254:5:-;1457:4;1502:1;1485:14;:12;:14::i;:::-;:18;1477:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1543:88;1558:11;1571:59;1605:11;1618:4;1624:5;1571:33;:59::i;:::-;1543:14;:88::i;:::-;1536:95;;1384:254;;;:::o;857:77:18:-;895:7;921:6;;;;;;;;;;;914:13;;857:77;:::o;1208:92::-;1248:4;1287:6;;;;;;;;;;;1271:22;;:12;:10;:12::i;:::-;:22;;;1264:29;;1208:92;:::o;838:85:20:-;877:13;909:7;902:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;838:85;:::o;4933:93:5:-;4980:7;5006:13;;;;;;;;;;;4999:20;;4933:93;:::o;372:280:2:-;433:4;453:12;475:13;;;;;;;;;;;453:36;;507:5;:18;;;526:10;546:4;553:11;507:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;507:58:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;507:58:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;507:58:2;;;;;;;;;;;;;;;;499:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;620:25;633:11;620:12;:25::i;:::-;613:32;;;372:280;;;:::o;4496:258:19:-;4581:4;4597:129;4606:12;:10;:12::i;:::-;4620:7;4629:96;4668:15;4629:96;;;;;;;;;;;;;;;;;:11;:25;4641:12;:10;:12::i;:::-;4629:25;;;;;;;;;;;;;;;:34;4655:7;4629:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;4597:8;:129::i;:::-;4743:4;4736:11;;4496:258;;;;:::o;3032:92:5:-;5236:15;;;;;;;;;;;5222:29;;:10;:29;;;:68;;;;;5265:15;;;;;;;;;;;5256:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5256:34:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5256:34:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5256:34:5;;;;;;;;;;;;;;;;5255:35;5222:68;5201:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5430:12;5421:5;;:21;;5413:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3116:1;3108:5;:9;;;;3032:92::o;2017:155:19:-;2086:4;2102:42;2112:12;:10;:12::i;:::-;2126:9;2137:6;2102:9;:42::i;:::-;2161:4;2154:11;;2017:155;;;;:::o;5032:97:5:-;5081:7;5107:15;;;;;;;;;;;5100:22;;5032:97;:::o;1154:224::-;1218:4;1262:1;1246:13;:11;:13::i;:::-;:17;1238:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:69;1317:39;1343:12;1317:25;:39::i;:::-;1358:12;1302:14;:69::i;:::-;1295:76;;1154:224;;;:::o;2230:132:19:-;2302:7;2328:11;:18;2340:5;2328:18;;;;;;;;;;;;;;;:27;2347:7;2328:27;;;;;;;;;;;;;;;;2321:34;;2230:132;;;;:::o;5703:119:5:-;1061:9:18;:7;:9::i;:::-;1053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5801:14:5;5783:15;;:32;;;;;;;;;;;;;;;;;;5703:119;:::o;658:76:2:-;699:4;722:5;715:12;;658:76;:::o;1928:107:18:-;1061:9;:7;:9::i;:::-;1053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2000:28;2019:8;2000:18;:28::i;:::-;1928:107;:::o;2923:103:5:-;5236:15;;;;;;;;;;;5222:29;;:10;:29;;;:68;;;;;5265:15;;;;;;;;;;;5256:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5256:34:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5256:34:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5256:34:5;;;;;;;;;;;;;;;;5255:35;5222:68;5201:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5539:12;5531:5;;:20;5523:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3007:12;2999:5;:20;;;;2923:103::o;788:96:13:-;833:15;867:10;860:17;;788:96;:::o;7351:332:19:-;7461:1;7444:19;;:5;:19;;;;7436:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7541:1;7522:21;;:7;:21;;;;7514:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7623:6;7593:11;:18;7605:5;7593:18;;;;;;;;;;;;;;;:27;7612:7;7593:27;;;;;;;;;;;;;;;:36;;;;7660:7;7644:32;;7653:5;7644:32;;;7669:6;7644:32;;;;;;;;;;;;;;;;;;7351:332;;;:::o;5228:464::-;5343:1;5325:20;;:6;:20;;;;5317:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5426:1;5405:23;;:9;:23;;;;5397:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5499;5521:6;5499:71;;;;;;;;;;;;;;;;;:9;:17;5509:6;5499:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;5479:9;:17;5489:6;5479:17;;;;;;;;;;;;;;;:91;;;;5603:32;5628:6;5603:9;:20;5613:9;5603:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5580:9;:20;5590:9;5580:20;;;;;;;;;;;;;;;:55;;;;5667:9;5650:35;;5659:6;5650:35;;;5678:6;5650:35;;;;;;;;;;;;;;;;;;5228:464;;;:::o;1732:187:17:-;1818:7;1850:1;1845;:6;;1853:12;1837:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1837:29:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1876:9;1892:1;1888;:5;1876:17;;1911:1;1904:8;;;1732:187;;;;;:::o;3820:612:5:-;3956:7;4001:1;3983:14;:12;:14::i;:::-;:19;3979:58;;;4025:1;4018:8;;;;3979:58;4148:28;4179:16;:63;;4228:14;:12;:14::i;:::-;4179:63;;;4215:11;4198:14;:12;:14::i;:::-;:28;4179:63;4148:94;;4351:74;4363:30;4379:13;:11;:13::i;:::-;4363:11;:15;;:30;;;;:::i;:::-;4395:20;4417:7;4351:11;:74::i;:::-;4344:81;;;3820:612;;;;;;:::o;886:166:2:-;976:4;1010:13;;;;;;;;;;;1003:30;;;1034:2;1038:6;1003:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1003:42:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1003:42:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1003:42:2;;;;;;;;;;;;;;;;996:49;;886:166;;;;:::o;834:176:17:-;892:7;911:9;927:1;923;:5;911:17;;951:1;946;:6;;938:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;995:8;;;834:176;;;;:::o;2159:459::-;2217:7;2463:1;2458;:6;2454:45;;;2487:1;2480:8;;;;2454:45;2509:9;2525:1;2521;:5;2509:17;;2553:1;2548;2544;:5;;;;;;:10;2536:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2610:1;2603:8;;;2159:459;;;;;:::o;3073:130::-;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3150:46;;3073:130;;;;:::o;2102:370:5:-;2229:4;5539:12;5531:5;;:20;5523:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1313:1:22;1296:13;;:18;;;;;;;;;;;1324:20;1347:13;;1324:36;;2249:31:5;2255:10;2267:12;2249:5;:31::i;:::-;2298:51;2325:10;2337:11;2298:26;:51::i;:::-;2290:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2398:45;2405:10;2417:11;2430:12;2398:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2461:4;2454:11;;1405:13:22;;1389:12;:29;1381:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5580:1:5;2102:370;;;;:::o;1644:452::-;1742:4;5539:12;5531:5;;:20;5523:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1313:1:22;1296:13;;:18;;;;;;;;;;;1324:20;1347:13;;1324:36;;1762:20:5;1825:1;1796:26;1815:6;1796:14;:12;:14::i;:::-;:18;;:26;;;;:::i;:::-;:30;1792:182;;;1857:54;1891:6;1899:5;1906:4;1857:33;:54::i;:::-;1842:69;;1792:182;;;1957:6;1942:21;;1792:182;1983:31;1989:10;2001:12;1983:5;:31::i;:::-;2029:38;2034:10;2046:6;2054:12;2029:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2085:4;2078:11;;;1405:13:22;;1389:12;:29;1381:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5580:1:5;1644:452;;;:::o;2136:225:18:-;2229:1;2209:22;;:8;:22;;;;2201:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2318:8;2289:38;;2310:6;;;;;;;;;;;2289:38;;;;;;;;;;;;2346:8;2337:6;;:17;;;;;;;;;;;;;;;;;;2136:225;:::o;190:196:0:-;270:7;289:13;305:8;311:1;305;:5;;:8;;;;:::i;:::-;289:24;;331:7;:24;;;;;354:1;342:8;348:1;342;:5;;:8;;;;:::i;:::-;:13;;331:24;330:49;;374:5;330:49;;;359:12;369:1;359:5;:9;;:12;;;;:::i;:::-;330:49;323:56;;;190:196;;;;;:::o;3718:338:17:-;3804:7;3901:1;3897;:5;3904:12;3889:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3889:28:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3927:9;3943:1;3939;:5;;;;;;3927:17;;4048:1;4041:8;;;3718:338;;;;;:::o;6584:342:19:-;6678:1;6659:21;;:7;:21;;;;6651:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6750:68;6773:6;6750:68;;;;;;;;;;;;;;;;;:9;:18;6760:7;6750:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;6729:9;:18;6739:7;6729:18;;;;;;;;;;;;;;;:89;;;;6843:24;6860:6;6843:12;;:16;;:24;;;;:::i;:::-;6828:12;:39;;;;6908:1;6882:37;;6891:7;6882:37;;;6912:6;6882:37;;;;;;;;;;;;;;;;;;6584:342;;:::o;1274:134:17:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1351:50;;1274:134;;;;:::o;5962:302:19:-;6056:1;6037:21;;:7;:21;;;;6029:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6120:24;6137:6;6120:12;;:16;;:24;;;;:::i;:::-;6105:12;:39;;;;6175:30;6198:6;6175:9;:18;6185:7;6175:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;6154:9;:18;6164:7;6154:18;;;;;;;;;;;;;;;:51;;;;6241:7;6220:37;;6237:1;6220:37;;;6250:6;6220:37;;;;;;;;;;;;;;;;;;5962:302;;:::o;4500:128:17:-;4558:7;4584:37;4588:1;4591;4584:37;;;;;;;;;;;;;;;;;:3;:37::i;:::-;4577:44;;4500:128;;;;:::o;5132:163::-;5218:7;5250:1;5245;:6;;5253:12;5237:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5237:29:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5287:1;5283;:5;;;;;;5276:12;;5132:163;;;;;:::o",
  "source": "pragma solidity ^0.5.0;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"./Ktoken.sol\";\n\ncontract KErc20 is KToken {\n    using SafeMath for uint256;\n\n    constructor (address tokenAddress, address invokerAddress, string memory name, string memory symbol, uint8 decimals)\n    public\n    KToken(tokenAddress, invokerAddress, name, symbol, decimals)\n    { }\n\n    function mint(uint256 tokenAmount)\n    external\n    returns (bool)\n    {\n        IERC20 token = IERC20(_tokenAddress);\n        require(token.transferFrom(msg.sender, address(this), tokenAmount), \"KErc20: token transferFrom failed\");\n        return mintInternal(tokenAmount);\n    }\n\n    function isKEther() public view returns (bool) {\n        return false;\n    }\n\n    function totalReserve()\n    public\n    view\n    returns (uint256)\n    {\n        return IERC20(_tokenAddress).balanceOf(address(this));\n    }\n\n    function transferUnderlyingInternal(address to, uint256 amount)\n    internal\n    returns (bool)\n    {\n        return IERC20(_tokenAddress).transfer(to, amount);\n    }\n}\n",
  "sourcePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/KErc20.sol",
  "ast": {
    "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/KErc20.sol",
    "exportedSymbols": {
      "KErc20": [
        524
      ]
    },
    "id": 525,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 423,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 424,
        "nodeType": "ImportDirective",
        "scope": 525,
        "sourceUnit": 2904,
        "src": "25:51:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/Ktoken.sol",
        "file": "./Ktoken.sol",
        "id": 425,
        "nodeType": "ImportDirective",
        "scope": 525,
        "sourceUnit": 1614,
        "src": "77:22:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 426,
              "name": "KToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1613,
              "src": "120:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_KToken_$1613",
                "typeString": "contract KToken"
              }
            },
            "id": 427,
            "nodeType": "InheritanceSpecifier",
            "src": "120:6:2"
          }
        ],
        "contractDependencies": [
          41,
          1613,
          2074,
          2440,
          3017,
          3422,
          3480,
          3549,
          3581
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 524,
        "linearizedBaseContracts": [
          524,
          1613,
          3017,
          41,
          3581,
          3480,
          3422,
          2074,
          3549,
          2440
        ],
        "name": "KErc20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 430,
            "libraryName": {
              "contractScope": null,
              "id": 428,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2903,
              "src": "139:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2903",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "133:27:2",
            "typeName": {
              "id": 429,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "152:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 450,
              "nodeType": "Block",
              "src": "363:3:2",
              "statements": []
            },
            "documentation": null,
            "id": 451,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 443,
                    "name": "tokenAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 432,
                    "src": "305:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 444,
                    "name": "invokerAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 434,
                    "src": "319:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 445,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 436,
                    "src": "335:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 446,
                    "name": "symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 438,
                    "src": "341:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 447,
                    "name": "decimals",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 440,
                    "src": "349:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  }
                ],
                "id": 448,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 442,
                  "name": "KToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1613,
                  "src": "298:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_KToken_$1613_$",
                    "typeString": "type(contract KToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "298:60:2"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 441,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 432,
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "179:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 431,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "179:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 434,
                  "name": "invokerAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "201:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 433,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "201:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 436,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "225:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 435,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "225:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 438,
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "245:20:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 437,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "245:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 440,
                  "name": "decimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "267:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 439,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "267:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "178:104:2"
            },
            "returnParameters": {
              "id": 449,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "363:0:2"
            },
            "scope": 524,
            "src": "166:200:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 481,
              "nodeType": "Block",
              "src": "443:209:2",
              "statements": [
                {
                  "assignments": [
                    459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 459,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 481,
                      "src": "453:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$3549",
                        "typeString": "contract IERC20"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 458,
                        "name": "IERC20",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3549,
                        "src": "453:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3549",
                          "typeString": "contract IERC20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 463,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 461,
                        "name": "_tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1159,
                        "src": "475:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 460,
                      "name": "IERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3549,
                      "src": "468:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3549_$",
                        "typeString": "type(contract IERC20)"
                      }
                    },
                    "id": 462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "468:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3549",
                      "typeString": "contract IERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "453:36:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 467,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3596,
                              "src": "526:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 468,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "526:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 470,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3642,
                                "src": "546:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_KErc20_$524",
                                  "typeString": "contract KErc20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_KErc20_$524",
                                  "typeString": "contract KErc20"
                                }
                              ],
                              "id": 469,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "538:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 471,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "538:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 472,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 453,
                            "src": "553:11:2",
                            "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"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 465,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 459,
                            "src": "507:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$3549",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3532,
                          "src": "507:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "507:58:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4b45726332303a20746f6b656e207472616e7366657246726f6d206661696c6564",
                        "id": 474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "567:35:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b574f6d49a593ee155e9a1b5db1b535727b9d809dea9cf66cf2696929a5e93c8",
                          "typeString": "literal_string \"KErc20: token transferFrom failed\""
                        },
                        "value": "KErc20: token transferFrom failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b574f6d49a593ee155e9a1b5db1b535727b9d809dea9cf66cf2696929a5e93c8",
                          "typeString": "literal_string \"KErc20: token transferFrom failed\""
                        }
                      ],
                      "id": 464,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "499:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "499:104:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 476,
                  "nodeType": "ExpressionStatement",
                  "src": "499:104:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 478,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 453,
                        "src": "633:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 477,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1294
                      ],
                      "referencedDeclaration": 1294,
                      "src": "620:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) returns (bool)"
                      }
                    },
                    "id": 479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "620:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 457,
                  "id": 480,
                  "nodeType": "Return",
                  "src": "613:32:2"
                }
              ]
            },
            "documentation": null,
            "id": 482,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 453,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 482,
                  "src": "386:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "386:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "385:21:2"
            },
            "returnParameters": {
              "id": 457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 456,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 482,
                  "src": "433:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 455,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "433:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "432:6:2"
            },
            "scope": 524,
            "src": "372:280:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 489,
              "nodeType": "Block",
              "src": "705:29:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "722:5:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 486,
                  "id": 488,
                  "nodeType": "Return",
                  "src": "715:12:2"
                }
              ]
            },
            "documentation": null,
            "id": 490,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isKEther",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 483,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "675:2:2"
            },
            "returnParameters": {
              "id": 486,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 485,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 490,
                  "src": "699:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 484,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "699:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "698:6:2"
            },
            "scope": 524,
            "src": "658:76:2",
            "stateMutability": "view",
            "superFunction": 1522,
            "visibility": "public"
          },
          {
            "body": {
              "id": 504,
              "nodeType": "Block",
              "src": "810:70:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 500,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3642,
                            "src": "867:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_KErc20_$524",
                              "typeString": "contract KErc20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_KErc20_$524",
                              "typeString": "contract KErc20"
                            }
                          ],
                          "id": 499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "859:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "859:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 496,
                            "name": "_tokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1159,
                            "src": "834:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 495,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3549,
                          "src": "827:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$3549_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 497,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "827:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3549",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 498,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3494,
                      "src": "827:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "827:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 494,
                  "id": 503,
                  "nodeType": "Return",
                  "src": "820:53:2"
                }
              ]
            },
            "documentation": null,
            "id": 505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalReserve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 491,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "761:2:2"
            },
            "returnParameters": {
              "id": 494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 493,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "797:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 492,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "797:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "796:9:2"
            },
            "scope": 524,
            "src": "740:140:2",
            "stateMutability": "view",
            "superFunction": 1527,
            "visibility": "public"
          },
          {
            "body": {
              "id": 522,
              "nodeType": "Block",
              "src": "986:66:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 518,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 507,
                        "src": "1034:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 519,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "1038:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 515,
                            "name": "_tokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1159,
                            "src": "1010:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 514,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3549,
                          "src": "1003:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$3549_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 516,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1003:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3549",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 517,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3503,
                      "src": "1003:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1003:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 513,
                  "id": 521,
                  "nodeType": "Return",
                  "src": "996:49:2"
                }
              ]
            },
            "documentation": null,
            "id": 523,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferUnderlyingInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 507,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 523,
                  "src": "922:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 506,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "922:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 509,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 523,
                  "src": "934:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 508,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "921:28:2"
            },
            "returnParameters": {
              "id": 513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 512,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 523,
                  "src": "976:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 511,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "976:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "975:6:2"
            },
            "scope": 524,
            "src": "886:166:2",
            "stateMutability": "nonpayable",
            "superFunction": 1362,
            "visibility": "internal"
          }
        ],
        "scope": 525,
        "src": "101:953:2"
      }
    ],
    "src": "0:1055:2"
  },
  "legacyAST": {
    "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/KErc20.sol",
    "exportedSymbols": {
      "KErc20": [
        524
      ]
    },
    "id": 525,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 423,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 424,
        "nodeType": "ImportDirective",
        "scope": 525,
        "sourceUnit": 2904,
        "src": "25:51:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/Ktoken.sol",
        "file": "./Ktoken.sol",
        "id": 425,
        "nodeType": "ImportDirective",
        "scope": 525,
        "sourceUnit": 1614,
        "src": "77:22:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 426,
              "name": "KToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1613,
              "src": "120:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_KToken_$1613",
                "typeString": "contract KToken"
              }
            },
            "id": 427,
            "nodeType": "InheritanceSpecifier",
            "src": "120:6:2"
          }
        ],
        "contractDependencies": [
          41,
          1613,
          2074,
          2440,
          3017,
          3422,
          3480,
          3549,
          3581
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 524,
        "linearizedBaseContracts": [
          524,
          1613,
          3017,
          41,
          3581,
          3480,
          3422,
          2074,
          3549,
          2440
        ],
        "name": "KErc20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 430,
            "libraryName": {
              "contractScope": null,
              "id": 428,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2903,
              "src": "139:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2903",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "133:27:2",
            "typeName": {
              "id": 429,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "152:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 450,
              "nodeType": "Block",
              "src": "363:3:2",
              "statements": []
            },
            "documentation": null,
            "id": 451,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 443,
                    "name": "tokenAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 432,
                    "src": "305:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 444,
                    "name": "invokerAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 434,
                    "src": "319:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 445,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 436,
                    "src": "335:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 446,
                    "name": "symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 438,
                    "src": "341:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 447,
                    "name": "decimals",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 440,
                    "src": "349:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  }
                ],
                "id": 448,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 442,
                  "name": "KToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1613,
                  "src": "298:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_KToken_$1613_$",
                    "typeString": "type(contract KToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "298:60:2"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 441,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 432,
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "179:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 431,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "179:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 434,
                  "name": "invokerAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "201:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 433,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "201:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 436,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "225:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 435,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "225:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 438,
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "245:20:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 437,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "245:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 440,
                  "name": "decimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 451,
                  "src": "267:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 439,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "267:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "178:104:2"
            },
            "returnParameters": {
              "id": 449,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "363:0:2"
            },
            "scope": 524,
            "src": "166:200:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 481,
              "nodeType": "Block",
              "src": "443:209:2",
              "statements": [
                {
                  "assignments": [
                    459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 459,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 481,
                      "src": "453:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$3549",
                        "typeString": "contract IERC20"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 458,
                        "name": "IERC20",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3549,
                        "src": "453:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3549",
                          "typeString": "contract IERC20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 463,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 461,
                        "name": "_tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1159,
                        "src": "475:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 460,
                      "name": "IERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3549,
                      "src": "468:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3549_$",
                        "typeString": "type(contract IERC20)"
                      }
                    },
                    "id": 462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "468:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3549",
                      "typeString": "contract IERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "453:36:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 467,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3596,
                              "src": "526:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 468,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "526:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 470,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3642,
                                "src": "546:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_KErc20_$524",
                                  "typeString": "contract KErc20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_KErc20_$524",
                                  "typeString": "contract KErc20"
                                }
                              ],
                              "id": 469,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "538:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 471,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "538:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 472,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 453,
                            "src": "553:11:2",
                            "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"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 465,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 459,
                            "src": "507:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$3549",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3532,
                          "src": "507:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "507:58:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4b45726332303a20746f6b656e207472616e7366657246726f6d206661696c6564",
                        "id": 474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "567:35:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b574f6d49a593ee155e9a1b5db1b535727b9d809dea9cf66cf2696929a5e93c8",
                          "typeString": "literal_string \"KErc20: token transferFrom failed\""
                        },
                        "value": "KErc20: token transferFrom failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b574f6d49a593ee155e9a1b5db1b535727b9d809dea9cf66cf2696929a5e93c8",
                          "typeString": "literal_string \"KErc20: token transferFrom failed\""
                        }
                      ],
                      "id": 464,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "499:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "499:104:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 476,
                  "nodeType": "ExpressionStatement",
                  "src": "499:104:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 478,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 453,
                        "src": "633:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 477,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1294
                      ],
                      "referencedDeclaration": 1294,
                      "src": "620:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) returns (bool)"
                      }
                    },
                    "id": 479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "620:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 457,
                  "id": 480,
                  "nodeType": "Return",
                  "src": "613:32:2"
                }
              ]
            },
            "documentation": null,
            "id": 482,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 453,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 482,
                  "src": "386:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "386:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "385:21:2"
            },
            "returnParameters": {
              "id": 457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 456,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 482,
                  "src": "433:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 455,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "433:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "432:6:2"
            },
            "scope": 524,
            "src": "372:280:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 489,
              "nodeType": "Block",
              "src": "705:29:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "722:5:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 486,
                  "id": 488,
                  "nodeType": "Return",
                  "src": "715:12:2"
                }
              ]
            },
            "documentation": null,
            "id": 490,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isKEther",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 483,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "675:2:2"
            },
            "returnParameters": {
              "id": 486,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 485,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 490,
                  "src": "699:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 484,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "699:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "698:6:2"
            },
            "scope": 524,
            "src": "658:76:2",
            "stateMutability": "view",
            "superFunction": 1522,
            "visibility": "public"
          },
          {
            "body": {
              "id": 504,
              "nodeType": "Block",
              "src": "810:70:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 500,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3642,
                            "src": "867:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_KErc20_$524",
                              "typeString": "contract KErc20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_KErc20_$524",
                              "typeString": "contract KErc20"
                            }
                          ],
                          "id": 499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "859:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "859:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 496,
                            "name": "_tokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1159,
                            "src": "834:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 495,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3549,
                          "src": "827:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$3549_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 497,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "827:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3549",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 498,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3494,
                      "src": "827:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "827:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 494,
                  "id": 503,
                  "nodeType": "Return",
                  "src": "820:53:2"
                }
              ]
            },
            "documentation": null,
            "id": 505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalReserve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 491,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "761:2:2"
            },
            "returnParameters": {
              "id": 494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 493,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "797:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 492,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "797:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "796:9:2"
            },
            "scope": 524,
            "src": "740:140:2",
            "stateMutability": "view",
            "superFunction": 1527,
            "visibility": "public"
          },
          {
            "body": {
              "id": 522,
              "nodeType": "Block",
              "src": "986:66:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 518,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 507,
                        "src": "1034:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 519,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 509,
                        "src": "1038:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 515,
                            "name": "_tokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1159,
                            "src": "1010:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 514,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3549,
                          "src": "1003:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$3549_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 516,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1003:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3549",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 517,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3503,
                      "src": "1003:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1003:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 513,
                  "id": 521,
                  "nodeType": "Return",
                  "src": "996:49:2"
                }
              ]
            },
            "documentation": null,
            "id": 523,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferUnderlyingInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 507,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 523,
                  "src": "922:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 506,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "922:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 509,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 523,
                  "src": "934:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 508,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "921:28:2"
            },
            "returnParameters": {
              "id": 513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 512,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 523,
                  "src": "976:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 511,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "976:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "975:6:2"
            },
            "scope": 524,
            "src": "886:166:2",
            "stateMutability": "nonpayable",
            "superFunction": 1362,
            "visibility": "internal"
          }
        ],
        "scope": 525,
        "src": "101:953:2"
      }
    ],
    "src": "0:1055:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.20",
  "updatedAt": "2020-02-01T23:51:00.333Z",
  "devdoc": {
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}.     * Requirements:     * - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`).     * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei.     * NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller.     * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.     * Emits an {Approval} event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller.     * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.     * Emits an {Approval} event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address."
      },
      "isOwner()": {
        "details": "Returns true if the caller is the current owner."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}.     * Requirements:     * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    }
  },
  "userdoc": {
    "methods": {}
  }
}