{
  "contractName": "SimpleRestrictedFDT",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "contract IERC20",
          "name": "_fundsToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "initialAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "addedAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "whitelist",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "addedBy",
          "type": "address"
        }
      ],
      "name": "AddressAddedToWhitelist",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "removedAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "whitelist",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "removedBy",
          "type": "address"
        }
      ],
      "name": "AddressRemovedFromWhitelist",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "addedAdmin",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "addedBy",
          "type": "address"
        }
      ],
      "name": "AdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "removedAdmin",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "removedBy",
          "type": "address"
        }
      ],
      "name": "AdminRemoved",
      "type": "event"
    },
    {
      "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": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fundsDistributed",
          "type": "uint256"
        }
      ],
      "name": "FundsDistributed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fundsWithdrawn",
          "type": "uint256"
        }
      ],
      "name": "FundsWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "updatedBy",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "sourceWhitelist",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "destinationWhitelist",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "from",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "to",
          "type": "bool"
        }
      ],
      "name": "OutboundWhitelistUpdated",
      "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": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "RestrictionsDisabled",
      "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"
    },
    {
      "inputs": [],
      "name": "FAILURE_NON_WHITELIST",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FAILURE_NON_WHITELIST_MESSAGE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SUCCESS_CODE",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SUCCESS_MESSAGE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNKNOWN_ERROR",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "accumulativeFundsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adminToAdd",
          "type": "address"
        }
      ],
      "name": "addAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressToAdd",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "whitelist",
          "type": "uint8"
        }
      ],
      "name": "addToWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "addressWhitelists",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "administrators",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "checkWhitelistAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "detectTransferRestriction",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "disableRestrictions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fundsToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fundsTokenBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "contract IERC20",
          "name": "_fundsToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "initialAmount",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressToTest",
          "type": "address"
        }
      ],
      "name": "isAdministrator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRestrictionEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "restrictionCode",
          "type": "uint8"
        }
      ],
      "name": "messageForTransferRestriction",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "outboundWhitelistsEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "owners",
          "type": "address[]"
        }
      ],
      "name": "pushFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adminToRemove",
          "type": "address"
        }
      ],
      "name": "removeAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressToRemove",
          "type": "address"
        }
      ],
      "name": "removeFromWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateFundsReceived",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "sourceWhitelist",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "destinationWhitelist",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "newEnabledValue",
          "type": "bool"
        }
      ],
      "name": "updateOutboundWhitelistEnabled",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "withdrawableFundsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "withdrawnFundsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"contract IERC20\",\"name\":\"_fundsToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addedAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"whitelist\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addedBy\",\"type\":\"address\"}],\"name\":\"AddressAddedToWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"removedAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"whitelist\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"removedBy\",\"type\":\"address\"}],\"name\":\"AddressRemovedFromWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addedAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addedBy\",\"type\":\"address\"}],\"name\":\"AdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"removedAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"removedBy\",\"type\":\"address\"}],\"name\":\"AdminRemoved\",\"type\":\"event\"},{\"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\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fundsDistributed\",\"type\":\"uint256\"}],\"name\":\"FundsDistributed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fundsWithdrawn\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"updatedBy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"sourceWhitelist\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"destinationWhitelist\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"from\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"to\",\"type\":\"bool\"}],\"name\":\"OutboundWhitelistUpdated\",\"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\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"RestrictionsDisabled\",\"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\"},{\"inputs\":[],\"name\":\"FAILURE_NON_WHITELIST\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FAILURE_NON_WHITELIST_MESSAGE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUCCESS_CODE\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUCCESS_MESSAGE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNKNOWN_ERROR\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"accumulativeFundsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"adminToAdd\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressToAdd\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"whitelist\",\"type\":\"uint8\"}],\"name\":\"addToWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressWhitelists\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"administrators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"checkWhitelistAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"detectTransferRestriction\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRestrictions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fundsToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fundsTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"contract IERC20\",\"name\":\"_fundsToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialAmount\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressToTest\",\"type\":\"address\"}],\"name\":\"isAdministrator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isRestrictionEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"restrictionCode\",\"type\":\"uint8\"}],\"name\":\"messageForTransferRestriction\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"outboundWhitelistsEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"}],\"name\":\"pushFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"adminToRemove\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressToRemove\",\"type\":\"address\"}],\"name\":\"removeFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateFundsReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"sourceWhitelist\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"destinationWhitelist\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"newEnabledValue\",\"type\":\"bool\"}],\"name\":\"updateOutboundWhitelistEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"withdrawableFundsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"withdrawnFundsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accumulativeFundsOf(address)\":{\"details\":\"accumulativeFundsOf(_owner) = withdrawableFundsOf(_owner) + withdrawnFundsOf(_owner) = (pointsPerShare * balanceOf(_owner) + pointsCorrection[_owner]) / pointsMultiplier\",\"params\":{\"_owner\":\"The address of a token holder.\"},\"returns\":{\"_0\":\"The amount of funds that `_owner` has earned in total.\"}},\"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. This is the value {ERC20} uses, unless {_setupDecimals} is called. 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.\"},\"initialize(string,string,address,address,uint256)\":{\"details\":\"\\\"constructor\\\" to be called on deployment\"},\"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}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateFundsReceived()\":{\"details\":\"Calls _updateFundsTokenBalance(), whereby the contract computes the delta of the previous and the new funds token balance and increments the total received funds (cumulative) by delta by calling _registerFunds()\"},\"withdrawableFundsOf(address)\":{\"params\":{\"_owner\":\"The address of a token holder.\"},\"returns\":{\"_0\":\"The amount funds that `_owner` can withdraw.\"}},\"withdrawnFundsOf(address)\":{\"params\":{\"_owner\":\"The address of a token holder.\"},\"returns\":{\"_0\":\"The amount of funds that `_owner` has withdrawn.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accumulativeFundsOf(address)\":{\"notice\":\"prev. accumulativeDividendOfView the amount of funds that an address has earned in total.\"},\"addAdmin(address)\":{\"notice\":\"Add an admin to the list.  This should only be callable by the owner of the contract.\"},\"addToWhitelist(address,uint8)\":{\"notice\":\"Sets an address's white list ID.  Only administrators should be allowed to update this. If an address is on an existing whitelist, it will just get updated to the new value (removed from previous).\"},\"burn(address,uint256)\":{\"notice\":\"Exposes the ability to burn exisiting FDTs for a given account. Caller has to be the owner of the FDT.\"},\"checkWhitelistAllowed(address,address)\":{\"notice\":\"Determine if the a sender is allowed to send to the receiver. The source whitelist must be enabled to send to the whitelist where the receive exists.\"},\"detectTransferRestriction(address,address,uint256)\":{\"notice\":\"This function detects whether a transfer should be restricted and not allowed. If the function returns SUCCESS_CODE (0) then it should be allowed.\"},\"disableRestrictions()\":{\"notice\":\"Function to update the enabled flag on restrictions to disabled.  Only the owner should be able to call. This is a permanent change that cannot be undone\"},\"initialize(string,string,address,address,uint256)\":{\"notice\":\"Initialize a new instance storage\"},\"isAdministrator(address)\":{\"notice\":\"Determine if the message sender is in the administrators list.\"},\"isRestrictionEnabled()\":{\"notice\":\"View function to determine if restrictions are enabled\"},\"messageForTransferRestriction(uint8)\":{\"notice\":\"This function allows a wallet or other client to get a human readable string to show a user if a transfer was restricted.  It should return enough information for the user to know why it failed.\"},\"mint(address,uint256)\":{\"notice\":\"Exposes the ability to mint new FDTs for a given account. Caller has to be the owner of the FDT.\"},\"pushFunds(address[])\":{\"notice\":\"Withdraws funds for a set of token holders\"},\"removeAdmin(address)\":{\"notice\":\"Remove an admin from the list.  This should only be callable by the owner of the contract.\"},\"removeFromWhitelist(address)\":{\"notice\":\"Clears out an address's white list ID.  Only administrators should be allowed to update this.\"},\"transfer(address,uint256)\":{\"notice\":\"Overrides the parent class token transfer function to enforce restrictions.\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Overrides the parent class token transferFrom function to enforce restrictions.\"},\"updateFundsReceived()\":{\"notice\":\"Register a payment of funds in tokens. May be called directly after a deposit is made.\"},\"updateOutboundWhitelistEnabled(uint8,uint8,bool)\":{\"notice\":\"Sets the flag to indicate whether source whitelist is allowed to send to destination whitelist. Only administrators should be allowed to update this.\"},\"withdrawFunds()\":{\"notice\":\"Withdraws all available funds for a token holder\"},\"withdrawableFundsOf(address)\":{\"notice\":\"prev. withdrawableDividendOfView the amount of funds that an address can withdraw.\"},\"withdrawnFundsOf(address)\":{\"notice\":\"prev. withdrawnDividendOfView the amount of funds that an address has withdrawn.\"}},\"notice\":\"This contract, unlike its parent contract, is entirely instantiated by the `constructor`. Therefore this contract may NOT be used with a proxy that `delegatecall`s it.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/SimpleRestrictedFDT.sol\":\"SimpleRestrictedFDT\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FundsDistributionToken.sol\":{\"keccak256\":\"0x91b13e01fdef718f2d5a64d9d4051dd8495913ac78c2309342e6af7656d1ee21\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d9a17efea849552722739b1ffb0878a80da99072e6af5d8c2bd563dce00ebc29\",\"dweb:/ipfs/QmamL6A7LoLuqwNngKY3NPzZgpihiBPERFCbVB5G5wuPT5\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IFundsDistributionToken.sol\":{\"keccak256\":\"0x357c01314146027ec6d250d5b29824bd795e00578b0b888b8c8063d1f49bfec8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4ba4486b5f8d60500cc1f8af3c9859c4bd0ee07a279f94b67ba1393391e54154\",\"dweb:/ipfs/QmNxYYnyPLh2vNJLzoPAVhHBxvuczBo24GDmRS61nD4ABv\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IInitializableFDT.sol\":{\"keccak256\":\"0x367de24e2fcd7cd02aabe65af0afc0c5184781135bb826835a82d406f33c93b5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f08d02e99e8daf2be5f2067c12f2c81aff1983fa49eebbe9cf5bea75ae4f308c\",\"dweb:/ipfs/QmX1xtraEs8QwFF9tBTBPnuoU5mP3k9X9U1Y9eMoEjNyB7\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/ProxySafeSimpleRestrictedFDT.sol\":{\"keccak256\":\"0x3cbae3a5c69a96dad8db5de755d9a17a7b635aeb9c25770855ac7899a5a0665d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1ad9eaacfed275668030c96df6cf42a7ba5bbb54a088876ac32284f463692746\",\"dweb:/ipfs/QmSKbdDZz9YpGVaZYfB4FkA7Y3cvGCRVJQ6Jpd2SFg5TaL\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/SimpleRestrictedFDT.sol\":{\"keccak256\":\"0x4811260a0943212abf5ab82da4d8673a1ab26312f719b77c2433ba775784bea0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ca501c22b99dea1a952294e6d2559628a4d9cf5b9bf4830c2f5eb9e6a3225641\",\"dweb:/ipfs/QmVg2mHcLSoaSuGjFTSR6h6YSNy2VjkXsJ5LR3dwtFs4gk\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/math/SafeMathInt.sol\":{\"keccak256\":\"0xc53b786fe1e9a4a207e503272ca7bf485f4872a196fcdf9b209ff18a025857ae\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://99aef73723a7dac14a7a407036d85fe6070ea280e8509f214bf709321c1b7d68\",\"dweb:/ipfs/QmQW5ygUX2EJMQkUmNt3q18VrtrCEiNeape7JaUh19p1tF\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/math/SafeMathUint.sol\":{\"keccak256\":\"0xdba5f11842c7ef0d82b4fdccf5430ae81d677c426a8bbe1c5dd4df62ab9e43d9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://216bba31081f8f7bae15fbd79648300a04740c472f23957963354497d82d86b2\",\"dweb:/ipfs/QmXMnSfoSKbobfQkcRExx8RC5ZSPCCiNdcb1xy3v3vGgWV\"]},\"@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol\":{\"keccak256\":\"0xe81686511d62f18b2d9c693c2c94c0a789c690de63aa90e15451ebf65c5bfd3e\",\"urls\":[\"bzz-raw://1332ee1d2b096456bf2e5795b5871d0fed47be6a31c9a2f2cef9206a299565ea\",\"dweb:/ipfs/Qmdu1847Y4UL3gTjbLUManMGfxYEoyGPSodM3Br89SKzwx\"]},\"@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol\":{\"keccak256\":\"0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721\",\"urls\":[\"bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f\",\"dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7\"]},\"@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol\":{\"keccak256\":\"0x04a69a78363214b4e3055db8e620bed222349f0c81e9d1cbe769eb849b69b73f\",\"urls\":[\"bzz-raw://b3115459376196d6c2c3817439c169d9b052b27b70e8ee2e28963cda760736da\",\"dweb:/ipfs/QmXaNF5rmcDSAzBiFMQjf979qb9xNXqD9eZtgo4uM9VEis\"]},\"@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x04d34b3cd5677bea25f8dfceb6dec0eaa071d4d4b789a43f13fe0c415ba4c296\",\"urls\":[\"bzz-raw://e7e8b526a6839e5ba14f0d23a830387fec47f7043ce01d42c9f285b709a9d080\",\"dweb:/ipfs/QmXmhhFmX5gcAvVzNiDPAGA35iHMPNaYtQkACswRHBVTNw\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x9c2d859bc9de93ced0875d226598e56067fe4d6b2dde0e1fd53ca60fa9603db0\",\"urls\":[\"bzz-raw://5df1baba4ea42a94d0e0aed4a87271369ef2cd54d86e89cab7ef1428ff387210\",\"dweb:/ipfs/QmV5ErriAFQWqEPAfWhJ6DxmujH6vBPB3F5Breaq9vUWGu\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x6cc1cb934a3ac2137a7dcaed018af9e235392236ceecfd3687259702b9c767ad\",\"urls\":[\"bzz-raw://0055fa88138cd1c3c6440370f8580f85857f8fe9dec41c99af9eafbeb8d9c3ce\",\"dweb:/ipfs/QmX1xDh8vwGLLCH8ti45eXjQ7Wcxv1FEGTR3jkFnd5Nv6F\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol\":{\"keccak256\":\"0x5f7da58ee3d9faa9b8999a93d49c8ff978f1afc88ae9bcfc6f9cbb44da011c2b\",\"urls\":[\"bzz-raw://4f089d954b3ecaa26949412fe63e9a184b056562c6c13dd4a0529a5d9a2e685a\",\"dweb:/ipfs/QmVK5iCNAMcEJQxT59bsC5E53JQASDQPU6khHox3d5ZXCn\"]}},\"version\":1}",
  "bytecode": "0x608060405260cf805460ff191660011790553480156200001e57600080fd5b50604051620039ce380380620039ce833981810160405260a08110156200004457600080fd5b81019080805160405193929190846401000000008211156200006557600080fd5b9083019060208201858111156200007b57600080fd5b82516401000000008111828201881017156200009657600080fd5b82525081516020918201929091019080838360005b83811015620000c5578181015183820152602001620000ab565b50505050905090810190601f168015620000f35780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011757600080fd5b9083019060208201858111156200012d57600080fd5b82516401000000008111828201881017156200014857600080fd5b82525081516020918201929091019080838360005b83811015620001775781810151838201526020016200015d565b50505050905090810190601f168015620001a55780820380516001836020036101000a031916815260200191505b506040908152602082015190820151606090920151909350909150620001d885858585856001600160e01b03620001e316565b505050505062000c21565b600054610100900460ff1680620002085750620002086001600160e01b036200034e16565b8062000217575060005460ff16155b620002545760405162461bcd60e51b815260040180806020018281038252602e815260200180620039a0602e913960400191505060405180910390fd5b600054610100900460ff1615801562000280576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038416620002c75760405162461bcd60e51b81526004018080602001828103825260308152602001806200392f6030913960400191505060405180910390fd5b620002de86866200035560201b620019d51760201c565b620002f36200043260201b62001a8b1760201c565b60cf8054610100600160a81b0319166101006001600160a01b038716021790556200031e836200050b565b6200033383836001600160e01b036200061316565b801562000346576000805461ff00191690555b505050505050565b303b155b90565b600054610100900460ff16806200037a57506200037a6001600160e01b036200034e16565b8062000389575060005460ff16155b620003c65760405162461bcd60e51b815260040180806020018281038252602e815260200180620039a0602e913960400191505060405180910390fd5b600054610100900460ff16158015620003f2576000805460ff1961ff0019909116610100171660011790555b620004056001600160e01b03620006ac16565b6200041a83836001600160e01b036200075d16565b80156200042d576000805461ff00191690555b505050565b600054610100900460ff1680620004575750620004576001600160e01b036200034e16565b8062000466575060005460ff16155b620004a35760405162461bcd60e51b815260040180806020018281038252602e815260200180620039a0602e913960400191505060405180910390fd5b600054610100900460ff16158015620004cf576000805460ff1961ff0019909116610100171660011790555b620004e26001600160e01b03620006ac16565b620004f56001600160e01b036200084a16565b801562000508576000805461ff00191690555b50565b6200051e6001600160e01b036200094e16565b609a546001600160a01b0390811691161462000581576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005c85760405162461bcd60e51b8152600401808060200182810382526026815260200180620039096026913960400191505060405180910390fd5b609a546040516001600160a01b038084169216906000805160206200398083398151915290600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b6200062a82826200095260201b62001b3c1760201c565b6200068c6200065f6200064e8360975462000a6e60201b62001c3a1790919060201c565b62000ad560201b62001c931760201c565b6001600160a01b038416600090815260986020908152604090912054919062001ca362000ae6821b17901c565b6001600160a01b0390921660009081526098602052604090209190915550565b600054610100900460ff1680620006d15750620006d16001600160e01b036200034e16565b80620006e0575060005460ff16155b6200071d5760405162461bcd60e51b815260040180806020018281038252602e815260200180620039a0602e913960400191505060405180910390fd5b600054610100900460ff16158015620004f5576000805460ff1961ff001990911661010017166001179055801562000508576000805461ff001916905550565b600054610100900460ff1680620007825750620007826001600160e01b036200034e16565b8062000791575060005460ff16155b620007ce5760405162461bcd60e51b815260040180806020018281038252602e815260200180620039a0602e913960400191505060405180910390fd5b600054610100900460ff16158015620007fa576000805460ff1961ff0019909116610100171660011790555b82516200080f90606890602086019062000b7f565b5081516200082590606990602085019062000b7f565b50606a805460ff1916601217905580156200042d576000805461ff0019169055505050565b600054610100900460ff16806200086f57506200086f6001600160e01b036200034e16565b806200087e575060005460ff16155b620008bb5760405162461bcd60e51b815260040180806020018281038252602e815260200180620039a0602e913960400191505060405180910390fd5b600054610100900460ff16158015620008e7576000805460ff1961ff0019909116610100171660011790555b6000620008fc6001600160e01b036200094e16565b609a80546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003980833981519152908290a350801562000508576000805461ff001916905550565b3390565b6001600160a01b038216620009ae576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b620009c5600083836001600160e01b036200042d16565b620009e18160675462000b2460201b62001cdd1790919060201c565b6067556001600160a01b03821660009081526065602090815260409091205462000a1691839062001cdd62000b24821b17901c565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008262000a7f5750600062000acf565b8282028284828162000a8d57fe5b041462000acc5760405162461bcd60e51b81526004018080602001828103825260218152602001806200395f6021913960400191505060405180910390fd5b90505b92915050565b6000818181121562000acf57600080fd5b600080821215801562000afb57508282840313155b8062000b14575060008212801562000b14575082828403135b62000b1e57600080fd5b50900390565b60008282018381101562000acc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000bc257805160ff191683800117855562000bf2565b8280016001018555821562000bf2579182015b8281111562000bf257825182559160200191906001019062000bd5565b5062000c0092915062000c04565b5090565b6200035291905b8082111562000c00576000815560010162000c0b565b612cd88062000c316000396000f3fe608060405234801561001057600080fd5b50600436106102735760003560e01c806370a0823111610151578063a457c2d7116100c3578063d4ce141511610087578063d4ce141514610910578063dce306ad14610946578063dd62ed3e1461094e578063e7984d171461097c578063e959450814610984578063f2fde38b146109ac57610273565b8063a457c2d714610763578063a9059cbb1461078f578063a9691f3f146107bb578063c8934462146107c3578063c9aba0aa146107cb57610273565b80638da5cb5b116101155780638da5cb5b146106cb57806392e6d68b146106d35780639437e2fe146106f957806395d89b411461072757806397af67441461072f5780639dc29fac1461073757610273565b806370a0823114610631578063715018a61461065757806376be15851461065f5780637f4ab1dd146106855780638ab1d681146106a557610273565b80632a642407116101ea578063443bb293116101ae578063443bb293146104f057806345f634f21461051657806346c162de146105b95780634e97415f146105c157806363f04b15146105e7578063704802751461060b57610273565b80632a64240714610456578063313ce5671461045e57806339509351146104665780633973b5961461049257806340c10f19146104c457610273565b80630e969a051161023c5780630e969a05146103c45780631785f53c146103e257806318160ddd146104085780631fb45ec01461041057806323b872dd1461041857806324600fc31461044e57610273565b806241c52c146102785780630263b858146102b057806306fdde03146102e1578063095ea7b31461035e5780630a2eb3011461039e575b600080fd5b61029e6004803603602081101561028e57600080fd5b50356001600160a01b03166109d2565b60408051918252519081900360200190f35b6102df600480360360408110156102c657600080fd5b5080356001600160a01b0316906020013560ff166109f1565b005b6102e9610b35565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032357818101518382015260200161030b565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61038a6004803603604081101561037457600080fd5b506001600160a01b038135169060200135610bcc565b604080519115158252519081900360200190f35b61038a600480360360208110156103b457600080fd5b50356001600160a01b0316610bea565b6103cc610c08565b6040805160ff9092168252519081900360200190f35b6102df600480360360208110156103f857600080fd5b50356001600160a01b0316610c0d565b61029e610d0c565b6103cc610d12565b61038a6004803603606081101561042e57600080fd5b506001600160a01b03813581169160208101359091169060400135610d17565b6102df610dda565b61038a610de5565b6103cc610dee565b61038a6004803603604081101561047c57600080fd5b506001600160a01b038135169060200135610df7565b6102df600480360360608110156104a857600080fd5b5060ff8135811691602081013590911690604001351515610e50565b61038a600480360360408110156104da57600080fd5b506001600160a01b038135169060200135610f0d565b61029e6004803603602081101561050657600080fd5b50356001600160a01b0316610f71565b6102df6004803603602081101561052c57600080fd5b81019060208101813564010000000081111561054757600080fd5b82018360208201111561055957600080fd5b8035906020019184602083028401116401000000008311171561057b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610fa3945050505050565b6102df610fd7565b61029e600480360360208110156105d757600080fd5b50356001600160a01b0316611000565b6105ef611069565b604080516001600160a01b039092168252519081900360200190f35b6102df6004803603602081101561062157600080fd5b50356001600160a01b031661107d565b61029e6004803603602081101561064757600080fd5b50356001600160a01b031661117b565b6102df611196565b61038a6004803603602081101561067557600080fd5b50356001600160a01b0316611238565b6102e96004803603602081101561069b57600080fd5b503560ff1661124d565b6102df600480360360208110156106bb57600080fd5b50356001600160a01b03166112d5565b6105ef611370565b6103cc600480360360208110156106e957600080fd5b50356001600160a01b031661137f565b61038a6004803603604081101561070f57600080fd5b506001600160a01b0381358116916020013516611394565b6102e9611406565b6102e9611467565b61038a6004803603604081101561074d57600080fd5b506001600160a01b038135169060200135611495565b61038a6004803603604081101561077957600080fd5b506001600160a01b0381351690602001356114f9565b61038a600480360360408110156107a557600080fd5b506001600160a01b038135169060200135611567565b61029e6115eb565b6102e96115f1565b6102df600480360360a08110156107e157600080fd5b8101906020810181356401000000008111156107fc57600080fd5b82018360208201111561080e57600080fd5b8035906020019184600183028401116401000000008311171561083057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460018302840111640100000000831117156108b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260400135915061160d9050565b6103cc6004803603606081101561092657600080fd5b506001600160a01b0381358116916020810135909116906040013561173e565b6102df61179e565b61029e6004803603604081101561096457600080fd5b506001600160a01b038135811691602001351661186e565b6102e9611899565b61038a6004803603604081101561099a57600080fd5b5060ff813581169160200135166118bc565b6102df600480360360208110156109c257600080fd5b50356001600160a01b03166118dc565b6001600160a01b0381166000908152609960205260409020545b919050565b6109fa33610bea565b610a355760405162461bcd60e51b8152600401808060200182810382526028815260200180612a906028913960400191505060405180910390fd5b60ff8116610a8a576040805162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077686974656c69737420494420737570706c696564000000604482015290519081900360640190fd5b6001600160a01b038216600090815260cd60205260409020805460ff83811660ff19831617909255168015610af557604051339060ff8316906001600160a01b038616907fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e90600090a45b604051339060ff8416906001600160a01b038616907fca6d1e885708b837a7647aeb7f4163ee4ca96058e08ac767be8d23c972c5027090600090a4505050565b60688054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bc15780601f10610b9657610100808354040283529160200191610bc1565b820191906000526020600020905b815481529060010190602001808311610ba457829003601f168201915b505050505090505b90565b6000610be0610bd9611d37565b8484611d3b565b5060015b92915050565b6001600160a01b0316600090815260cc602052604090205460ff1690565b600081565b610c15611d37565b609a546001600160a01b03908116911614610c65576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260cc602052604090205460ff161515600114610cc15760405162461bcd60e51b815260040180806020018281038252603d8152602001806129f6603d913960400191505060405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19169055513392917fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce91a350565b60675490565b600181565b60008383836000610d2984848461173e565b905060ff811615610d398261124d565b90610dc25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d87578181015183820152602001610d6f565b50505050905090810190601f168015610db45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610dce888888611e27565b98975050505050505050565b610de333611eaf565b565b60cf5460ff1690565b606a5460ff1690565b6000610be0610e04611d37565b84610e4b8560666000610e15611d37565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611cdd16565b611d3b565b610e5933610bea565b610e945760405162461bcd60e51b8152600401808060200182810382526028815260200180612a906028913960400191505060405180910390fd5b60ff838116600081815260ce6020908152604080832087861680855290835292819020805487151560ff1982168117909255825196168015158752928601528051919492939233927fb0353d563a9aa5231878c83727dc723a3cb8a38c2917f8ac2b777aa564c8a0d5929181900390910190a450505050565b6000610f17611d37565b609a546001600160a01b03908116911614610f67576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b610be08383611f86565b6001600160a01b038116600090815260996020526040812054610be490610f9784611000565b9063ffffffff611ff016565b60005b8151811015610fd357610fcb828281518110610fbe57fe5b6020026020010151611eaf565b600101610fa6565b5050565b6000610fe1612032565b90506000811315610ffd57610ffd610ff8826120cd565b6120e0565b50565b6001600160a01b038116600090815260986020526040812054600160801b9061105b906110569061104a6110456110368861117b565b6097549063ffffffff611c3a16565b611c93565b9063ffffffff61219f16565b6120cd565b8161106257fe5b0492915050565b60cf5461010090046001600160a01b031681565b611085611d37565b609a546001600160a01b039081169116146110d5576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260cc602052604090205460ff161561112d5760405162461bcd60e51b8152600401808060200182810382526035815260200180612c6e6035913960400191505060405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19166001179055513392917fbf3f493c772c8c283fd124432c2d0f539ab343faa04258fe88e52912d36b102b91a350565b6001600160a01b031660009081526065602052604090205490565b61119e611d37565b609a546001600160a01b039081169116146111ee576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609a80546001600160a01b0319169055565b60cc6020526000908152604090205460ff1681565b606060ff821661127b57506040805180820190915260078152665355434345535360c81b60208201526109ec565b60ff8216600114156112a7576040518060600160405280603c8152602001612bdb603c913990506109ec565b5050604080518082019091526012815271556e6b6e6f776e204572726f7220436f646560701b602082015290565b6112de33610bea565b6113195760405162461bcd60e51b8152600401808060200182810382526028815260200180612a906028913960400191505060405180910390fd5b6001600160a01b038116600081815260cd6020526040808220805460ff198116909155905160ff90911692339284927fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e9190a45050565b609a546001600160a01b031690565b60cd6020526000908152604090205460ff1681565b6001600160a01b03808316600090815260cd6020526040808220549284168252812054909160ff90811691168115806113ce575060ff8116155b156113de57600092505050610be4565b60ff918216600090815260ce6020908152604080832093851683529290522054169392505050565b60698054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bc15780601f10610b9657610100808354040283529160200191610bc1565b60405180604001604052806012815260200171556e6b6e6f776e204572726f7220436f646560701b81525081565b600061149f611d37565b609a546001600160a01b039081169116146114ef576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b610be083836121d2565b6000610be0611506611d37565b84610e4b85604051806060016040528060258152602001612c176025913960666000611530611d37565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61221c16565b6000338383600061157984848461173e565b905060ff8116156115898261124d565b906115d55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d87578181015183820152602001610d6f565b506115e08787612276565b979650505050505050565b60d05481565b6040518060600160405280603c8152602001612bdb603c913981565b600054610100900460ff1680611626575061162661228a565b80611634575060005460ff16155b61166f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff1615801561169a576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0384166116df5760405162461bcd60e51b81526004018080602001828103825260308152602001806129c66030913960400191505060405180910390fd5b6116e986866119d5565b6116f1611a8b565b60cf8054610100600160a81b0319166101006001600160a01b0387160217905561171a836118dc565b6117248383611f86565b8015611736576000805461ff00191690555b505050505050565b6000611748610de5565b61175457506000611797565b61175c611370565b6001600160a01b0316846001600160a01b0316141561177d57506000611797565b6117878484611394565b61179357506001611797565b5060005b9392505050565b6117a6611d37565b609a546001600160a01b039081169116146117f6576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b60cf5460ff166118375760405162461bcd60e51b8152600401808060200182810382526022815260200180612b4f6022913960400191505060405180910390fd5b60cf805460ff1916905560405133907f3c13a557aa89734e312c348465096b4ddc97709822675c45090f4e2a8d6c4f2b90600090a2565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b604051806040016040528060078152602001665355434345535360c81b81525081565b60ce60209081526000928352604080842090915290825290205460ff1681565b6118e4611d37565b609a546001600160a01b03908116911614611934576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b6001600160a01b0381166119795760405162461bcd60e51b815260040180806020018281038252602681526020018061297e6026913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806119ee57506119ee61228a565b806119fc575060005460ff16155b611a375760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff16158015611a62576000805460ff1961ff0019909116610100171660011790555b611a6a612290565b611a748383612330565b8015611a86576000805461ff00191690555b505050565b600054610100900460ff1680611aa45750611aa461228a565b80611ab2575060005460ff16155b611aed5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff16158015611b18576000805460ff1961ff0019909116610100171660011790555b611b20612290565b611b28612408565b8015610ffd576000805461ff001916905550565b6001600160a01b038216611b97576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611ba360008383611a86565b606754611bb6908263ffffffff611cdd16565b6067556001600160a01b038216600090815260656020526040902054611be2908263ffffffff611cdd16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082611c4957506000610be4565b82820282848281611c5657fe5b04146117975760405162461bcd60e51b8152600401808060200182810382526021815260200180612ab86021913960400191505060405180910390fd5b60008181811215610be457600080fd5b6000808212158015611cb757508282840313155b80611cce5750600082128015611cce575082828403135b611cd757600080fd5b50900390565b600082820183811015611797576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b038316611d805760405162461bcd60e51b8152600401808060200182810382526024815260200180612bb76024913960400191505060405180910390fd5b6001600160a01b038216611dc55760405162461bcd60e51b81526004018080602001828103825260228152602001806129a46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611e34848484612501565b611ea584611e40611d37565b610e4b85604051806060016040528060288152602001612ad9602891396001600160a01b038a16600090815260666020526040812090611e7e611d37565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61221c16565b5060019392505050565b6000611eba826125a9565b60cf546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151939450610100909204169163a9059cbb916044808201926020929091908290030181600087803b158015611f1757600080fd5b505af1158015611f2b573d6000803e3d6000fd5b505050506040513d6020811015611f4157600080fd5b5051611f7e5760405162461bcd60e51b8152600401808060200182810382526032815260200180612c3c6032913960400191505060405180910390fd5b611a86612032565b611f908282611b3c565b611fd0611fab61104583609754611c3a90919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff611ca316565b6001600160a01b0390921660009081526098602052604090209190915550565b600061179783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061221c565b60d05460cf54604080516370a0823160e01b815230600482015290516000939261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561208657600080fd5b505afa15801561209a573d6000803e3d6000fd5b505050506040513d60208110156120b057600080fd5b505160d08190556120c7908263ffffffff611ca316565b91505090565b6000808212156120dc57600080fd5b5090565b60006120ea610d0c565b116121265760405162461bcd60e51b8152600401808060200182810382526037815260200180612a596037913960400191505060405180910390fd5b8015610ffd57612163612137610d0c565b61214b83600160801b63ffffffff611c3a16565b8161215257fe5b60975491900463ffffffff611cdd16565b60975560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a250565b60008282018183128015906121b45750838112155b806121c957506000831280156121c957508381125b61179757600080fd5b6121dc8282612639565b611fd06121f761104583609754611c3a90919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff61219f16565b6000818484111561226e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d87578181015183820152602001610d6f565b505050900390565b6000610be0612283611d37565b8484612501565b303b1590565b600054610100900460ff16806122a957506122a961228a565b806122b7575060005460ff16155b6122f25760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff16158015611b28576000805460ff1961ff0019909116610100171660011790558015610ffd576000805461ff001916905550565b600054610100900460ff1680612349575061234961228a565b80612357575060005460ff16155b6123925760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff161580156123bd576000805460ff1961ff0019909116610100171660011790555b82516123d09060689060208601906128aa565b5081516123e49060699060208501906128aa565b50606a805460ff191660121790558015611a86576000805461ff0019169055505050565b600054610100900460ff1680612421575061242161228a565b8061242f575060005460ff16155b61246a5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff16158015612495576000805460ff1961ff0019909116610100171660011790555b600061249f611d37565b609a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ffd576000805461ff001916905550565b61250c838383612741565b600061252661104583609754611c3a90919063ffffffff16565b6001600160a01b038516600090815260986020526040902054909150612552908263ffffffff61219f16565b6001600160a01b038086166000908152609860205260408082209390935590851681522054612587908263ffffffff611ca316565b6001600160a01b03909316600090815260986020526040902092909255505050565b6000806125b583610f71565b6001600160a01b0384166000908152609960205260409020549091506125e1908263ffffffff611cdd16565b6001600160a01b038416600081815260996020908152604091829020939093558051848152905191927feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d92918290030190a292915050565b6001600160a01b03821661267e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612b716021913960400191505060405180910390fd5b61268a82600083611a86565b6126cd8160405180606001604052806022815260200161295c602291396001600160a01b038516600090815260656020526040902054919063ffffffff61221c16565b6001600160a01b0383166000908152606560205260409020556067546126f9908263ffffffff611ff016565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b0383166127865760405162461bcd60e51b8152600401808060200182810382526025815260200180612b926025913960400191505060405180910390fd5b6001600160a01b0382166127cb5760405162461bcd60e51b81526004018080602001828103825260238152602001806129396023913960400191505060405180910390fd5b6127d6838383611a86565b61281981604051806060016040528060268152602001612a33602691396001600160a01b038616600090815260656020526040902054919063ffffffff61221c16565b6001600160a01b03808516600090815260656020526040808220939093559084168152205461284e908263ffffffff611cdd16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128eb57805160ff1916838001178555612918565b82800160010185558215612918579182015b828111156129185782518255916020019190600101906128fd565b506120dc92610bc99250905b808211156120dc576000815560010161292456fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737353696d706c65526573747269637465644644543a20494e56414c49445f46554e44535f544f4b454e5f414444524553534163636f756e7420746f2062652072656d6f7665642066726f6d2061646d696e206c697374206973206e6f7420616c726561647920616e2061646d696e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546756e6473446973747269627574696f6e546f6b656e2e5f6469737472696275746546756e64733a20535550504c595f49535f5a45524f43616c6c696e67206163636f756e74206973206e6f7420616e2061646d696e6973747261746f722e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645265737472696374696f6e732061726520616c72656164792064697361626c65642e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373546865207472616e736665722077617320726573747269637465642064756520746f207768697465206c69737420636f6e66696775726174696f6e2e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f53696d706c65526573747269637465644644542e776974686472617746756e64733a205452414e534645525f4641494c45444163636f756e7420746f20626520616464656420746f2061646d696e206c69737420697320616c726561647920616e2061646d696ea264697066735822122061ee14b47ac14bcd2ffb6a56e5edd88d1ebea680302b13278dd7a0d342bd6b8864736f6c634300060b00334f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737353696d706c65526573747269637465644644543a20494e56414c49445f46554e44535f544f4b454e5f41444452455353536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102735760003560e01c806370a0823111610151578063a457c2d7116100c3578063d4ce141511610087578063d4ce141514610910578063dce306ad14610946578063dd62ed3e1461094e578063e7984d171461097c578063e959450814610984578063f2fde38b146109ac57610273565b8063a457c2d714610763578063a9059cbb1461078f578063a9691f3f146107bb578063c8934462146107c3578063c9aba0aa146107cb57610273565b80638da5cb5b116101155780638da5cb5b146106cb57806392e6d68b146106d35780639437e2fe146106f957806395d89b411461072757806397af67441461072f5780639dc29fac1461073757610273565b806370a0823114610631578063715018a61461065757806376be15851461065f5780637f4ab1dd146106855780638ab1d681146106a557610273565b80632a642407116101ea578063443bb293116101ae578063443bb293146104f057806345f634f21461051657806346c162de146105b95780634e97415f146105c157806363f04b15146105e7578063704802751461060b57610273565b80632a64240714610456578063313ce5671461045e57806339509351146104665780633973b5961461049257806340c10f19146104c457610273565b80630e969a051161023c5780630e969a05146103c45780631785f53c146103e257806318160ddd146104085780631fb45ec01461041057806323b872dd1461041857806324600fc31461044e57610273565b806241c52c146102785780630263b858146102b057806306fdde03146102e1578063095ea7b31461035e5780630a2eb3011461039e575b600080fd5b61029e6004803603602081101561028e57600080fd5b50356001600160a01b03166109d2565b60408051918252519081900360200190f35b6102df600480360360408110156102c657600080fd5b5080356001600160a01b0316906020013560ff166109f1565b005b6102e9610b35565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032357818101518382015260200161030b565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61038a6004803603604081101561037457600080fd5b506001600160a01b038135169060200135610bcc565b604080519115158252519081900360200190f35b61038a600480360360208110156103b457600080fd5b50356001600160a01b0316610bea565b6103cc610c08565b6040805160ff9092168252519081900360200190f35b6102df600480360360208110156103f857600080fd5b50356001600160a01b0316610c0d565b61029e610d0c565b6103cc610d12565b61038a6004803603606081101561042e57600080fd5b506001600160a01b03813581169160208101359091169060400135610d17565b6102df610dda565b61038a610de5565b6103cc610dee565b61038a6004803603604081101561047c57600080fd5b506001600160a01b038135169060200135610df7565b6102df600480360360608110156104a857600080fd5b5060ff8135811691602081013590911690604001351515610e50565b61038a600480360360408110156104da57600080fd5b506001600160a01b038135169060200135610f0d565b61029e6004803603602081101561050657600080fd5b50356001600160a01b0316610f71565b6102df6004803603602081101561052c57600080fd5b81019060208101813564010000000081111561054757600080fd5b82018360208201111561055957600080fd5b8035906020019184602083028401116401000000008311171561057b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610fa3945050505050565b6102df610fd7565b61029e600480360360208110156105d757600080fd5b50356001600160a01b0316611000565b6105ef611069565b604080516001600160a01b039092168252519081900360200190f35b6102df6004803603602081101561062157600080fd5b50356001600160a01b031661107d565b61029e6004803603602081101561064757600080fd5b50356001600160a01b031661117b565b6102df611196565b61038a6004803603602081101561067557600080fd5b50356001600160a01b0316611238565b6102e96004803603602081101561069b57600080fd5b503560ff1661124d565b6102df600480360360208110156106bb57600080fd5b50356001600160a01b03166112d5565b6105ef611370565b6103cc600480360360208110156106e957600080fd5b50356001600160a01b031661137f565b61038a6004803603604081101561070f57600080fd5b506001600160a01b0381358116916020013516611394565b6102e9611406565b6102e9611467565b61038a6004803603604081101561074d57600080fd5b506001600160a01b038135169060200135611495565b61038a6004803603604081101561077957600080fd5b506001600160a01b0381351690602001356114f9565b61038a600480360360408110156107a557600080fd5b506001600160a01b038135169060200135611567565b61029e6115eb565b6102e96115f1565b6102df600480360360a08110156107e157600080fd5b8101906020810181356401000000008111156107fc57600080fd5b82018360208201111561080e57600080fd5b8035906020019184600183028401116401000000008311171561083057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460018302840111640100000000831117156108b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260400135915061160d9050565b6103cc6004803603606081101561092657600080fd5b506001600160a01b0381358116916020810135909116906040013561173e565b6102df61179e565b61029e6004803603604081101561096457600080fd5b506001600160a01b038135811691602001351661186e565b6102e9611899565b61038a6004803603604081101561099a57600080fd5b5060ff813581169160200135166118bc565b6102df600480360360208110156109c257600080fd5b50356001600160a01b03166118dc565b6001600160a01b0381166000908152609960205260409020545b919050565b6109fa33610bea565b610a355760405162461bcd60e51b8152600401808060200182810382526028815260200180612a906028913960400191505060405180910390fd5b60ff8116610a8a576040805162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077686974656c69737420494420737570706c696564000000604482015290519081900360640190fd5b6001600160a01b038216600090815260cd60205260409020805460ff83811660ff19831617909255168015610af557604051339060ff8316906001600160a01b038616907fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e90600090a45b604051339060ff8416906001600160a01b038616907fca6d1e885708b837a7647aeb7f4163ee4ca96058e08ac767be8d23c972c5027090600090a4505050565b60688054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bc15780601f10610b9657610100808354040283529160200191610bc1565b820191906000526020600020905b815481529060010190602001808311610ba457829003601f168201915b505050505090505b90565b6000610be0610bd9611d37565b8484611d3b565b5060015b92915050565b6001600160a01b0316600090815260cc602052604090205460ff1690565b600081565b610c15611d37565b609a546001600160a01b03908116911614610c65576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260cc602052604090205460ff161515600114610cc15760405162461bcd60e51b815260040180806020018281038252603d8152602001806129f6603d913960400191505060405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19169055513392917fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce91a350565b60675490565b600181565b60008383836000610d2984848461173e565b905060ff811615610d398261124d565b90610dc25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d87578181015183820152602001610d6f565b50505050905090810190601f168015610db45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610dce888888611e27565b98975050505050505050565b610de333611eaf565b565b60cf5460ff1690565b606a5460ff1690565b6000610be0610e04611d37565b84610e4b8560666000610e15611d37565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611cdd16565b611d3b565b610e5933610bea565b610e945760405162461bcd60e51b8152600401808060200182810382526028815260200180612a906028913960400191505060405180910390fd5b60ff838116600081815260ce6020908152604080832087861680855290835292819020805487151560ff1982168117909255825196168015158752928601528051919492939233927fb0353d563a9aa5231878c83727dc723a3cb8a38c2917f8ac2b777aa564c8a0d5929181900390910190a450505050565b6000610f17611d37565b609a546001600160a01b03908116911614610f67576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b610be08383611f86565b6001600160a01b038116600090815260996020526040812054610be490610f9784611000565b9063ffffffff611ff016565b60005b8151811015610fd357610fcb828281518110610fbe57fe5b6020026020010151611eaf565b600101610fa6565b5050565b6000610fe1612032565b90506000811315610ffd57610ffd610ff8826120cd565b6120e0565b50565b6001600160a01b038116600090815260986020526040812054600160801b9061105b906110569061104a6110456110368861117b565b6097549063ffffffff611c3a16565b611c93565b9063ffffffff61219f16565b6120cd565b8161106257fe5b0492915050565b60cf5461010090046001600160a01b031681565b611085611d37565b609a546001600160a01b039081169116146110d5576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260cc602052604090205460ff161561112d5760405162461bcd60e51b8152600401808060200182810382526035815260200180612c6e6035913960400191505060405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19166001179055513392917fbf3f493c772c8c283fd124432c2d0f539ab343faa04258fe88e52912d36b102b91a350565b6001600160a01b031660009081526065602052604090205490565b61119e611d37565b609a546001600160a01b039081169116146111ee576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609a80546001600160a01b0319169055565b60cc6020526000908152604090205460ff1681565b606060ff821661127b57506040805180820190915260078152665355434345535360c81b60208201526109ec565b60ff8216600114156112a7576040518060600160405280603c8152602001612bdb603c913990506109ec565b5050604080518082019091526012815271556e6b6e6f776e204572726f7220436f646560701b602082015290565b6112de33610bea565b6113195760405162461bcd60e51b8152600401808060200182810382526028815260200180612a906028913960400191505060405180910390fd5b6001600160a01b038116600081815260cd6020526040808220805460ff198116909155905160ff90911692339284927fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e9190a45050565b609a546001600160a01b031690565b60cd6020526000908152604090205460ff1681565b6001600160a01b03808316600090815260cd6020526040808220549284168252812054909160ff90811691168115806113ce575060ff8116155b156113de57600092505050610be4565b60ff918216600090815260ce6020908152604080832093851683529290522054169392505050565b60698054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bc15780601f10610b9657610100808354040283529160200191610bc1565b60405180604001604052806012815260200171556e6b6e6f776e204572726f7220436f646560701b81525081565b600061149f611d37565b609a546001600160a01b039081169116146114ef576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b610be083836121d2565b6000610be0611506611d37565b84610e4b85604051806060016040528060258152602001612c176025913960666000611530611d37565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61221c16565b6000338383600061157984848461173e565b905060ff8116156115898261124d565b906115d55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d87578181015183820152602001610d6f565b506115e08787612276565b979650505050505050565b60d05481565b6040518060600160405280603c8152602001612bdb603c913981565b600054610100900460ff1680611626575061162661228a565b80611634575060005460ff16155b61166f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff1615801561169a576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0384166116df5760405162461bcd60e51b81526004018080602001828103825260308152602001806129c66030913960400191505060405180910390fd5b6116e986866119d5565b6116f1611a8b565b60cf8054610100600160a81b0319166101006001600160a01b0387160217905561171a836118dc565b6117248383611f86565b8015611736576000805461ff00191690555b505050505050565b6000611748610de5565b61175457506000611797565b61175c611370565b6001600160a01b0316846001600160a01b0316141561177d57506000611797565b6117878484611394565b61179357506001611797565b5060005b9392505050565b6117a6611d37565b609a546001600160a01b039081169116146117f6576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b60cf5460ff166118375760405162461bcd60e51b8152600401808060200182810382526022815260200180612b4f6022913960400191505060405180910390fd5b60cf805460ff1916905560405133907f3c13a557aa89734e312c348465096b4ddc97709822675c45090f4e2a8d6c4f2b90600090a2565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b604051806040016040528060078152602001665355434345535360c81b81525081565b60ce60209081526000928352604080842090915290825290205460ff1681565b6118e4611d37565b609a546001600160a01b03908116911614611934576040805162461bcd60e51b81526020600482018190526024820152600080516020612b01833981519152604482015290519081900360640190fd5b6001600160a01b0381166119795760405162461bcd60e51b815260040180806020018281038252602681526020018061297e6026913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806119ee57506119ee61228a565b806119fc575060005460ff16155b611a375760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff16158015611a62576000805460ff1961ff0019909116610100171660011790555b611a6a612290565b611a748383612330565b8015611a86576000805461ff00191690555b505050565b600054610100900460ff1680611aa45750611aa461228a565b80611ab2575060005460ff16155b611aed5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff16158015611b18576000805460ff1961ff0019909116610100171660011790555b611b20612290565b611b28612408565b8015610ffd576000805461ff001916905550565b6001600160a01b038216611b97576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611ba360008383611a86565b606754611bb6908263ffffffff611cdd16565b6067556001600160a01b038216600090815260656020526040902054611be2908263ffffffff611cdd16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082611c4957506000610be4565b82820282848281611c5657fe5b04146117975760405162461bcd60e51b8152600401808060200182810382526021815260200180612ab86021913960400191505060405180910390fd5b60008181811215610be457600080fd5b6000808212158015611cb757508282840313155b80611cce5750600082128015611cce575082828403135b611cd757600080fd5b50900390565b600082820183811015611797576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b038316611d805760405162461bcd60e51b8152600401808060200182810382526024815260200180612bb76024913960400191505060405180910390fd5b6001600160a01b038216611dc55760405162461bcd60e51b81526004018080602001828103825260228152602001806129a46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611e34848484612501565b611ea584611e40611d37565b610e4b85604051806060016040528060288152602001612ad9602891396001600160a01b038a16600090815260666020526040812090611e7e611d37565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61221c16565b5060019392505050565b6000611eba826125a9565b60cf546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151939450610100909204169163a9059cbb916044808201926020929091908290030181600087803b158015611f1757600080fd5b505af1158015611f2b573d6000803e3d6000fd5b505050506040513d6020811015611f4157600080fd5b5051611f7e5760405162461bcd60e51b8152600401808060200182810382526032815260200180612c3c6032913960400191505060405180910390fd5b611a86612032565b611f908282611b3c565b611fd0611fab61104583609754611c3a90919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff611ca316565b6001600160a01b0390921660009081526098602052604090209190915550565b600061179783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061221c565b60d05460cf54604080516370a0823160e01b815230600482015290516000939261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561208657600080fd5b505afa15801561209a573d6000803e3d6000fd5b505050506040513d60208110156120b057600080fd5b505160d08190556120c7908263ffffffff611ca316565b91505090565b6000808212156120dc57600080fd5b5090565b60006120ea610d0c565b116121265760405162461bcd60e51b8152600401808060200182810382526037815260200180612a596037913960400191505060405180910390fd5b8015610ffd57612163612137610d0c565b61214b83600160801b63ffffffff611c3a16565b8161215257fe5b60975491900463ffffffff611cdd16565b60975560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a250565b60008282018183128015906121b45750838112155b806121c957506000831280156121c957508381125b61179757600080fd5b6121dc8282612639565b611fd06121f761104583609754611c3a90919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff61219f16565b6000818484111561226e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d87578181015183820152602001610d6f565b505050900390565b6000610be0612283611d37565b8484612501565b303b1590565b600054610100900460ff16806122a957506122a961228a565b806122b7575060005460ff16155b6122f25760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff16158015611b28576000805460ff1961ff0019909116610100171660011790558015610ffd576000805461ff001916905550565b600054610100900460ff1680612349575061234961228a565b80612357575060005460ff16155b6123925760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff161580156123bd576000805460ff1961ff0019909116610100171660011790555b82516123d09060689060208601906128aa565b5081516123e49060699060208501906128aa565b50606a805460ff191660121790558015611a86576000805461ff0019169055505050565b600054610100900460ff1680612421575061242161228a565b8061242f575060005460ff16155b61246a5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b21602e913960400191505060405180910390fd5b600054610100900460ff16158015612495576000805460ff1961ff0019909116610100171660011790555b600061249f611d37565b609a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ffd576000805461ff001916905550565b61250c838383612741565b600061252661104583609754611c3a90919063ffffffff16565b6001600160a01b038516600090815260986020526040902054909150612552908263ffffffff61219f16565b6001600160a01b038086166000908152609860205260408082209390935590851681522054612587908263ffffffff611ca316565b6001600160a01b03909316600090815260986020526040902092909255505050565b6000806125b583610f71565b6001600160a01b0384166000908152609960205260409020549091506125e1908263ffffffff611cdd16565b6001600160a01b038416600081815260996020908152604091829020939093558051848152905191927feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d92918290030190a292915050565b6001600160a01b03821661267e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612b716021913960400191505060405180910390fd5b61268a82600083611a86565b6126cd8160405180606001604052806022815260200161295c602291396001600160a01b038516600090815260656020526040902054919063ffffffff61221c16565b6001600160a01b0383166000908152606560205260409020556067546126f9908263ffffffff611ff016565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b0383166127865760405162461bcd60e51b8152600401808060200182810382526025815260200180612b926025913960400191505060405180910390fd5b6001600160a01b0382166127cb5760405162461bcd60e51b81526004018080602001828103825260238152602001806129396023913960400191505060405180910390fd5b6127d6838383611a86565b61281981604051806060016040528060268152602001612a33602691396001600160a01b038616600090815260656020526040902054919063ffffffff61221c16565b6001600160a01b03808516600090815260656020526040808220939093559084168152205461284e908263ffffffff611cdd16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128eb57805160ff1916838001178555612918565b82800160010185558215612918579182015b828111156129185782518255916020019190600101906128fd565b506120dc92610bc99250905b808211156120dc576000815560010161292456fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737353696d706c65526573747269637465644644543a20494e56414c49445f46554e44535f544f4b454e5f414444524553534163636f756e7420746f2062652072656d6f7665642066726f6d2061646d696e206c697374206973206e6f7420616c726561647920616e2061646d696e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546756e6473446973747269627574696f6e546f6b656e2e5f6469737472696275746546756e64733a20535550504c595f49535f5a45524f43616c6c696e67206163636f756e74206973206e6f7420616e2061646d696e6973747261746f722e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645265737472696374696f6e732061726520616c72656164792064697361626c65642e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373546865207472616e736665722077617320726573747269637465642064756520746f207768697465206c69737420636f6e66696775726174696f6e2e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f53696d706c65526573747269637465644644542e776974686472617746756e64733a205452414e534645525f4641494c45444163636f756e7420746f20626520616464656420746f2061646d696e206c69737420697320616c726561647920616e2061646d696ea264697066735822122061ee14b47ac14bcd2ffb6a56e5edd88d1ebea680302b13278dd7a0d342bd6b8864736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "303:355:53:-:0;;;7895:40:51;;;-1:-1:-1;;7895:40:51;7931:4;7895:40;;;371:284:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;371:284:53;;;;;;;;;;-1:-1:-1;371:284:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;371:284:53;;;;;;;;;;-1:-1:-1;371:284:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;371:284:53;;;;;;;;;;;;;;;;;;;-1:-1:-1;371:284:53;;-1:-1:-1;589:59:53::1;600:4:::0;606:6;371:284;;;-1:-1:-1;;;;;589:10:53::1;:59:::0;:::i:1;:::-;371:284:::0;;;;;303:355;;11964:521:51;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;-1:-1:-1;;;;;12189:34:51;::::1;12168:129;;;;-1:-1:-1::0;;;12168:129:51::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12308:32;12327:4;12333:6;12308:18;;;;;:32;;:::i;:::-;12350:22;:20;;;;;:22;;:::i;:::-;12383:10;:24:::0;;-1:-1:-1;;;;;;12383:24:51::1;;-1:-1:-1::0;;;;;12383:24:51;::::1;;;::::0;;12417::::1;12435:5:::0;12417:17:::1;:24::i;:::-;12451:27;12457:5:::0;12464:13;-1:-1:-1;;;;;12451:5:51::1;:27:::0;:::i:1;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;11964:521:51;;;;;;:::o;1409:498:108:-;1820:4;1864:17;1895:7;1409:498;;:::o;2046:174:111:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2141:26:111::1;-1:-1:-1::0;;;;;2141:24:111::1;:26:::0;:::i:1;:::-;2177:36;2200:4:::0;2206:6;-1:-1:-1;;;;;2177:22:111::1;:36:::0;:::i:1;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;2046:174:111;;;:::o;867:126:109:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;924:26:109::1;-1:-1:-1::0;;;;;924:24:109::1;:26:::0;:::i:1;:::-;960;-1:-1:-1::0;;;;;960:24:109::1;:26:::0;:::i:1;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;867:126:109;:::o;2188:240::-;1485:12;-1:-1:-1;;;;;1485:10:109;:12;:::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2276:22:109;::::1;2268:73;;;;-1:-1:-1::0;;;2268:73:109::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:6;::::0;2356:38:::1;::::0;-1:-1:-1;;;;;2356:38:109;;::::1;::::0;2377:6:::1;::::0;-1:-1:-1;;;;;;;;;;;2356:38:109;2377:6:::1;::::0;2356:38:::1;2404:6;:17:::0;;-1:-1:-1;;;;;;2404:17:109::1;-1:-1:-1::0;;;;;2404:17:109;;;::::1;::::0;;;::::1;::::0;;2188:240::o;5472:236:48:-;5547:27;5559:7;5568:5;5547:11;;;;;:27;;:::i;:::-;5613:88;5657:42;5658:25;5677:5;5658:14;;:18;;;;;;:25;;;;:::i;:::-;5657:40;;;;;:42;;:::i;:::-;-1:-1:-1;;;;;5613:25:48;;;;;;:16;:25;;;;;;;;;;:88;:42;;;;;:88;;:::i;:::-;-1:-1:-1;;;;;5585:25:48;;;;;;;:16;:25;;;;;:116;;;;-1:-1:-1;5472:236:48:o;858:66:107:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1268:14;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;858:66:107;:::o;2226:177:111:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2333:12:111;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2355:16:111;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2381:9:111::1;:14:::0;;-1:-1:-1;;2381:14:111::1;2393:2;2381:14;::::0;;1264:55:108;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;2226:177:111;;;:::o;999:195:109:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;1068:17:109::1;1088:12;-1:-1:-1::0;;;;;1088:10:109::1;:12:::0;:::i:1;:::-;1110:6;:18:::0;;-1:-1:-1;;;;;;1110:18:109::1;-1:-1:-1::0;;;;;1110:18:109;::::1;::::0;;::::1;::::0;;;1143:43:::1;::::0;1110:18;;-1:-1:-1;1110:18:109;-1:-1:-1;;;;;;;;;;;;;1143:43:109;-1:-1:-1;;1143:43:109::1;1256:1:108;1268:14:::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;999:195:109;:::o;931:104:107:-;1018:10;931:104;:::o;8085:370:111:-;-1:-1:-1;;;;;8168:21:111;;8160:65;;;;;-1:-1:-1;;;8160:65:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;8236:49;8265:1;8269:7;8278:6;-1:-1:-1;;;;;8236:20:111;:49;:::i;:::-;8311:24;8328:6;8311:12;;:16;;;;;;:24;;;;:::i;:::-;8296:12;:39;-1:-1:-1;;;;;8366:18:111;;;;;;:9;:18;;;;;;;;;:30;;8389:6;;8366:22;;;;;:30;;:::i;:::-;-1:-1:-1;;;;;8345:18:111;;;;;;:9;:18;;;;;;;;:51;;;;8411:37;;;;;;;8345:18;;;;8411:37;;;;;;;;;;8085:370;;:::o;2119:459:110:-;2177:7;2418:6;2414:45;;-1:-1:-1;2447:1:110;2440:8;;2414:45;2481:5;;;2485:1;2481;:5;:1;2504:5;;;;;:10;2496:56;;;;-1:-1:-1;;;2496:56:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2570:1;-1:-1:-1;2119:459:110;;;;;:::o;190:146:56:-;246:6;282:1;303:6;;;;295:15;;;;;1043:159:55;1099:6;1131:1;1126;:6;;:20;;;;;1145:1;1140;1136;:5;:10;;1126:20;1125:46;;;;1156:1;1152;:5;:18;;;;;1169:1;1165;1161;:5;:9;1152:18;1117:55;;;;;;-1:-1:-1;1190:5:55;;;1043:159::o;834:176:110:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:110;;;;;;;;;;;;;;;;;;;;;;;;;;;303:355:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;303:355:53;;;-1:-1:-1;303:355:53;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "303:355:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3761:117:48;;;;;;;;;;;;;;;;-1:-1:-1;3761:117:48;-1:-1:-1;;;;;3761:117:48;;:::i;:::-;;;;;;;;;;;;;;;;4326:908:51;;;;;;;;;;;;;;;;-1:-1:-1;4326:908:51;;-1:-1:-1;;;;;4326:908:51;;;;;;;;:::i;:::-;;2469:81:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4505:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4505:166:111;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2590:128:51;;;;;;;;;;;;;;;;-1:-1:-1;2590:128:51;-1:-1:-1;;;;;2590:128:51;;:::i;10000:38::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1986:504;;;;;;;;;;;;;;;;-1:-1:-1;1986:504:51;-1:-1:-1;;;;;1986:504:51;;:::i;3512:98:111:-;;;:::i;10044:47:51:-;;;:::i;13190:257::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13190:257:51;;;;;;;;;;;;;;;;;:::i;11212:89::-;;;:::i;8597:103::-;;;:::i;3371:81:111:-;;;:::i;5843:215::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5843:215:111;;;;;;;;:::i;6059:666:51:-;;;;;;;;;;;;;;;;-1:-1:-1;6059:666:51;;;;;;;;;;;;;;;;;;;;:::i;13581:139::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13581:139:51;;;;;;;;:::i;3357:162:48:-;;;;;;;;;;;;;;;;-1:-1:-1;3357:162:48;-1:-1:-1;;;;;3357:162:48;;:::i;12565:164:51:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12565:164:51;;-1:-1:-1;12565:164:51;;-1:-1:-1;;;;;12565:164:51:i;11644:196::-;;;:::i;4324:228:48:-;;;;;;;;;;;;;;;;-1:-1:-1;4324:228:48;-1:-1:-1;;;;;4324:228:48;;:::i;10416:24:51:-;;;:::i;:::-;;;;-1:-1:-1;;;;;10416:24:51;;;;;;;;;;;;;;1372:486;;;;;;;;;;;;;;;;-1:-1:-1;1372:486:51;-1:-1:-1;;;;;1372:486:51;;:::i;3668:117:111:-;;;;;;;;;;;;;;;;-1:-1:-1;3668:117:111;-1:-1:-1;;;;;3668:117:111;;:::i;1894:145:109:-;;;:::i;736:46:51:-;;;;;;;;;;;;;;;;-1:-1:-1;736:46:51;-1:-1:-1;;;;;736:46:51;;:::i;15290:439::-;;;;;;;;;;;;;;;;-1:-1:-1;15290:439:51;;;;:::i;5365:500::-;;;;;;;;;;;;;;;;-1:-1:-1;5365:500:51;-1:-1:-1;;;;;5365:500:51;;:::i;1271:77:109:-;;;:::i;3265:50:51:-;;;;;;;;;;;;;;;;-1:-1:-1;3265:50:51;-1:-1:-1;;;;;3265:50:51;;:::i;6919:689::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6919:689:51;;;;;;;;;;:::i;2663:85:111:-;;;:::i;10276:59:51:-;;;:::i;13860:139::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13860:139:51;;;;;;;;:::i;6545:266:111:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6545:266:111;;;;;;;;:::i;12840:235:51:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12840:235:51;;;;;;;;:::i;10524:32::-;;;:::i;10153:117::-;;;:::i;11964:521::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11964:521:51;;;;;;;;-1:-1:-1;11964:521:51;;-1:-1:-1;;11964:521:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11964:521:51;;-1:-1:-1;;;;;;;11964:521:51;;;;;-1:-1:-1;11964:521:51;;;;;;;;;;-1:-1:-1;11964:521:51;;-1:-1:-1;11964:521:51:i;14187:861::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14187:861:51;;;;;;;;;;;;;;;;;:::i;8233:272::-;;;:::i;4218:149:111:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4218:149:111;;;;;;;;;;:::i;10097:50:51:-;;;:::i;3471:73::-;;;;;;;;;;;;;;;;-1:-1:-1;3471:73:51;;;;;;;;;;;:::i;2188:240:109:-;;;;;;;;;;;;;;;;-1:-1:-1;2188:240:109;-1:-1:-1;;;;;2188:240:109;;:::i;3761:117:48:-;-1:-1:-1;;;;;3849:22:48;;3823:7;3849:22;;;:14;:22;;;;;;3761:117;;;;:::o;4326:908:51:-;1138:27;1154:10;1138:15;:27::i;:::-;1117:114;;;;-1:-1:-1;;;1117:114:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4493:25:::1;::::0;::::1;4485:67;;;::::0;;-1:-1:-1;;;4485:67:51;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4633:31:51;::::1;4607:23;4633:31:::0;;;:17:::1;:31;::::0;;;;;;::::1;4718:43:::0;;::::1;-1:-1:-1::0;;4718:43:51;::::1;;::::0;;;4633:31:::1;4866:33:::0;;4862:246:::1;;4963:134;::::0;5073:10:::1;::::0;4963:134:::1;::::0;::::1;::::0;-1:-1:-1;;;;;4963:134:51;::::1;::::0;::::1;::::0;;;::::1;4862:246;5167:60;::::0;5216:10:::1;::::0;5167:60:::1;::::0;::::1;::::0;-1:-1:-1;;;;;5167:60:51;::::1;::::0;::::1;::::0;;;::::1;1241:1;4326:908:::0;;:::o;2469:81:111:-;2538:5;2531:12;;;;;;;;-1:-1:-1;;2531:12:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2506:13;;2531:12;;2538:5;;2531:12;;2538:5;2531:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2469:81;;:::o;4505:166::-;4588:4;4604:39;4613:12;:10;:12::i;:::-;4627:7;4636:6;4604:8;:39::i;:::-;-1:-1:-1;4660:4:111;4505:166;;;;;:::o;2590:128:51:-;-1:-1:-1;;;;;2682:29:51;2659:4;2682:29;;;:14;:29;;;;;;;;;2590:128::o;10000:38::-;10037:1;10000:38;:::o;1986:504::-;1485:12:109;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;-1:-1:-1;;;;;2120:29:51;::::1;;::::0;;;:14:::1;:29;::::0;;;;;::::1;;:37;;:29:::0;:37:::1;2099:145;;;;-1:-1:-1::0;;;2099:145:51::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;2347:29:51;::::1;2379:5;2347:29:::0;;;:14:::1;:29;::::0;;;;;:37;;-1:-1:-1;;2347:37:51::1;::::0;;2444:39;2472:10:::1;::::0;2347:29;2444:39:::1;::::0;::::1;1986:504:::0;:::o;3512:98:111:-;3591:12;;3512:98;:::o;10044:47:51:-;10090:1;10044:47;:::o;13190:257::-;13367:12;13290:4;13296:2;13300:5;10916:21;10940:42;10966:4;10972:2;10976:5;10940:25;:42::i;:::-;10916:66;-1:-1:-1;11013:31:51;;;;11058:46;10916:66;11058:29;:46::i;:::-;10992:122;;;;;-1:-1:-1;;;10992:122:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13405:35:::1;13424:4;13430:2;13434:5;13405:18;:35::i;:::-;13395:45:::0;13190:257;-1:-1:-1;;;;;;;;13190:257:51:o;11212:89::-;11265:29;11283:10;11265:17;:29::i;:::-;11212:89::o;8597:103::-;8673:20;;;;8597:103;:::o;3371:81:111:-;3436:9;;;;3371:81;:::o;5843:215::-;5931:4;5947:83;5956:12;:10;:12::i;:::-;5970:7;5979:50;6018:10;5979:11;:25;5991:12;:10;:12::i;:::-;-1:-1:-1;;;;;5979:25:111;;;;;;;;;;;;;;;;;-1:-1:-1;5979:25:111;;;:34;;;;;;;;;;;:50;:38;:50;:::i;:::-;5947:8;:83::i;6059:666:51:-;1138:27;1154:10;1138:15;:27::i;:::-;1117:114;;;;-1:-1:-1;;;1117:114:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6296:42:::1;::::0;;::::1;6273:20;6296:42:::0;;;:25:::1;:42;::::0;;;;;;;:64;;::::1;::::0;;;;;;;;;;;;6406:82;::::1;;-1:-1:-1::0;;6406:82:51;::::1;::::0;::::1;::::0;;;6539:179;;6296:64;::::1;6539:179:::0;::::1;;::::0;;;;::::1;::::0;;;6296:64;;;;:42;6577:10:::1;::::0;6539:179:::1;::::0;;;;;;;;;::::1;1241:1;6059:666:::0;;;:::o;13581:139::-;13654:4;1485:12:109;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;13670:22:51::1;13676:7;13685:6;13670:5;:22::i;3357:162:48:-:0;-1:-1:-1;;;;;3489:22:48;;3431:7;3489:22;;;:14;:22;;;;;;3457:55;;:27;3504:6;3457:19;:27::i;:::-;:31;:55;:31;:55;:::i;12565:164:51:-;12631:9;12626:97;12650:6;:13;12646:1;:17;12626:97;;;12684:28;12702:6;12709:1;12702:9;;;;;;;;;;;;;;12684:17;:28::i;:::-;12665:3;;12626:97;;;;12565:164;:::o;11644:196::-;11694:15;11712:26;:24;:26::i;:::-;11694:44;;11764:1;11753:8;:12;11749:85;;;11781:42;11798:24;:8;:22;:24::i;:::-;11781:16;:42::i;:::-;11644:196;:::o;4324:228:48:-;-1:-1:-1;;;;;4485:24:48;;4389:7;4485:24;;;:16;:24;;;;;;-1:-1:-1;;;1282:6:48;4415:111;;:95;;:52;:37;4434:17;4502:6;4434:9;:17::i;:::-;4415:14;;;:37;:18;:37;:::i;:::-;:50;:52::i;:::-;:69;:95;:69;:95;:::i;:::-;:109;:111::i;:::-;:130;;;;;;;4324:228;-1:-1:-1;;4324:228:48:o;10416:24:51:-;;;;;;-1:-1:-1;;;;;10416:24:51;;:::o;1372:486::-;1485:12:109;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;-1:-1:-1;;;;;1512:26:51;::::1;;::::0;;;:14:::1;:26;::::0;;;;;::::1;;:35;1491:135;;;;-1:-1:-1::0;;;1491:135:51::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;1724:26:51;::::1;;::::0;;;:14:::1;:26;::::0;;;;;:33;;-1:-1:-1;;1724:33:51::1;1753:4;1724:33;::::0;;1817:34;1840:10:::1;::::0;1724:26;1817:34:::1;::::0;::::1;1372:486:::0;:::o;3668:117:111:-;-1:-1:-1;;;;;3760:18:111;3734:7;3760:18;;;:9;:18;;;;;;;3668:117::o;1894:145:109:-;1485:12;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;1984:6:::1;::::0;1963:40:::1;::::0;2000:1:::1;::::0;-1:-1:-1;;;;;1984:6:109::1;::::0;1963:40:::1;::::0;2000:1;;1963:40:::1;2013:6;:19:::0;;-1:-1:-1;;;;;;2013:19:109::1;::::0;;1894:145::o;736:46:51:-;;;;;;;;;;;;;;;:::o;15290:439::-;15414:13;15447:31;;;15443:84;;-1:-1:-1;15501:15:51;;;;;;;;;;;;-1:-1:-1;;;15501:15:51;;;;15494:22;;15443:84;15541:40;;;10090:1;15541:40;15537:107;;;15604:29;;;;;;;;;;;;;;;;;15597:36;;;;15537:107;-1:-1:-1;;15709:13:51;;;;;;;;;;;;-1:-1:-1;;;15709:13:51;;;;;15290:439::o;5365:500::-;1138:27;1154:10;1138:15;:27::i;:::-;1117:114;;;;-1:-1:-1;;;1117:114:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5544:34:51;::::1;5518:23;5544:34:::0;;;:17:::1;:34;::::0;;;;;;;-1:-1:-1;;5633:49:51;::::1;::::0;;;5737:121;;5544:34:::1;::::0;;::::1;::::0;5838:10:::1;::::0;5544:34;;5737:121:::1;::::0;5518:23;5737:121:::1;1241:1;5365:500:::0;:::o;1271:77:109:-;1335:6;;-1:-1:-1;;;;;1335:6:109;1271:77;:::o;3265:50:51:-;;;;;;;;;;;;;;;:::o;6919:689::-;-1:-1:-1;;;;;7118:25:51;;;7029:4;7118:25;;;:17;:25;;;;;;;7179:27;;;;;;;;7029:4;;7118:25;;;;;7179:27;7313:31;;;:68;;-1:-1:-1;7348:33:51;;;;7313:68;7296:133;;;7413:5;7406:12;;;;;;7296:133;7540:42;;;;;;;;:25;:42;;;;;;;;:61;;;;;;;;;;;;6919:689;-1:-1:-1;;;6919:689:51:o;2663:85:111:-;2734:7;2727:14;;;;;;;;-1:-1:-1;;2727:14:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2702:13;;2727:14;;2734:7;;2727:14;;2734:7;2727:14;;;;;;;;;;;;;;;;;;;;;;;;10276:59:51;;;;;;;;;;;;;;-1:-1:-1;;;10276:59:51;;;;:::o;13860:139::-;13933:4;1485:12:109;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;13949:22:51::1;13955:7;13964:6;13949:5;:22::i;6545:266:111:-:0;6638:4;6654:129;6663:12;:10;:12::i;:::-;6677:7;6686:96;6725:15;6686:96;;;;;;;;;;;;;;;;;:11;:25;6698:12;:10;:12::i;:::-;-1:-1:-1;;;;;6686:25:111;;;;;;;;;;;;;;;;;-1:-1:-1;6686:25:111;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;12840:235:51:-;13005:12;12922:10;12934:2;12938:5;10916:21;10940:42;10966:4;10972:2;10976:5;10940:25;:42::i;:::-;10916:66;-1:-1:-1;11013:31:51;;;;11058:46;10916:66;11058:29;:46::i;:::-;10992:122;;;;;-1:-1:-1;;;10992:122:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13043:25:::1;13058:2;13062:5;13043:14;:25::i;:::-;13033:35:::0;12840:235;-1:-1:-1;;;;;;;12840:235:51:o;10524:32::-;;;;:::o;10153:117::-;;;;;;;;;;;;;;;;;;;:::o;11964:521::-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;-1:-1:-1;;;;;12189:34:51;::::1;12168:129;;;;-1:-1:-1::0;;;12168:129:51::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12308:32;12327:4;12333:6;12308:18;:32::i;:::-;12350:22;:20;:22::i;:::-;12383:10;:24:::0;;-1:-1:-1;;;;;;12383:24:51::1;;-1:-1:-1::0;;;;;12383:24:51;::::1;;;::::0;;12417::::1;12435:5:::0;12417:17:::1;:24::i;:::-;12451:27;12457:5;12464:13;12451:5;:27::i;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;11964:521:51;;;;;;:::o;14187:861::-;14319:5;14488:22;:20;:22::i;:::-;14483:73;;-1:-1:-1;10037:1:51;14526:19;;14483:73;14654:7;:5;:7::i;:::-;-1:-1:-1;;;;;14646:15:51;:4;-1:-1:-1;;;;;14646:15:51;;14642:65;;;-1:-1:-1;10037:1:51;14677:19;;14642:65;14866:31;14888:4;14894:2;14866:21;:31::i;:::-;14861:91;;-1:-1:-1;10090:1:51;14913:28;;14861:91;-1:-1:-1;10037:1:51;14187:861;;;;;;:::o;8233:272::-;1485:12:109;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;8299:20:51::1;::::0;::::1;;8291:67;;;;-1:-1:-1::0;;;8291:67:51::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8393:20;:28:::0;;-1:-1:-1;;8393:28:51::1;::::0;;8466:32:::1;::::0;8487:10:::1;::::0;8466:32:::1;::::0;8416:5:::1;::::0;8466:32:::1;8233:272::o:0;4218:149:111:-;-1:-1:-1;;;;;4333:18:111;;;4307:7;4333:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4218:149::o;10097:50:51:-;;;;;;;;;;;;;;-1:-1:-1;;;10097:50:51;;;;:::o;3471:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2188:240:109:-;1485:12;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;-1:-1:-1;;;;;2276:22:109;::::1;2268:73;;;;-1:-1:-1::0;;;2268:73:109::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:6;::::0;2356:38:::1;::::0;-1:-1:-1;;;;;2356:38:109;;::::1;::::0;2377:6:::1;::::0;2356:38:::1;::::0;2377:6:::1;::::0;2356:38:::1;2404:6;:17:::0;;-1:-1:-1;;;;;;2404:17:109::1;-1:-1:-1::0;;;;;2404:17:109;;;::::1;::::0;;;::::1;::::0;;2188:240::o;2046:174:111:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2141:26:111::1;:24;:26::i;:::-;2177:36;2200:4;2206:6;2177:22;:36::i;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;2046:174:111;;;:::o;867:126:109:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;924:26:109::1;:24;:26::i;:::-;960;:24;:26::i;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;867:126:109;:::o;8085:370:111:-;-1:-1:-1;;;;;8168:21:111;;8160:65;;;;;-1:-1:-1;;;8160:65:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;8236:49;8265:1;8269:7;8278:6;8236:20;:49::i;:::-;8311:12;;:24;;8328:6;8311:24;:16;:24;:::i;:::-;8296:12;:39;-1:-1:-1;;;;;8366:18:111;;;;;;:9;:18;;;;;;:30;;8389:6;8366:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8345:18:111;;;;;;:9;:18;;;;;;;;:51;;;;8411:37;;;;;;;8345:18;;;;8411:37;;;;;;;;;;8085:370;;:::o;2119:459:110:-;2177:7;2418:6;2414:45;;-1:-1:-1;2447:1:110;2440:8;;2414:45;2481:5;;;2485:1;2481;:5;:1;2504:5;;;;;:10;2496:56;;;;-1:-1:-1;;;2496:56:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;190:146:56;246:6;282:1;303:6;;;;295:15;;;;;1043:159:55;1099:6;1131:1;1126;:6;;:20;;;;;1145:1;1140;1136;:5;:10;;1126:20;1125:46;;;;1156:1;1152;:5;:18;;;;;1169:1;1165;1161;:5;:9;1152:18;1117:55;;;;;;-1:-1:-1;1190:5:55;;;1043:159::o;834:176:110:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:110;;;;;;;;;;;;;;;;;;;;;;;;;;;931:104:107;1018:10;931:104;:::o;9609:340:111:-;-1:-1:-1;;;;;9710:19:111;;9702:68;;;;-1:-1:-1;;;9702:68:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9788:21:111;;9780:68;;;;-1:-1:-1;;;9780:68:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9859:18:111;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9910:32;;;;;;;;;;;;;;;;;9609:340;;;:::o;5131:317::-;5237:4;5253:36;5263:6;5271:9;5282:6;5253:9;:36::i;:::-;5299:121;5308:6;5316:12;:10;:12::i;:::-;5330:89;5368:6;5330:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5330:19:111;;;;;;:11;:19;;;;;;5350:12;:10;:12::i;:::-;-1:-1:-1;;;;;5330:33:111;;;;;;;;;;;;-1:-1:-1;5330:33:111;;;:89;;:37;:89;:::i;5299:121::-;-1:-1:-1;5437:4:111;5131:317;;;;;:::o;15815:312:51:-;15876:25;15904:26;15924:5;15904:19;:26::i;:::-;15962:10;;:45;;;-1:-1:-1;;;15962:45:51;;-1:-1:-1;;;;;15962:45:51;;;;;;;;;;;;;;;15876:54;;-1:-1:-1;15962:10:51;;;;;;:19;;:45;;;;;;;;;;;;;;;-1:-1:-1;15962:10:51;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15962:45:51;15941:142;;;;-1:-1:-1;;;15941:142:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16094:26;:24;:26::i;5472:236:48:-;5547:27;5559:7;5568:5;5547:11;:27::i;:::-;5613:88;5657:42;5658:25;5677:5;5658:14;;:18;;:25;;;;:::i;5657:42::-;-1:-1:-1;;;;;5613:25:48;;;;;;:16;:25;;;;;;;:88;:42;:88;:::i;:::-;-1:-1:-1;;;;;5585:25:48;;;;;;;:16;:25;;;;;:116;;;;-1:-1:-1;5472:236:48:o;1274:134:110:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;16360:272:51:-;16464:17;;16512:10;;:35;;;-1:-1:-1;;;16512:35:51;;16541:4;16512:35;;;;;;-1:-1:-1;;16464:17:51;16512:10;;;-1:-1:-1;;;;;16512:10:51;;:20;;:35;;;;;;;;;;;;;;:10;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16512:35:51;16492:17;:55;;;16565:60;;16602:21;16565:60;:29;:60;:::i;:::-;16558:67;;;16360:272;:::o;1386:124:55:-;1442:7;1474:1;1469;:6;;1461:15;;;;;;-1:-1:-1;1501:1:55;1386:124::o;2227:366:48:-;2311:1;2295:13;:11;:13::i;:::-;:17;2287:85;;;;-1:-1:-1;;;2287:85:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2387:9;;2383:204;;2429:93;2495:13;:11;:13::i;:::-;2465:27;:5;-1:-1:-1;;;2465:27:48;:9;:27;:::i;:::-;:43;;;;;2429:14;;;2465:43;;2429:93;:18;:93;:::i;:::-;2412:14;:110;2541:35;;;;;;;;2558:10;;2541:35;;;;;;;;;;2227:366;:::o;1208:172:55:-;1264:6;1293:5;;;1317:6;;;;;;:16;;;1332:1;1327;:6;;1317:16;1316:38;;;;1343:1;1339;:5;:14;;;;;1352:1;1348;:5;1339:14;1308:47;;;;;5983:236:48;6058:27;6070:7;6079:5;6058:11;:27::i;:::-;6124:88;6168:42;6169:25;6188:5;6169:14;;:18;;:25;;;;:::i;6168:42::-;-1:-1:-1;;;;;6124:25:48;;;;;;:16;:25;;;;;;;:88;:42;:88;:::i;1692:187:110:-;1778:7;1813:12;1805:6;;;;1797:29;;;;-1:-1:-1;;;1797:29:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1848:5:110;;;1692:187::o;3988:172:111:-;4074:4;4090:42;4100:12;:10;:12::i;:::-;4114:9;4125:6;4090:9;:42::i;1409:498:108:-;1820:4;1864:17;1895:7;1409:498;:::o;858:66:107:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1268:14;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;858:66:107;:::o;2226:177:111:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2333:12:111;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2355:16:111;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2381:9:111::1;:14:::0;;-1:-1:-1;;2381:14:111::1;2393:2;2381:14;::::0;;1264:55:108;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;2226:177:111;;;:::o;999:195:109:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;1068:17:109::1;1088:12;:10;:12::i;:::-;1110:6;:18:::0;;-1:-1:-1;;;;;;1110:18:109::1;-1:-1:-1::0;;;;;1110:18:109;::::1;::::0;;::::1;::::0;;;1143:43:::1;::::0;1110:18;;-1:-1:-1;1110:18:109;-1:-1:-1;;1143:43:109::1;::::0;-1:-1:-1;;1143:43:109::1;1256:1:108;1268:14:::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;999:195:109;:::o;4854:352:48:-;4942:32;4958:4;4964:2;4968:5;4942:15;:32::i;:::-;4985:21;5009:40;:25;5028:5;5009:14;;:18;;:25;;;;:::i;:40::-;-1:-1:-1;;;;;5084:22:48;;;;;;:16;:22;;;;;;4985:64;;-1:-1:-1;5084:42:48;;4985:64;5084:42;:26;:42;:::i;:::-;-1:-1:-1;;;;;5059:22:48;;;;;;;:16;:22;;;;;;:67;;;;5159:20;;;;;;;:40;;5184:14;5159:40;:24;:40;:::i;:::-;-1:-1:-1;;;;;5136:20:48;;;;;;;:16;:20;;;;;:63;;;;-1:-1:-1;;;4854:352:48:o;2784:333::-;2847:7;2866:29;2898:27;2918:6;2898:19;:27::i;:::-;-1:-1:-1;;;;;2961:22:48;;;;;;:14;:22;;;;;;2866:59;;-1:-1:-1;2961:49:48;;2866:59;2961:49;:26;:49;:::i;:::-;-1:-1:-1;;;;;2936:22:48;;;;;;:14;:22;;;;;;;;;:74;;;;3026:45;;;;;;;2936:22;;3026:45;;;;;;;;;3089:21;2784:333;-1:-1:-1;;2784:333:48:o;8774:410:111:-;-1:-1:-1;;;;;8857:21:111;;8849:67;;;;-1:-1:-1;;;8849:67:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8927:49;8948:7;8965:1;8969:6;8927:20;:49::i;:::-;9008:68;9031:6;9008:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9008:18:111;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;8987:18:111;;;;;;:9;:18;;;;;:89;9101:12;;:24;;9118:6;9101:24;:16;:24;:::i;:::-;9086:12;:39;9140:37;;;;;;;;9166:1;;-1:-1:-1;;;;;9140:37:111;;;;;;;;;;;;8774:410;;:::o;7285:530::-;-1:-1:-1;;;;;7390:20:111;;7382:70;;;;-1:-1:-1;;;7382:70:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7470:23:111;;7462:71;;;;-1:-1:-1;;;7462:71:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7544:47;7565:6;7573:9;7584:6;7544:20;:47::i;:::-;7622:71;7644:6;7622:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7622:17:111;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7602:17:111;;;;;;;:9;:17;;;;;;:91;;;;7726:20;;;;;;;:32;;7751:6;7726:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7703:20:111;;;;;;;:9;:20;;;;;;;;;:55;;;;7773:35;;;;;;;7703:20;;7773:35;;;;;;;;;;;;;7285:530;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\n\nimport \"./ProxySafeSimpleRestrictedFDT.sol\";\n\n/**\n * @notice This contract, unlike its parent contract, is entirely instantiated by the `constructor`.\n * Therefore this contract may NOT be used with a proxy that `delegatecall`s it.\n */\ncontract SimpleRestrictedFDT is ProxySafeSimpleRestrictedFDT {\n\n    constructor(\n        string memory name,\n        string memory symbol,\n        IERC20 _fundsToken,\n        address owner,\n        uint256 initialAmount\n    )\n    public\n    ProxySafeSimpleRestrictedFDT()\n    {\n        initialize(name, symbol, _fundsToken, owner, initialAmount);\n    }\n\n}\n",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/SimpleRestrictedFDT.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/SimpleRestrictedFDT.sol",
    "exportedSymbols": {
      "SimpleRestrictedFDT": [
        19478
      ]
    },
    "id": 19479,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19449,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:53"
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/ProxySafeSimpleRestrictedFDT.sol",
        "file": "./ProxySafeSimpleRestrictedFDT.sol",
        "id": 19450,
        "nodeType": "ImportDirective",
        "scope": 19479,
        "sourceUnit": 19156,
        "src": "67:44:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 19452,
              "name": "ProxySafeSimpleRestrictedFDT",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 19155,
              "src": "335:28:53",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxySafeSimpleRestrictedFDT_$19155",
                "typeString": "contract ProxySafeSimpleRestrictedFDT"
              }
            },
            "id": 19453,
            "nodeType": "InheritanceSpecifier",
            "src": "335:28:53"
          }
        ],
        "contractDependencies": [
          18314,
          18343,
          18361,
          18474,
          18674,
          18715,
          18738,
          19155,
          37222,
          37297,
          37427,
          38157,
          38235
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 19451,
          "nodeType": "StructuredDocumentation",
          "src": "113:189:53",
          "text": " @notice This contract, unlike its parent contract, is entirely instantiated by the `constructor`.\n Therefore this contract may NOT be used with a proxy that `delegatecall`s it."
        },
        "fullyImplemented": true,
        "id": 19478,
        "linearizedBaseContracts": [
          19478,
          19155,
          18715,
          18674,
          18474,
          37427,
          18738,
          18314,
          38157,
          38235,
          37222,
          37297,
          18361,
          18343
        ],
        "name": "SimpleRestrictedFDT",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 19476,
              "nodeType": "Block",
              "src": "579:76:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19469,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19455,
                        "src": "600:4:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19470,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19457,
                        "src": "606:6:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19471,
                        "name": "_fundsToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19459,
                        "src": "614:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19472,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19461,
                        "src": "627:5:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19473,
                        "name": "initialAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19463,
                        "src": "634:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19468,
                      "name": "initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18906,
                      "src": "589:10:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_contract$_IERC20_$38235_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,contract IERC20,address,uint256)"
                      }
                    },
                    "id": 19474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "589:59:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19475,
                  "nodeType": "ExpressionStatement",
                  "src": "589:59:53"
                }
              ]
            },
            "documentation": null,
            "id": 19477,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 19466,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19465,
                  "name": "ProxySafeSimpleRestrictedFDT",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19155,
                  "src": "544:28:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ProxySafeSimpleRestrictedFDT_$19155_$",
                    "typeString": "type(contract ProxySafeSimpleRestrictedFDT)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "544:30:53"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 19464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19455,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "392:18:53",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19454,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "392:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19457,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "420:20:53",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19456,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "420:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19459,
                  "mutability": "mutable",
                  "name": "_fundsToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "450:18:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19458,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "450:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19461,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "478:13:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19460,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "478:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19463,
                  "mutability": "mutable",
                  "name": "initialAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "501:21:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19462,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "501:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "382:146:53"
            },
            "returnParameters": {
              "id": 19467,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "579:0:53"
            },
            "scope": 19478,
            "src": "371:284:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 19479,
        "src": "303:355:53"
      }
    ],
    "src": "41:618:53"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/SimpleRestrictedFDT.sol",
    "exportedSymbols": {
      "SimpleRestrictedFDT": [
        19478
      ]
    },
    "id": 19479,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19449,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:53"
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/ProxySafeSimpleRestrictedFDT.sol",
        "file": "./ProxySafeSimpleRestrictedFDT.sol",
        "id": 19450,
        "nodeType": "ImportDirective",
        "scope": 19479,
        "sourceUnit": 19156,
        "src": "67:44:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 19452,
              "name": "ProxySafeSimpleRestrictedFDT",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 19155,
              "src": "335:28:53",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxySafeSimpleRestrictedFDT_$19155",
                "typeString": "contract ProxySafeSimpleRestrictedFDT"
              }
            },
            "id": 19453,
            "nodeType": "InheritanceSpecifier",
            "src": "335:28:53"
          }
        ],
        "contractDependencies": [
          18314,
          18343,
          18361,
          18474,
          18674,
          18715,
          18738,
          19155,
          37222,
          37297,
          37427,
          38157,
          38235
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 19451,
          "nodeType": "StructuredDocumentation",
          "src": "113:189:53",
          "text": " @notice This contract, unlike its parent contract, is entirely instantiated by the `constructor`.\n Therefore this contract may NOT be used with a proxy that `delegatecall`s it."
        },
        "fullyImplemented": true,
        "id": 19478,
        "linearizedBaseContracts": [
          19478,
          19155,
          18715,
          18674,
          18474,
          37427,
          18738,
          18314,
          38157,
          38235,
          37222,
          37297,
          18361,
          18343
        ],
        "name": "SimpleRestrictedFDT",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 19476,
              "nodeType": "Block",
              "src": "579:76:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19469,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19455,
                        "src": "600:4:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19470,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19457,
                        "src": "606:6:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19471,
                        "name": "_fundsToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19459,
                        "src": "614:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19472,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19461,
                        "src": "627:5:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19473,
                        "name": "initialAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19463,
                        "src": "634:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19468,
                      "name": "initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18906,
                      "src": "589:10:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_contract$_IERC20_$38235_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,contract IERC20,address,uint256)"
                      }
                    },
                    "id": 19474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "589:59:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19475,
                  "nodeType": "ExpressionStatement",
                  "src": "589:59:53"
                }
              ]
            },
            "documentation": null,
            "id": 19477,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 19466,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19465,
                  "name": "ProxySafeSimpleRestrictedFDT",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19155,
                  "src": "544:28:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ProxySafeSimpleRestrictedFDT_$19155_$",
                    "typeString": "type(contract ProxySafeSimpleRestrictedFDT)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "544:30:53"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 19464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19455,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "392:18:53",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19454,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "392:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19457,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "420:20:53",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19456,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "420:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19459,
                  "mutability": "mutable",
                  "name": "_fundsToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "450:18:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19458,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "450:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19461,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "478:13:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19460,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "478:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19463,
                  "mutability": "mutable",
                  "name": "initialAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19477,
                  "src": "501:21:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19462,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "501:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "382:146:53"
            },
            "returnParameters": {
              "id": 19467,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "579:0:53"
            },
            "scope": 19478,
            "src": "371:284:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 19479,
        "src": "303:355:53"
      }
    ],
    "src": "41:618:53"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.162Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "accumulativeFundsOf(address)": {
        "details": "accumulativeFundsOf(_owner) = withdrawableFundsOf(_owner) + withdrawnFundsOf(_owner) = (pointsPerShare * balanceOf(_owner) + pointsCorrection[_owner]) / pointsMultiplier",
        "params": {
          "_owner": "The address of a token holder."
        },
        "returns": {
          "_0": "The amount of funds that `_owner` has earned in total."
        }
      },
      "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. This is the value {ERC20} uses, unless {_setupDecimals} is called. 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."
      },
      "initialize(string,string,address,address,uint256)": {
        "details": "\"constructor\" to be called on deployment"
      },
      "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}."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "updateFundsReceived()": {
        "details": "Calls _updateFundsTokenBalance(), whereby the contract computes the delta of the previous and the new funds token balance and increments the total received funds (cumulative) by delta by calling _registerFunds()"
      },
      "withdrawableFundsOf(address)": {
        "params": {
          "_owner": "The address of a token holder."
        },
        "returns": {
          "_0": "The amount funds that `_owner` can withdraw."
        }
      },
      "withdrawnFundsOf(address)": {
        "params": {
          "_owner": "The address of a token holder."
        },
        "returns": {
          "_0": "The amount of funds that `_owner` has withdrawn."
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "accumulativeFundsOf(address)": {
        "notice": "prev. accumulativeDividendOfView the amount of funds that an address has earned in total."
      },
      "addAdmin(address)": {
        "notice": "Add an admin to the list.  This should only be callable by the owner of the contract."
      },
      "addToWhitelist(address,uint8)": {
        "notice": "Sets an address's white list ID.  Only administrators should be allowed to update this. If an address is on an existing whitelist, it will just get updated to the new value (removed from previous)."
      },
      "burn(address,uint256)": {
        "notice": "Exposes the ability to burn exisiting FDTs for a given account. Caller has to be the owner of the FDT."
      },
      "checkWhitelistAllowed(address,address)": {
        "notice": "Determine if the a sender is allowed to send to the receiver. The source whitelist must be enabled to send to the whitelist where the receive exists."
      },
      "detectTransferRestriction(address,address,uint256)": {
        "notice": "This function detects whether a transfer should be restricted and not allowed. If the function returns SUCCESS_CODE (0) then it should be allowed."
      },
      "disableRestrictions()": {
        "notice": "Function to update the enabled flag on restrictions to disabled.  Only the owner should be able to call. This is a permanent change that cannot be undone"
      },
      "initialize(string,string,address,address,uint256)": {
        "notice": "Initialize a new instance storage"
      },
      "isAdministrator(address)": {
        "notice": "Determine if the message sender is in the administrators list."
      },
      "isRestrictionEnabled()": {
        "notice": "View function to determine if restrictions are enabled"
      },
      "messageForTransferRestriction(uint8)": {
        "notice": "This function allows a wallet or other client to get a human readable string to show a user if a transfer was restricted.  It should return enough information for the user to know why it failed."
      },
      "mint(address,uint256)": {
        "notice": "Exposes the ability to mint new FDTs for a given account. Caller has to be the owner of the FDT."
      },
      "pushFunds(address[])": {
        "notice": "Withdraws funds for a set of token holders"
      },
      "removeAdmin(address)": {
        "notice": "Remove an admin from the list.  This should only be callable by the owner of the contract."
      },
      "removeFromWhitelist(address)": {
        "notice": "Clears out an address's white list ID.  Only administrators should be allowed to update this."
      },
      "transfer(address,uint256)": {
        "notice": "Overrides the parent class token transfer function to enforce restrictions."
      },
      "transferFrom(address,address,uint256)": {
        "notice": "Overrides the parent class token transferFrom function to enforce restrictions."
      },
      "updateFundsReceived()": {
        "notice": "Register a payment of funds in tokens. May be called directly after a deposit is made."
      },
      "updateOutboundWhitelistEnabled(uint8,uint8,bool)": {
        "notice": "Sets the flag to indicate whether source whitelist is allowed to send to destination whitelist. Only administrators should be allowed to update this."
      },
      "withdrawFunds()": {
        "notice": "Withdraws all available funds for a token holder"
      },
      "withdrawableFundsOf(address)": {
        "notice": "prev. withdrawableDividendOfView the amount of funds that an address can withdraw."
      },
      "withdrawnFundsOf(address)": {
        "notice": "prev. withdrawnDividendOfView the amount of funds that an address has withdrawn."
      }
    },
    "notice": "This contract, unlike its parent contract, is entirely instantiated by the `constructor`. Therefore this contract may NOT be used with a proxy that `delegatecall`s it.",
    "version": 1
  }
}